By wykazać, że algorytm Oszczędny-MP wykonuje co najwyżej
porównań, pogrupujemy te porównania w dwie szufladki: i . Pokażemy, że
w szufladce będzie co najwyżej porównań, a w szufladce co najwyżej porównań. Do szufladki wrzucamy:
Wszystkie udane porównania dokonane w trakcie szukania wzorca .
Wszystkie nieudane porównania pierwszej litery wzorca (czyli litery ), dokonane w trakcie szukania wzorca .
Wszystkie porównania początkowych liter , za wyjątkiem porównań na tych pozycjach, gdzie wcześniej szukaliśmy litery (pierwszej litery wzorca ) i nie znaleźliśmy jej.
Do szufladki wrzucamy wszystkie pozostałe porównania, czyli:
Wszystkie nieudane porównania dokonane w trakcie szukania wzorca , za wyjątkiem nieudanych porównań pierwszej litery; są to nieudane porównania dokonywane w momencie, gdy znaleźliśmy już jakiś niepusty prefiks .
Porównania początkowych liter na tych pozycjach, gdzie wcześniej szukaliśmy litery 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 wykonuje się na innej literze tekstu, czyli tych porównań jest co najwyżej .
Spójrzmy teraz, jak zmienia się wskaźnik, na jakiej pozycji szukamy teraz wzorca . Zauważmy, że prefikso-sufiks słowa dla jest długości co najwyżej (litery tego prefikso-sufiksu muszą się zaczynać za literą na pozycji ). W związku z tym w momencie nieudanego porównania, które wystąpiło gdy znaleziony już został niepusty prefiks słowa , wskaźnik ,,gdzie teraz szukamy przesuwa się o conajmniej . Tak też jest, gdy znajdziemy całe słowo ( przesuwamy się do prefikso-sufiksu słowa ) . Dodatkowo, każde nieudane porównanie litery z pozycji w słowie przesuwa wskaźnik o jeden.
W związku z tym:
Porównania z szufladki , podpunkt przesuwają wskaźnik o conajmniej
.
Po co najwyżej porównaniach z szufladki , podpunkt wskaźnik
przesunie się o conajmniej . Dodatkowo, każde takie porównanie oznacza, że wcześniej na tym miejscu było nieudane porównanie litery . Wliczając przesunięcia pochodzące od tych porównań otrzymujemy, że
wskaźnik przesunął się o conajmniej , gdzie to liczba takich porównań liter w jednej próbie znalezienia wzorca .
Czyli każde porównanie z szufladki przesuwa wskaźnik gdzie teraz szukamy o conajmniej , czyli tych porównań jest nie więcej niż .
(Rozwiązanie opracował Marcin Pilipczuk)