Важливість нормальних форм, таких як норма Хомського для CFG


12

Я розумію, що без контексту граматики можна використовувати для представлення без контекстних мов. У нас також є нормальні форми, такі як Хомський і Грайбах нормальної форми. Я не міг зрозуміти необхідності цього.

Чому вони важливі в теорії мов? Усі підручники, про які я згадував, розповідають про ці звичайні форми, але нічого не розповідають про їх значення.


2
Нормальні форми зручні при наданні конструктивних доказів.
Karolis Juodelė

Відповіді:


12

Існує щонайменше два релевантні варіанти використання.

  1. Простота доказів
    Існує безліч доказів навколо безконтекстних граматик, включаючи скорочення та еквівалентність автомати. Це тим простіше, чим більш обмежений набір граматик, з якими вам доводиться стикатися. Тому нормальні форми там можуть бути корисними.

    В якості прикладу конкретного, Greibach нормальної форми використовуються , щоб показати (конструктивно) , що існує -перехід вільної КПК для кожного CFL (який не містить ε ).εε

  2. Вмикає розбір
    Хоча КПК можна використовувати для розбору слів із будь-якою граматикою, це часто незручно. Звичайні форми можуть дати нам більше структури для роботи, що призводить до спрощення алгоритмів розбору.

    В якості конкретного прикладу алгоритм CYK використовує нормальну форму Хомського. Нормальна форма Грейбаха, з іншого боку, забезпечує рекурсивно-спускний аналіз; навіть якщо зворотний трек може бути необхідним, складність простору лінійна.


5

Нормальна форма Хомського дозволяє алгоритму багаточленного часу вирішити, чи може породжуватися рядка граматикою. Алгоритм досить гладкий, якщо ви знаєте динамічне програмування ...

Якщо довжина вашого вводу ( ) дорівнює n, то ви берете 2d масив ( A ) dim n x n .InAnn

позначає всі символи в граматиці G, які можуть виводити підрядок I ( i , j ) .A[i,j]GI(i,j)

Отже, якщо містить символ початку ( S ), то це означає, що рядок I може бути отриманий S , що ми хотіли перевірити.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.

Я знаю, що показники здаються досить божевільними. Але в основному ось що відбувається.

  • Я думаю, базовий випадок досить зрозумілий.

  • sс

  • 5sub1А->БСБСАN[1,6]

  • N[1,н]


  • 3
    Це алгоритм CYK, який: а) слід назвати таким, і б) було зазначено у моїй відповіді. Зауважте, що тривалість поліномів вражає лише тим, що алгоритм є рівномірним для всіх CFG, тобто він є загальним.
    Рафаель

    @Raphael добре .... я не знав ім'я :)
    ishan3243

    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.