Pull to refresh

Comments 7

Спасибо за статью. Правильно ли я понимаю, что эволюцию через 2^k — 1 получить наиболее трудозатратно?
Пожалуй, да. Способ получить результат через время T мог бы быть таким:
Берем интересующую нас область S, она порождается из области S0=S*T (здесь * — расширение на T клеток в каждую сторону). Предположим, что мы знаем результат развития области S0 через время T1=N1*k, где N1 — степень двойки, k=[T/N1]. Этот результат представлен как двумерный массив квадратов со стороной 2*N1. Теперь смотрим. Если T-T1<N1/2, то разбиваем каждый квадрат на четыре части, это и будет массив для следующего шага. Если нет, придется просчитать эволюцию на N1/2 шагов вперед. Для самих квадратов со стороной 2*N1 берем их результат, для квадратов на стыках — пользуемся тем же методом, что и в Unite. Насколько я понимаю, новых квадратов в словарь при этом не добавится, но доказать это утверждение еще не пробовал.
После получения нового массива полезно проверить, какие клетки на краю нам нужны, и выбросить лишние.
«HashLife как наиболее эффективный способ интерпретации разумных программных объектов. Вся история вашей цивилизации будет просчитана за полчаса! Забудьте про жизнь на скорости 1/17 от реального времени!»
Алгоритм мутновато описан, я ничего не понял пока не прочитал эту статью.
Спасибо за ссылку. Может быть, кому-нибудь пригодится. Я сам этой статьи не читал, но здесь трудно придумать что-нибудь неправильное. Хотя, надо прочитать подробнее. Может быть, у автора есть какие-нибудь детали, которых я не заметил.
Помню на своём первом компе делал жизнь по другому: считался bounding-box где что-то есть + поле билось на достаточно крупные квадраты и там, где ничего нет — расчет не проводился.

Позволяло бодренько гонять на поле 2048x2048 и выше на P-133 :-)
Sign up to leave a comment.

Articles