Natknąłem się na ten rysunek, który pokazuje, że języki kontekstowe i zwykłe są (odpowiednimi) podzbiorami sprawnych problemów (podobno ). Doskonale rozumiem, że wydajne problemy stanowią podzbiór wszystkich rozstrzygalnych problemów, ponieważ możemy je rozwiązać, ale może to zająć bardzo dużo czasu.
Dlaczego wszystkie bezkontekstowe i regularne języki są skutecznie rozstrzygalne? Czy to oznacza, że ich rozwiązanie nie potrwa długo (to znaczy znamy to bez większego kontekstu)?
Odpowiedzi:
źródło
Uściślenie / „drobny druk” po odpowiedzi przez DC: wszystkie świetlówki kompaktowe w postaci normalnej formy Chomsky'ego można skutecznie przeanalizować za pomocą algorytmu CYK, a wszystkie świetlówki kompaktowe można przekonwertować na CNF. Jednak konwersja arbitralnej CFL na CNF może zająć przestrzeń wykładniczą w najgorszym przypadku, w zależności od niektórych algorytmów. (Nie znam algorytmu, który gwarantuje tutaj konwersję czasu P, czy ktoś jeszcze? Trzeba wziąć pod uwagę wszystkie skrajne / najgorsze przypadki, takie jak niedeterministyczne CFL lub dwuznaczne .) Wikipedia w sekcji CNF Porządek przekształceń
Dlatego wydaje się, że mogą istnieć świetlówki kompaktowe, których nie da się skutecznie przeanalizować. Większość języków programowania można skutecznie przekonwertować na CNF (lub być może głównie zdefiniowane w CNF lub w pobliżu CNF), dlatego parsowanie CFL dla „typowych” języków jest „praktycznie” u P. Prawdopodobnie istnieją pewne współczesne badania nad tym najgorszym złożonością (ale nie znajdź najnowsze artykuły na ten temat dotyczące wyszukiwania pobieżnego). Np. Ten starszy (1973) artykuł badawczy Greibacha również wydaje się wskazywać, że wydajność najgorszego przypadku może nie być ograniczona przez P. patrz np.
źródło