Другой вопрос о Жизни (бесконечная сетка)?
Я играю с игрой в 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 клеток в любом регионе. (Больше будет убивать клетки из-за перенаселенности.)
Поскольку существует локальность, вы можете разделить поле в разных разделах и самостоятельно имитировать каждый раздел. Если вы выберете свою местность хорошо, вы часто увидите те же шаблоны. Вы можете имитировать, как они эволюционируют и сохраняют результаты в таблице поиска, так что другие экземпляры одного и того же шаблона не нужно моделировать более одного раза. Объединение смежных шаблонов в более крупные "метапаттерны" позволяет также заранее просчитать их и т.д.