CFG'ler için Chomsky normal form gibi normal formların önemi


12

Bağlamdan bağımsız gramerlerin bağlamdan bağımsız dilleri temsil etmek için kullanılabileceğini anlıyorum, belirsizlikleri olabilir. Chomsky ve Greibach normal formu gibi normal formlarımız da var . Bunun ihtiyacını anlayamadım.

Dil teorisinde neden önemlidirler? Bahsettiğim tüm ders kitapları bu normal formları anlattı ama önemleri hakkında hiçbir şey söylemedi.


2
Normal formlar yapıcı kanıtlar verirken kullanışlıdır.
Karolis Juodelė

Yanıtlar:


12

En az iki ilgili kullanım vardır.

  1. İspatların
    basitliği İndirgenebilirlik ve otomatlara eşdeğerlik dahil, bağlamsız gramerler etrafında birçok ispat vardır. Bunlar ne kadar basitse, uğraşmanız gereken gramer seti de o kadar kısıtlıdır. Bu nedenle, orada normal formlar yardımcı olabilir.

    εε

  2. Ayrıştırmayı etkinleştirir
    PDA'lar herhangi bir dilbilgisi ile sözcükleri ayrıştırmak için kullanılabilirken, bu genellikle elverişsizdir. Normal formlar, çalışmamız için bize daha fazla yapı verebilir ve bu da daha kolay ayrıştırma algoritmalarıyla sonuçlanabilir.

    Somut bir örnek olarak, CYK algoritması Chomsky normal formunu kullanır. Greibach normal formu ise özyinelemeli iniş ayrıştırma sağlar; geri izleme gerekli olsa da, alan karmaşıklığı doğrusaldır.


5

Chomsky normal formu, bir dizenin bir dilbilgisi tarafından üretilip üretilemeyeceğine karar vermek için polinom zaman algoritması sağlar. Dinamik programlama biliyorsanız algoritma oldukça kaygan ...

InAnn

A[i,j]GI(i,j)

A[1,n]SS

def decide (string s,grammar G):
    //base case
    for i=1 to n:
        N[i,i]=I[i]    //as the substring of length one can be generated by only a
                       terminal.
    //end base case

    //induction
    for s=1 to n:       //length of substring
        for i=1 to n-s-1: //start index of substring
            for j=i to i+s-1:   //something else
                 if there exists a rule A->BC such that B belongs to N[i,j] and C
                 belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
    //endInduction

    if S belongs to N[1,n] then accept else reject.

Endekslerin oldukça çılgınca göründüğünü biliyorum. Ama temelde burada neler oluyor.

  • Baz dava oldukça net.

  • ss

  • 5sub1A>BCBCAN[1,6]

  • N[1,n]


  • 3
    Bu, a) böyle adlandırmanız ve b) cevabımda belirtilmiş olan CYK algoritmasıdır. Polinom çalışma zamanının sadece etkileyici olduğunu unutmayın, çünkü algoritma tüm CFG'ler üzerinde aynıdır, yani geneldir.
    Raphael

    @Raphael ok .... adını bilmiyordum :)
    ishan3243

    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.