Edycja algorytmów odległości i metoda Levenshteina, podobnie jak metoda LCS, są korzystne. Ale są one używane do zmiany jednego słowa na drugie, dzięki tym metodom można dowiedzieć się, jak zmienić jedno słowo na inne z minimalną ilością zmian. Ale nie są one przydatne, aby znaleźć minimalną ilość zmian w dwóch słownikach.
najdłuższy wspólny podciąg (LCS) problemem jest znalezienie najdłuższy podciąg wspólny dla wszystkich sekwencji w zbiorze sekwencji (często tylko dwa). Należy zauważyć, że podsekwencja różni się od podciągu, patrz podłańcuch pod względem podciągania. Jest to klasyczny problem z informatyką, oparty na programach do porównywania plików, takich jak diff, i ma zastosowania w bioinformatyce .
Korzystając LCS ani innych metod, dla każdego słowa w listy1, okaże się, że, jak to słowo zmienia się na inną listy 2. na przykład między kolana & stóp: LCS = FT, różnica = oo = > ee. Powinieneś zrobić dwuczęściowy wykres, który pierwsza część tworzy ze słów różnicowych, a druga część tworzy z listy1. Każdy węzeł w drugiej części jest połączony z własną powiązaną różnicą w pierwszej części.
Przypuszczam, że długość i całkowita część słów są ograniczone.
Możemy modelować ten problem za pomocą wykresów. Przydziel każdą zmianę do jednego węzła. np. e → i (która określa jedną ze zmian) to etykieta dla jednego węzła. na przykład, jeśli cała operacja formularza p → q jest ustawiona na jedną część na wykresie dwudzielnym, a różnica całkowita dla każdej pary słów jest równa jednej i zdefiniowanie kolekcji Edge, która Edge uv
łączy wierzchołek U
z V
, jeśli słowo (u) (w drugiej części) dla zmiany na poprawne słowo wymaga zmian V.Masz maksymalnie 25 * 26 węzeł w pierwszej części (dla tego przykładu). jeśli w Twoim przypadku długość> = 1, więc musisz ustawić limit. Zakładam, że maksymalna część zmian dla każdego słowa jest równa 3. i dlatego mamy 3 * 35K maksymalny węzeł w pierwszej części. Teraz możesz rozwiązać problem, wybierając zestaw węzłów w pierwszej części, które mogą być pokryte maksymalnym słowem w drugiej części (twoja wybrana powinna nastąpić zmiana słowa na poprawne słowo).
Znajdź minimalne cięcie wierzchołków na tym wykresie, aby znaleźć zestaw węzłów, do których mogą dostarczyć twoje żądanie. Następnie powtórz wycinanie algorytmów wierzchołkowych, aż uzyskasz dobrą odpowiedź.
możesz użyć pewnego rodzaju ograniczeń, aby zmniejszyć rozmiar wykresu, np. Usunąć wszystkie węzły w pierwszej części, które mają stopień 1
, ponieważ węzły te są połączone z dokładnie jednym słowem, więc wydają się być bezużyteczne.
Ta symulacja wykresu może rozwiązać problem. W bieżącym opisie problemu, granice algorytmu działają poprawnie.
na przykład:
jest przykładem granice na wykresie (usunięcie wszystkich węzłów w ramach operacji, które mają 1 EDGE)
1-usunąć węzeł 4, ponieważ jest to związane tylko (Nod), a następnie usunąć węzeł (nod) 2-usuń węzeł 2, ponieważ jest on podłączony tylko do (sghoul), a następnie usuń węzeł (sghoul) 3-teraz usuń węzeł 3, ponieważ jest tylko podłączony do (goud) [sghoul jest usuwany ostatni krok], a następnie usuń węzeł (goud)
a teraz masz jedną operację oo => ee i możesz wybrać to.
Będę więcej myślał i spróbuję edytować ten tekst.
Czy chcesz również znaleźć i -> a w 4 i 5? Innymi słowy, czy liczyć, że do wystąpienia występuje 4 razy powyżej lub tylko 2? – ex0du5
Dobre pytanie. Myślę, że jeśli zmiana nastąpi jako część innej zmiany, nie należy jej liczyć. Więc liczę tylko 2. – Reactormonk
czy masz limit długości słów? –