Для умственного упражнения я решил попробовать игру «Разрушитель пузырей», которую можно найти на многих мобильных телефонах, а также пример, приведенный здесь: Bubble Break Game
- Случайная (N, M, C) доска состоит из N строк x M столбцов с цветами C
- Цель состоит в том, чтобы получить наивысший балл, выбрав последовательность пузырьковых групп, которая в итоге приводит к наивысшему баллу
- Группа пузырьков - это 2 или более пузырьков одного цвета, которые расположены рядом друг с другом в направлении x или y. Диагонали не в счет
- Когда группа выбрана, пузырьки исчезают, любые отверстия сначала заполняются пузырьками сверху, т. Е. Сдвигаются вниз, затем любые отверстия заполняются смещением вправо
- Оценка группы пузырьков = n * (n - 1), где n - количество пузырьков в группе пузырьков
Первый алгоритм - это простой исчерпывающий рекурсивный алгоритм, который исследует прохождение по доске досок за строкой и столбцом за столбцом, выбирая группы пузырьков. Как только группа пузырей выбрана, мы создаем новую доску и пытаемся решить эту доску, рекурсивно спускаясь вниз
Некоторые из идей, которые я использую, включают нормализованное запоминание. Когда доска решена, мы сохраняем доску и лучший результат в таблице воспоминаний.
Я создаю прототип в python , который показывает, что (2,15,5) доска требует 8859 досок для решения примерно за 3 секунды. Плата (3,15,5) занимает 12,384,726 досок за 50 минут на сервере. Скорость решения составляет ~ 3k-4k досок / сек и постепенно уменьшается, поскольку поиск по памятникам занимает больше времени. Таблица мемоизации увеличивается до 5 692 482 досок и достигает 6 713 566 раз.
Какие другие подходы могут дать высокие результаты, кроме исчерпывающего поиска?
Я не видел никакого очевидного способа разделить и победить. Но тенденция к большим и большим группам пузырьков, кажется, является одним из подходов
Спасибо Дэвиду Локку за публикацию ссылки на бумагу, в которой говорится о решателе окон, который использует эвристику прогнозирования постоянной глубины.