By wykazać, że algorytm Oszczędny-MP wykonuje co najwyżej \( \frac{3}{2}n \) porównań, pogrupujemy te porównania w dwie szufladki: \( A \) i \( B \) . Pokażemy, że w szufladce \( A \) będzie co najwyżej \( n \) porównań, a w szufladce \( B \) co najwyżej \( \frac{n}{2} \) porównań. Do szufladki \( A \) wrzucamy:
Wszystkie udane porównania dokonane w trakcie szukania wzorca \( x' \) .
Wszystkie nieudane porównania pierwszej litery wzorca \( x' \) (czyli litery \( b \) ), dokonane w trakcie szukania wzorca \( x' \) .
Wszystkie porównania początkowych liter \( a \) , za wyjątkiem porównań na tych pozycjach, gdzie wcześniej szukaliśmy litery \( b \) (pierwszej litery wzorca \( x' \)) i nie znaleźliśmy jej.
Do szufladki \( B \) wrzucamy wszystkie pozostałe porównania, czyli:
Wszystkie nieudane porównania dokonane w trakcie szukania wzorca \( x' \) , za wyjątkiem nieudanych porównań pierwszej litery; są to nieudane porównania dokonywane w momencie, gdy znaleźliśmy już jakiś niepusty prefiks \( x' \) .
Porównania początkowych liter \( a \) na tych pozycjach, gdzie wcześniej szukaliśmy litery \( b \) i nie znaleźliśmy jej.
Zauważmy, że w algorytmie MP pozycje tekstu, na których nigdy nie było żadnego udanego porównania to dokładnie te pozycje, na których nie udało się znaleźć pierwszej litery wzorca (lub pozycja jest pod sam koniec tekstu i nie ma już szans na znalezienie wzorca, algorytm już się zakończył). Dodatkowo, zarówno algorytm MP jak i algorytm Oszczędny-MP ma taką właściwość, że jeśli na pewnej pozycji tekstu było udane porównanie, to ta pozycja tekstu już nigdy nie będzie porównywana (o niej ,,wiemy już wszystko). W związku z tym każde porównanie z szufladki \( A \) wykonuje się na innej literze tekstu, czyli tych porównań jest co najwyżej \( n \) .
Spójrzmy teraz, jak zmienia się wskaźnik, na jakiej pozycji szukamy teraz wzorca \( x \) . Zauważmy, że prefikso-sufiks słowa \( x[1\ldots s] \) dla \( s > k \) jest długości co najwyżej \( s - k - 1 \) (litery \( a \) tego prefikso-sufiksu muszą się zaczynać za literą \( b \) na pozycji \( k+1 \) ). W związku z tym w momencie nieudanego porównania, które wystąpiło gdy znaleziony już został niepusty prefiks słowa \( x' \) , wskaźnik ,,gdzie teraz szukamy przesuwa się o conajmniej \( k+1 \) . Tak też jest, gdy znajdziemy całe słowo \( x' \) ( przesuwamy się do prefikso-sufiksu słowa \( x \)) . Dodatkowo, każde nieudane porównanie litery \( b \) z pozycji \( k+1 \) w słowie \( x \) przesuwa wskaźnik o jeden.
W związku z tym:
Porównania z szufladki \( B \) , podpunkt \( 1 \) przesuwają wskaźnik o conajmniej \( k+1 \geq 2 \) .
Po co najwyżej \( k \) porównaniach z szufladki \( B \) , podpunkt \( 2 \) wskaźnik przesunie się o conajmniej \( k+1 \) . Dodatkowo, każde takie porównanie oznacza, że wcześniej na tym miejscu było nieudane porównanie litery \( b \) . Wliczając przesunięcia pochodzące od tych porównań otrzymujemy, że wskaźnik przesunął się o conajmniej \( k+1+L \geq 2L \) , gdzie \( L \) to liczba takich porównań liter \( a \) w jednej próbie znalezienia wzorca \( x \) .
Czyli każde porównanie z szufladki \( B \) przesuwa aktualny wskaźnik (gdzie teraz szukamy) o conajmniej \( 2 \) , czyli tych porównań jest nie więcej niż \( \frac{n}{2} \) .
(Rozwiązanie opracował Marcin Pilipczuk)