Nie ma jednej ujednoliconej definicji „szybszego algorytmu”. Nie ma organu zarządzającego, który decydowałby, czy algorytm jest szybszy niż inny.
Aby wyjaśnić, dlaczego tak jest, chciałbym przedstawić dwa różne scenariusze, które pokazują tę mętną koncepcję.
Pierwszy przykład to algorytm, który wyszukuje połączoną listę nieuporządkowanych danych. Jeśli mogę wykonać tę samą operację z tablicą, nie mam wpływu na dużą miarę wydajności Oh. Oba wyszukiwania mają wartość O (n). Jeśli popatrzę tylko na duże wartości Oh, mogę powiedzieć, że wcale nie poprawiłem. Jednak wiadomo, że przeszukiwanie tablicy jest szybsze niż przeszukiwanie połączonej listy w większości przypadków, więc można zdecydować, że dzięki temu algorytm stał się „szybszy”, nawet jeśli duże Oh się nie zmieniło.
Jeśli mogę użyć tradycyjnego przykładu programowania robota do zrobienia kanapki PBJ, mogę pokazać, co mam na myśli w inny sposób. Rozważ tylko punkt, w którym otwiera się słoik masła orzechowego.
Pick up the jar
Grab the lid
Unscrew the lid
Przeciw
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Grab the lid
Unscrew the lid
Nawet w najbardziej akademickim otoczeniu teoretycznym, jakie mogę wymyślić, przekonasz się, że ludzie akceptują to, że pierwszy algorytm jest szybszy niż drugi, nawet jeśli wyniki dużej notacji Oh są takie same.
Dla kontrastu możemy rozważyć algorytm do złamania szyfrowania RSA. Obecnie uważa się, że ten proces to prawdopodobnie O (2 ^ n), gdzie n jest liczbą bitów. Rozważ nowy algorytm, który działa n ^ 100 szybciej. Oznacza to, że mój nowy proces działa w O (2 ^ n / n ^ 100). Jednak w świecie kryptografii przyspieszenie wielomianowe algorytmu wykładniczego nie jest tradycyjnie uważane za przyspieszenie teoretyczne. Robiąc dowody bezpieczeństwa, zakłada się, że osoba atakująca może odkryć jedno z tych przyspieszeń i że nie przyniesie to żadnego efektu.
Tak więc w jednym przypadku możemy zmienić O (n) na O (n) i nazwać to szybciej. W innych okolicznościach możemy zmienić O (2 ^ n) na O (2 ^ n / n ^ 100) i twierdzić, że w ogóle nie było znaczącego przyspieszenia. Dlatego mówię, że nie ma jednej ujednoliconej definicji „szybszego algorytmu”. Jest to zawsze zależne od kontekstu.