Sonlu miktarda depolama alanına sahip bir makinede çalışan herhangi bir tek iş parçacıklı program, sonlu durum makinesi olarak modellenebilir. Sonlu durum makinesindeki belirli bir durum, yerel değişkenler, global değişkenler, yığın depolama, sanal bellekte değiştirilmekte olan veriler, hatta ilgili dosyaların içeriği gibi ilgili tüm depolama alanlarının belirli değerlerini temsil edecektir. Başka bir deyişle, bir olacak çok bile oldukça önemsiz programlar için, bu sonlu durum modelinde durumlarının.
Programınızın sahip olduğu tek durum 32 bitlik bir tamsayı türünde tek bir genel değişken olsa bile, bu en az 2 ^ 32 (4 milyardan fazla) durum anlamına gelir. Ve bu program sayacı ve çağrı yığını bile hesaba katılmıyor.
Aşağı itilen otomat modeli bu tür şeyler için daha gerçekçi. Sonlu bir otomat gibi ama yerleşik bir yığın konseptine sahip. Yine de, çoğu programlama dilinde olduğu gibi bir çağrı yığını değildir.
Bir Wikipedia açıklaması var , ancak resmi tanım bölümünde saplanmayın.
Aşağı itmeli otomatalar genel hesaplamaları modellemek için kullanılır. Turing makineleri benzerdir , ancak IIRC aynı değildir - hesaplama yetenekleri eşdeğerdir .
Yukarıdaki hatayı işaret ettiği için Kevin Cline'a teşekkür ederiz - Wikipedia'nın da belirttiği gibi , aşağı itilen otomatalar sonlu durum makinelerinden daha güçlü, ancak Turing makinelerinden daha az güçlüdür.
I - Bu beyin osuruk nereden geldiğini gerçekten bilmiyorum do hassas dilbilgisi bağlamında özgür daha güçlü olduklarını bağlam biliyorum ve bu bağlam duyarlı dilbilgisi basit aşağı itilen Otomaton'u kullanılarak ayrıştırılamaz. Kesin olmayan, bağlamsız herhangi bir dilbilgisini doğrusal zamanda ayrıştırmak mümkün olsa da, bunu yapmak için genellikle (deterministik) bir push otomattan daha fazlasını gerektirir. Peki, aşağı itmeli bir otomatın Turing makinesine eşdeğer olduğuna nasıl inanabileceğim tuhaf.
Belki bazı ekstra makineler eklenmiş bir push-down otomatı düşünüyordum, ancak bu bir push-down otomatına eşdeğer olan sonlu bir otomat saymak gibi bir şey olurdu (sadece bir yığın ekleyin ve kullanın).
Aşağı itilen otomata ayrıştırmada önemlidir. Bu bağlamda onlara yeterince aşinayım, ama onları gerçekten bilgisayar bilimi hesaplama modelleri olarak hiç çalışmadım, bu yüzden zaten sahip olduğumdan çok daha fazla ayrıntı veremiyorum.
Tek bir OOP nesnesini sonlu durum makinesi olarak modellemek mümkündür. Makinenin durumu, tüm üye değişkenlerin durumları tarafından belirlenecektir. Normalde, yalnızca yöntem çağrıları arasında (sırasında değil) geçerli durumları sayarsınız. Yine, genellikle endişelenecek çok sayıda devletiniz olacaktır - bu teorik bir model olarak kullanabileceğiniz bir şeydir, ancak belki de önemsiz bir durum dışında tüm bu devletleri numaralandırmak istemezsiniz.
Bununla birlikte, bir sonlu durum makinesi kullanarak bir nesnenin durumunun bir yönünün modellenmesi oldukça yaygındır . Yaygın bir durum, oyun nesneleri için AI'dır.
Bu aynı zamanda, aşağı itmeli bir otomat modeli kullanarak bir ayrıştırıcıyı tanımlarken yapılan şeydir. Bir durum modelinde sınırlı bir durum kümesi olmasına rağmen, bu yalnızca ayrıştırıcının durumunun bir parçasını modeller; ek bilgiler bu durumun yanında ek değişkenlerde saklanır. Bu, örneğin 4 milyar-bir-tamsayı-durumu sorununu çözer — tüm bu durumları numaralandırmaz, sadece tamsayı değişkenini içerir. Bir bakıma hâlâ aşağı itilen otomat devletinin bir parçası, ama gerçekte bir diyagrama 4 milyar durum kabarcığı çizmekten çok daha yönetilebilir bir yaklaşım.