Załóżmy, że otrzymaliśmy zbiór ciągów, . Chciałbym wiedzieć, czy którykolwiek z tych ciągów jest podciągiem dowolnego innego ciągu w kolekcji. Innymi słowy, chciałbym algorytm dla następującego zadania:
Dane wejściowe:
Wyjście: takie, że jest podłańcuchem i , lub None, jeśli nie takie exist
Czy istnieje na to wydajny algorytm?
Jeśli zamienimy „podłańcuch” na „przedrostek”, istnieje skuteczny algorytm (posortuj ciągi, a następnie wykonaj skanowanie liniowe, aby porównać sąsiednie ciągi; sortowanie zapewni, że podciągi są sąsiadujące). Ale trudniejsze wydaje się sprawdzenie, czy dowolny ciąg znaków jest podciągiem dowolnego innego ciągu. Naiwny algorytm polega na iteracji wszystkich par , ale wymaga to testów podciągowych . Czy istnieje bardziej wydajny algorytm?
Myślę, że moglibyśmy nazwać to „testowaniem podciągów na wszystkich parach” lub coś w tym rodzaju.
Moim ostatecznym celem jest przycięcie kolekcji, aby żaden ciąg nie był podciągiem innych elementów, poprzez usunięcie każdego z nich, który jest podciągiem czegoś innego w kolekcji.