Другой вопрос о Жизни (бесконечная сетка)?

Я играю с игрой в Conway Game of the life и недавно обнаружил некоторые удивительно быстрые реализации, такие как Hashlife и Golly. (скачать Golly здесь - http://golly.sourceforge.net/)

Одна вещь, с которой я не могу оглянуться, - как кодеры используют бесконечную сетку? Мы не можем держать бесконечный массив чего-либо, если вы запускаете golly и получите несколько планеров, чтобы улететь мимо краев, дождитесь нескольких минут и прицелиться вправо, вы увидите, что планеры все еще находятся в пространстве, убегая, так как в названии богов это понятие бесконечности касается программно? Есть ли хорошо документированный шаблон или что?

Большое спасибо

Ответы

Ответ 1

В этой ситуации можно представить живые узлы с некоторым типом разреженной матрицы. Например, если мы храним список пар (LivingNode, Coordinate) вместо массива Nodes, где каждый из них либо жив, либо мертв, мы просто меняем Coordinates, а не увеличиваем размер массива. Таким образом, требуемое для этого пространство пропорционально числу LivingNodes.

Это решение не работает для состояний, где количество живых узлов постоянно увеличивается, но оно отлично работает для планеров.

РЕДАКТИРОВАТЬ: Итак, это было не в моей голове. Оказывается В Википедии есть статья, которая показывает гораздо более продуманное решение. Ну что ж!:) Наслаждайтесь.

Ответ 2

Википедия объясняет это. Основная идея заключается в том, что Game of Life в Conway показывает местность, поскольку информация перемещается с небольшой скоростью по сравнению с размером рисунка и максимальной плотностью заполненных клеток, составляет около 1/2 клеток в любом регионе. (Больше будет убивать клетки из-за перенаселенности.)

Поскольку существует локальность, вы можете разделить поле в разных разделах и самостоятельно имитировать каждый раздел. Если вы выберете свою местность хорошо, вы часто увидите те же шаблоны. Вы можете имитировать, как они эволюционируют и сохраняют результаты в таблице поиска, так что другие экземпляры одного и того же шаблона не нужно моделировать более одного раза. Объединение смежных шаблонов в более крупные "метапаттерны" позволяет также заранее просчитать их и т.д.