Ten problem nazywa się "włączeniem" lub "subsuma" wyrażeń regularnych, ponieważ to, o co prosisz, to czy zestaw słów dopasowanych przez jedno wyrażenie regularne zawiera (lub podsieci) zestaw słów dopasowanych przez inne wyrażenie . Równość to inne pytanie, które zwykle oznacza, czy dwa wyrazy regularne dopasowują dokładnie te same słowa, to znaczy, że są funkcjonalnie równoważne. Na przykład "a *" zawiera "aa *", podczas gdy nie są one równe.
Wszystkie znane algorytmy włączania wyrażeń regularnych są najgorszym przypadkiem, gdy czas eksponencjalny wpływa na rozmiar wyrażeń regularnych.Ale średnia algorytm jest tak:
R1 Wejście i R2 Wyjście Tak, jeśli R1 zawiera r2
- Tworzenie DFA (R1) i DFA (r2)
- Tworzenie Neg (DFA (R1)) (który pasuje dokładnie do słów r1 dont match)
- Utwórz Neg (DFA (r1)) x DFA (r2) (który pasuje dokładnie do słów dopasowanych przez Neg (DFA (r1)) i DFA (r2))
- Sprawdź, czy automat wykonany w wersji 3. nie pasuje do żadnego słowa
Działa to, ponieważ sprawdzane jest to, że nie ma słów dopasowanych przez r2, które nie są dopasowane przez r1.
@skaffman: Myślę, że znacznik języka regularnego jest odpowiedni, biorąc pod uwagę, że wyrażenie regularne opisuje zwykły język - jest to po prostu prosty sposób przedstawienia go "na papierze". Ale pytanie w.r.t. informatyka ma więcej wspólnego z normalnymi językami niż wyrażeń regularnych. –
eh, tytuł nie pasuje do opisu? – maxschlepzig
Nie jestem pewien, czy kwalifikuje się jako "algorytm", ale używając ". *" Dopasowuje dowolne dane wejściowe z jednym wyrażeniem regularnym; Wątpię, czy można go zminimalizować do mniej niż 1. :-) –