В настоящее время я выполняю задание и придерживаюсь определенного подхода.
У меня есть кроссворд, состоящий из пустой сетки (без сплошного квадрата, как в обычном кроссворде) с разной шириной и высотой от 4 до 400 (включительно).
Правила:
- Слова являются частью ввода - списка из 10–1000 (включительно) английских слов разной длины.
- Горизонтальное слово может пересекать только вертикальное слово.
- Вертикальное слово может пересекать только горизонтальное слово.
- Слово может пересекать только 1 или 2 других слова.
- Каждая буква приносит одно очко.
- Слова должны иметь пробел в 1 ячейку сетки, если они не являются частью пересекающегося слова.
Пример:
X X X X X X
X B O S S X
X X X X X X
Цель:
набрать максимально возможное количество очков в течение 5 минут.
Пока:
После некоторого исследования я понял, что это проблема NP-Hard. Таким образом, невозможно рассчитать наиболее оптимальное решение, поскольку невозможно изучить каждую комбинацию.
Казалось бы, самым простым решением было бы отсортировать слова по длине и вставить слова с наивысшей оценкой для максимальной оценки (жадный алгоритм).
Мне также рассказали о рекурсивном дереве с узлами, состоящими из альтернативных вставок слов с одинаковой оценкой, и алгоритм ранца, применимый к этой проблеме (не уверен, как будет выглядеть реализация).
Вопросы:
- Что позволяет мне проверить максимальное количество комбинаций в течение 5 минут, которое масштабируется в соответствии с максимально возможным списком слов и размером сетки?
- Какие эвристики я могу применить при вставке слов?
Между прочим, цель здесь - получить наилучшее возможное решение за 5 минут. За пояснение каждая буква допустимого слова дает 1 балл, таким образом, слово из 5 букв дает 5 баллов.
Заранее спасибо. Я читал много математических обозначений в кроссвордах в течение всего дня, что, кажется, завело меня по кругу.
sort the words according to length and inserting the highest scoring words for maximum score
- хорошая идея. На самом деле я бы начал с самых коротких (больше вариантов размещения большего количества слов). Помните, максимум 2 перекрестка. А как насчет поиска самой распространенной буквы? - person shapiro yaacov   schedule 10.09.2015