Po pierwsze, oba algorytmy „działają” dla wszystkich danych wejściowych. Pytanie dotyczy wydajności.
Odpowiedzi na to pytanie są trochę gówniane. Jednym ze sposobów na stwierdzenie, że jeden algorytm jest asymptotycznie bardziej wydajny, jest inny, jeśli istnieje jakiś (specyficzny dla problemu) rozmiar wejściowy taki, że dla każdego większego rozmiaru wejściowego bardziej wydajny algorytm wykona mniej „kroków obliczeniowych”, zwykle za pomocą pewnej abstrakcyjnej miary, np. liczba porównań.
Ideą odpowiedzi jest to, że asymptotycznie bardziej wydajny algorytm może nadal wymagać więcej kroków przed tym rozmiarem wejściowym. To może być przypadek, że asymptotycznie bardziej wydajny algorytm wymaga mniej czynności dla wszystkich wejść, ale to nie musi być tak, aw praktyce zazwyczaj nie jest. Lepszym sformułowaniem „poprawnej” odpowiedzi byłoby „Xbędzie lepszym wyborem dla wszystkich danych wejściowych, z wyjątkiem możliwie małych danych wejściowych ”.
Sformułowanie wciąż nie jest jednak świetne. Po pierwsze, wiele innych czynników decyduje o tym, który algorytm jest „lepszym wyborem”, ale dam im, że w tym przypadku intencja jest wystarczająco jasna. Prawdziwy problem to „mały” i „duży”. Jednym z moich ulubionych artykułów jest najszybszy i najkrótszy algorytm dla wszystkich dobrze zdefiniowanych problemów . W tym artykule opisano algorytm, który podając dowolną specyfikację funkcji i dowód, że można ją obliczyć w czasie wielomianowym, obliczy tę funkcję w optymalnej złożoności czasowej ze współczynnikiem5plus dodatek. Na przykład, jeśli podałem mu implementację sortowania bąbelkowego jako specyfikację funkcji i prosty dowód, że tak byłoO (n2)), wygeneruje algorytm sortowania, który był O ( n lgn ). W rzeczywistości stworzyłby algorytm, który był5 c n lgn + o ( n lgn ) gdzie dobył stałym czynnikiem asymptotycznie * optymalnego algorytmu. To jest niesamowite. Jest tylko jeden problem: stały termin - ukryty wo ( n lgn )w tym przykładzie - czyni algorytm prawie na pewno całkowicie niewykonalnym dla praktycznie każdego rzeczywistego problemu. Co rozumiem przez „całkowicie nieosiągalny”? Mam na myśli, że śmierć termiczna wszechświata zdarzy się wiele razy, zanim ten algorytm się zakończy. Niemniej jednak dla odpowiednio „dużych” danych wejściowych będzie on szybszy niż sortowanie bąbelkowe. Chodzi mi o to, że prawie na pewno fizycznie nie jest możliwe zapisanie „odpowiednio dużego” wejścia, nie mówiąc już o obliczeniach.
W każdym razie, jak powiedziałbym poprawną odpowiedź, brzmiałby: „X wymaga mniej kroków niż Y przy wystarczająco dużych danych wejściowych. Jest to nadal nieco niejasne, ponieważ istnieje wiele pojęć „kroku”, które mogą mieć zastosowanie, a algorytm może być asymptotycznie bardziej wydajny w przypadku jednej metryki, a mniej wydajny w przypadku innej. Takie sformułowanie pozwala uniknąć oceny wartości „lepszy wybór ”; istnieje wiele powodów, aby wybrać asymptotycznie mniej wydajne algorytmy lub nawet mniej wydajne algorytmy, gdy określone są stałe czynniki / warunki, takie jak wydajność pamięci podręcznej lub prostota implementacji.
* Tutaj jest subtelność. Algorytm optymalny asymptotycznie może mieć gorszy stały współczynnik,do, niż asymptotycznie nieoptymalny algorytm. Myślę, że będzie miał najlepszą wartośćdo dla każdego algorytmu optymalnego asymptotycznie, ale można sobie wyobrazić, że aby wycisnąć niewielki wzrost wydajności asymptotycznej, dodaje się ogromną złożoność, która znacznie zwiększa stały współczynnik.