2010-09-07 21 views
12

Poszukuję efektywnej implementacji algorytmu LCS do użycia w programie C++. Wejścia są dwoma losowymi sekwencjami dostępu do liczb całkowitych.
Używam obecnie metody programowania dynamicznego na stronie wikipedia poświęconej LCS. Jednak ma ono O (mn) zachowanie w pamięci i czasie i umiera na mnie z powodu braku błędów pamięci dla większych wejść.
Przeczytałem o algorytmie Hirschberga, który znacznie poprawia wykorzystanie pamięci, Hunt-Szymański, Masek i Paterson. Ponieważ nie jest to łatwe do wdrożenia, wolę wypróbować je na moich danych z istniejącą implementacją. Czy ktoś wie o takiej bibliotece? Mogę sobie wyobrazić, że skoro narzędzia do porównywania tekstu są dość powszechne, to w okolicy powinny znajdować się jakieś biblioteki open source?efektywna najdłuższa biblioteka algorytmów wspólnego podciągania?

+0

jesteś zainteresowany rzeczywistego najdłuższy wspólny podciąg lub tylko jego długość? – IVlad

+0

Potrzebuję rzeczywistej sekwencji. – BuschnicK

+0

Rozczarowany, że kilka szybkich wyszukiwań w sieci nie przyniosło niczego szczególnie użytecznego (mnóstwo implementacji ad hoc dla 'char' w C, ale nic z przyspieszenia liniowej przestrzeni Hirschberga lub szablonu na typ C++). Jeśli znajdziesz (lub stworzysz: D) wszystko, proszę zaktualizować! –

Odpowiedz

3

Wyszukując podobne rzeczy, wypróbuj stronę scholar.google.com. Znacznie lepiej jest znaleźć prace naukowe. Okazało się, że ten dokument to "przegląd najdłuższych algorytmów wspólnych podciągów".

+1

Grudging +1, ponieważ OP naprawdę chce implementacji bibliotek wspomnianych algorytmów, a nie opisów. Ale i tak prawdopodobnie przydatny papier. –

+0

Warto również znać datę publikacji i inne szczegóły. –