Hashlife - Hashlife
Hashlife , Conway'in Game of Life'ında ve ilgili hücresel otomatlarda belirli bir başlangıç konfigürasyonunun uzun vadeli kaderini , otomatın her bir hücresinin her bir zaman adımını simüle eden alternatif algoritmalar kullanılarak mümkün olandan çok daha hızlı bir şekilde hesaplamak için hafızaya alınmış bir algoritmadır . Algoritma ilk olarak 1980'lerin başında Xerox Palo Alto Araştırma Merkezi'nde araştırma yaparken Bill Gosper tarafından tanımlandı . Hashlife, başlangıçta Flavors uzantısının yardımıyla Symbolics Lisp makinelerinde uygulandı .
hashlife
Hashlife, çoğu Yaşam kuralında büyük miktarda uzamsal ve zamansal fazlalıktan yararlanmak için tasarlanmıştır . Örneğin, Conway's Life'da , görünüşte rastgele birçok desen, basit natürmortlar ve osilatörlerden oluşan koleksiyonlar olarak sonuçlanır .
temsil
Alan tipik olarak teorik olarak sonsuz bir ızgara olarak ele alınır ve söz konusu model orijine yakın ortalanır . Alanı temsil etmek için bir dörtlü ağaç kullanılır. 2 kare Verilen 2 k hücreleri, 2 k de, bir tarafta k ağacının inci düzey, karma tablo depolar 2 k -1 -by-2 k -1 merkezinde hücrelerin kare, 2 k - 2 nesil gelecek. Örneğin, bir 4×4 kare için 2×2 merkezini, bir nesil ileriyi depolar; ve 8×8 kare için 4×4 merkezini, iki nesil ileriye depolar.
Hashing
Bir dörtlü ağaç tipik olarak çok daha fazla olsa da yükü (örneğin, bir kullanma gibi başka daha basit temsilden başka matris arasında bit ), çeşitli optimizasyonlar sağlar. Adından da anlaşılacağı gibi, algoritma , dörtlü ağacın düğümlerini depolamak için karma tabloları kullanır . Ağaçtaki birçok alt model genellikle birbiriyle aynıdır; örneğin, çalışılan model aynı uzay gemisinin birçok kopyasını veya hatta büyük boş alan alanlarını içerebilir . Bu alt modellerin tümü karma tablosunda aynı konuma gelir ve bu nedenle aynı alt modelin birçok kopyası aynı karma tablosu girişi kullanılarak saklanabilir. Ayrıca, bu alt modellerin diğer Life algoritmalarında olduğu gibi kopya başına bir kez değil, yalnızca bir kez değerlendirilmesi gerekir.
Bu, kaynak gereksinimlerinde önemli gelişmelere yol açar; örneğin , polinom hızlarında büyüyen çeşitli yetiştiricilerin ve boşluk doldurucuların bir nesli, logaritmik uzay ve zaman kullanılarak Hashlife'da değerlendirilebilir .
Süper hız ve önbelleğe alma
Farklı düğümleri farklı hızlarda geliştirerek birçok model için daha fazla hızlanma elde edilebilir. Örneğin, bir ön (bir düğüm için kuşak sayısının iki katını hesaplayabilirdi k az biri ile karşılaştırıldığında 1) inci seviyesi k th. Klasik planör tabancası gibi seyrek veya tekrarlayan modeller için bu, muazzam hızlanmalarla sonuçlanabilir ve daha yüksek nesillerde daha büyük kalıpların daha hızlı , bazen katlanarak hesaplanmasına izin verir . Bu özellikten tam olarak yararlanmak için, geçmiş nesillere ait alt modeller de kaydedilmelidir .
Farklı kalıpların farklı hızlarda çalışmasına izin verildiğinden, Gosper'ın kendi hlifeprogramı gibi bazı uygulamalar etkileşimli bir ekrana sahip değildir, ancak genellikle komut satırından çalıştırılan bir başlangıç kalıbı için önceden ayarlanmış bir sonucu hesaplar . Ancak Golly gibi daha yeni programlar , Hashlife tabanlı bir motoru çalıştırabilen bir grafik arayüze sahiptir.
İletken bir model üzerinde bir Hashlife programının tipik davranışı şu şekildedir: ilk olarak algoritma, hashing ve ağacı oluşturma ile ilişkili sabit ek yük nedeniyle diğer algoritmalara kıyasla daha yavaş çalışır ; ancak daha sonra, yeterli veri toplanacak ve hızı muazzam bir şekilde artacaktır - hızdaki hızlı artış genellikle " patlama " olarak tanımlanır .
Dezavantajları
Birçok memoized kod gibi, Hashlife diğer algoritmalardan önemli ölçüde daha fazla bellek tüketebilir , özellikle çok fazla entropiye sahip orta büyüklükteki kalıplarda veya dörtlü ağaç düğümlerinin sınırlarına zayıf hizalanmış alt kalıplar içeren (yani iki boyutun gücü); önbellek savunmasız bir bileşendir. Ayrıca bu kalıplar üzerinde diğer algoritmalardan daha fazla zaman harcayabilir. Golly , diğer Life simülatörlerinin yanı sıra, Hashlife ve geleneksel algoritmalar arasında geçiş yapma seçeneklerine sahiptir.
Hashlife önemli ölçüde daha da karmaşık olduğunu uygulamak . Örneğin, kullanılmayan düğümleri önbellekten kaldırmak için özel bir çöp toplayıcıya ihtiyacı vardır .
Genel olarak öngörülebilir kalıpları işlemek için tasarlandığından, kaotik ve patlayıcı kurallar genellikle Hashlife altında diğer uygulamalarda olduğundan çok daha kötü çalışır.
Ayrıca bakınız
- Karma dörtlü ağacın bir olduğu tamamen işlevsel veri yapısı
- Hashlife'ın orijinal uygulamasında kullanılan kilit strateji olan Hash consing.
Referanslar
- Gosper, Bill (1984). "Geniş Hücresel Uzaylarda Düzenlilikleri Sömürmek". Physica D . Elsevier. 10 (1–2): 75–80. doi : 10.1016/0167-2789(84)90251-3 .