2010-08-25 13 views

Odpowiedz

0

w Javie, jeśli połączenie jest string1.indexOf (łańcuch2) koszt czasu będzie wynosił O (m - n), gdzie m jest długością ciągu1, a n jest długością łańcucha2. Realizacja

9

IIRC Java z .indexOf() jest tylko naive string matching algorithm, który jest O(n+m) średnie i O(n*m) najgorszy przypadek.

W praktyce jest to wystarczająco szybkie; Przetestowałem to na stosunkowo dużych igłach (> 500 znaków) i strunach siana (kilka MB), a dopasowywanie odbyłoby się poniżej sekundy (w przeciętnym komputerze domowym). Pamiętaj, że zmusiłem go do przejścia przez cały stóg siana.

+0

Wiem, że to dawno temu, ale czy wiesz skąd to masz? Potrzebuję tych informacji do mojej pracy licencjackiej i nie wiem, czy Stackoverflow byłby dopuszczalnym odniesieniem do pracy magisterskiej;) – odaa

+0

@odaa Przeprowadziłem kilka eksperymentów i napisałem o tym artykuł, kiedy byłem na studiach. – NullUserException

+0

@NullUserException, dlaczego mówisz, że 'O (n + m)' jest przeciętnym przypadkiem? http://stackoverflow.com/a/12752295/632951 wydaje się zaprzeczać temu punktowi. – Pacerier

0

W zależności od implementacji.

Na przykład podczas wyszukiwania ciągu w dłuższym ciągu "algorytm Turbo Boyer-Moore zajmuje dodatkową stałą ilość miejsca, aby zakończyć wyszukiwanie w porównaniu 2n (w przeciwieństwie do 3n dla Boyer-Moore), gdzie n to liczba znaków w wyszukiwanym tekście. " (patrz Wikipedia).

+1

@caleb: Naprawdę, jak możesz powiedzieć od pytania? –