Parantez Eşleşmesi İçin İki Durumlu Turing Makinesi


9

Kolejde genel olarak hesaplama teorisi ve Turing makineleri hakkında daha spesifik bilgi ediniyoruz. Büyük teorik sonuçlardan biri, potansiyel olarak büyük bir alfabe (semboller) pahasına, eyalet sayısını sadece 2'ye indirebilmenizdir.

Farklı Turing Makineleri örnekleri arıyordum ve sunulan yaygın bir örnek Parantez eşleştiricisi / denetleyicisi. Esasen, örneğin bir parantez dizisinin (()()()))()()()dengeli olup olmadığını kontrol eder (önceki örnek dengesiz için 0 değerini döndürür).

Belki bunu üç durumlu bir makine olarak alabilirim. Herkes bunu teorik minimum 2 ve aşağı yaklaşım / devletler / semboller ne kadar azaltabilir bilmek istiyorum!

Açıklığa kavuşturmak için, parantezler boş bant arasında "sandviçlenir", bu nedenle yukarıdaki örnekte - - - - - - - (()()()))()()() - - - - - - -bant üzerindeki girdi olacaktır. Alfabe yer alacağını (, ), 1, 0, -, ve *halt*devlet devlet olarak sayılmaz.

Referans olarak, sahip olduğum üç durum yaklaşımı aşağıdaki gibidir: Durumların tanımı:

 State s1: Looks for Closing parenthesis

 State s2: Looks for Open parenthesis

 State s3: Checks the tape to ensure everything is matched

 Symbols: ),(,X

Geçişler Listelenen:

Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0  -
Action: s1 -  s3    -  r

//Transitions of TM
Action: s1 (  s1  (   l
Action: s1 )  s2  X  r
Action: s1 X  s1  X  l
Action: s2 ( s1 X  l
Action: s2 X  s2 X r
Action: s3 (  *halt* 0 -
Action: s3 X  s3     X r
Action: s3 -  *halt* 1 -

Tüm bunları yazmanın gayri resmi yolunu affedin. Hala bunun arkasındaki teorik yapıları öğreniyorum.


Daha büyük bir alfabe kullanmamıza izin var mı?
Raphael

@Raphael Teorik sonuca göre, devletler alfabe ve tersi ile değiş tokuş edilebilir. Dolayısıyla durumları ikiye düşürmek, büyük olasılıkla daha büyük bir alfabe kullanmanız gerektiği anlamına gelir. Yani evet, kısa cevap Alfabe istendiği kadar büyük olabilir
Four_FUN

Sanırım, iki bantlı TM'de, bu ekstra semboller olmadan yapılabilir ve.
Karolis Juodelė

@Four_FUN siz MIT'den misiniz?

Yanıtlar:


8

Raphael'in cevabının sadece bir "kaynak kodu" özeti: bu, aynı hileyi kullanan (q1 durumunda) ve bant alfabesine sahip çalışan bir sürüm:
_ ( ) [ { / \ (burada , ilk boş semboldür)_

q0:  _ -> accept  // accept on empty string and on balanced parenthesis
     ( -> {,R,q1  // mark the first open "(" with "{" and goto q1
     ) -> reject  // reject if found unbalanced ")"
     \ -> /,L,q0  // go left
     / -> \,R,q0  // go right

q1:  ( -> [,R,q1  // replace "(" with "[" and continue ...
     ) -> /,L,q1  // ... until first ")", replace it with "/" and goto left
     [ -> \,R,q1  // found matching "(" bracket, goto right and search for another ")"
     _ -> reject  // no ")" found for the first "{", reject
     { -> \,R,q0  // this must be the last match, goto q0 and check if it is true
     \ -> /,L,q1  // go left
     / -> \,R,q1  // go right

Bir Turing makinesi çevrimiçi simülatörü kullanarak iş yerinde görebilirsiniz ; kaynak kodu:

0 _ Y r halt
0 ( { r 1
0 ) N r halt
0 \ / l 0
0 / \ r 0
1 ( [ r 1
1 ) / l 1
1 [ \ r 1
1 _ N r halt
1 { \ r 0
1 \ / l 1
1 / \ r 1

Son bir not: eğer bu tekniğin sınıra nasıl itilebileceğini görmek istiyorsanız , "Küçük evrensel Turing" de Y. Rogozhin tarafından 2 durum ve 18 sembol içeren Universal Turing makinesinin yapısını okuyun (ve anlamaya çalışın :-). makineler"


Sadece kaynak kodu sunan cevapların Bilgisayar Bilimi için iyi olmadığına karar vermedik mi? ;)
Raphael

1
@Raphael: Sana katılıyorum, ama benimki seninki gibi bir zeyilname olarak görülebilir (ayrıntıları kontrol etmemiş olsam bile iyi görünüyor). Bununla ilgili bir not ekleyeceğim.
Vor

1
@Raphael: Ben sadece bant sembollerini en aza indirmeye çalışırken eğlence için kodlanmış ve çalışmak için "görünüyor" :-) bu yüzden ben göndermeye karar verdi.
Vor

@Vor. Bu soruna ek olarak verdiğiniz için çok teşekkür ederiz. Bütün bunlar bana bu konuda daha fazla pratiğe ihtiyacım olduğunu söylüyor. Teori peşimde olduğum halde, yine de kaynak kodunuzu yayınladığınız için teşekkür ederiz.
Four_FUN

1
@Four_FUN: Rogozhin Universal TM (2,18), rastgele bir 2 etiketli sistemi (evrensel bir model olan) simüle eden standart bir Turing makinesidir (yani giriş bandının dışında yalnızca boş semboller içerir). 2 durum 3 sembolü bir zayıf Turing makinesidir (ilk bandın bir desenin sonsuz sekansı ile doldurulması gerekir) ve evrensellik, hücresel otomata Kural 110'u (Turing tamamlandığı kanıtlanmıştır) simüle ederek "ulaşılır" ). Standart bir TM'nin (2,3) Turing'in tamamlanamayacağına dair (iddia edilen?) Bir kanıt vardır.
Vor

7

Aptal cevap: sonucunuz iki durumlu evrensel bir Turing makinesi olduğunu vaat ediyor . Construct herhangi , Dyck dil için TM indeksini hesaplamak ve evrensel makinesine bunu hardcode.

Ama bu elbette pek tatmin edici değil. Parantez çiftlerini alfabenin bir uzantısıyla eşleştirirken sola hareket etme ve sağa hareket etme arasındaki farkı “kandırırsanız” yaklaşımınız işe yarar. İhtiyacımız var{#,(,),x} ve işaretli versiyonlar bir^ tüm sembollerin bir.

  • Başlangıç ​​durumu q0 aşağıdaki gibi çalışır.

    İşaretlenmemiş simgeler bulunurken, ilk işarete kadar sağa doğru hareket edin )bulunan. Bunu yaparken, tüm sembollerin üzerine yazınbir ile bir^. Bulunanın üzerine yaz) ile x^.
    Yoksa)yani boşluk simgesine çarptık #, üzerine yaz x^ ve şuna geç q1.

    İşaretli sembolleri bulduğunuzda, ilkine kadar sola gidin (^, tüm geçirilmiş (işaretli) sembollerin işaretlenmemiş varyantlarının üzerine yazılmasıyla sonuçlanır. Bulunanın üzerine yaz(^ ile x.
    Bir bulursak)^ veya # önce döngü / reddet¹.

  • İçinde q1, her şeyin eşleşip eşleşmediğini kontrol ediyoruz; hala formun önekleri olabilir(^+kaset üzerinde. Yani, biz solumuzda sola gitx^. Eğer böyle bulursak#, kabul etmek; başka bir sembol bulursak x^ ilk olarak, döngü / reddet.


  1. Makine içten dışa eşleştiğinden bu doğrudur; yasal bir girdide, sadecex şu anda eşleştirilen parantez çifti arasında.

Bana sormamanın sakıncası yoksa, çözümüm tam olarak iki devletle evrensel bir TM vaat ediyor ? (girişiniz için size çok akıllı bir çözüm btw.)
Four_FUN

1
@Four_FUN: çünkü sorunuzda şunları söylüyorsunuz: "... Büyük teorik sonuçlardan biri, potansiyel olarak büyük bir alfabe (semboller) pahasına, durum sayısını sadece 2'ye düşürebilirsiniz ..." . .. böylece isteğe bağlı bir Universal Turing makinesi seçebilir ve durum sayısını sadece 2'ye düşürebilirsiniz. Ve bazı deneyler yaparsanız , rastgele bir TM'yi eşdeğerine dönüştüren otomatik bir prosedür yapmanın zor olmadığını da fark edeceksiniz. 2 devlet TM (alfabe sembollerinin sayısının en aza indirilmesi umurumda değilse).
Vor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.