W pewnym momencie czeka na mnie podręcznik z roboczym tytułem Struktury danych, algorytmy i kompromisy . Prawie każdy algorytm lub struktura danych, której prawdopodobnie nauczysz się na poziomie licencjackim, ma pewną funkcję, która sprawia, że jest lepsza w niektórych aplikacjach niż w innych.
Weźmy na przykład sortowanie, ponieważ wszyscy znają standardowe algorytmy sortowania.
Po pierwsze, złożoność nie jest jedynym problemem. W praktyce ważne są czynniki stałe, dlatego (powiedzmy) szybkie sortowanie jest zwykle używane bardziej niż sortowanie sterty, mimo że szybkie sortowanie ma straszną złożoność najgorszego przypadku.
O ( n logn )
W innych przypadkach pomysły z algorytmu lub struktury danych mogą mieć zastosowanie do problemu specjalnego przeznaczenia. Sortowanie bąbelkowe wydaje się być zawsze wolniejsze niż sortowanie wstawiane na prawdziwym sprzęcie, ale pomysł wykonania przejścia bąbelkowego jest czasem dokładnie tym, czego potrzebujesz.
Rozważmy na przykład jakąś wizualizację 3D lub grę wideo na nowoczesnej karcie graficznej, w której chcesz rysować obiekty w kolejności od najbliższego aparatu do najdalszego od aparatu ze względów wydajnościowych, ale jeśli nie otrzymasz dokładnego zamówienia, sprzęt się tym zajmie. Jeśli poruszasz się po środowisku 3D, względna kolejność obiektów nie zmieni się bardzo między klatkami, więc wykonanie jednego przejścia bąbelkowego na każdą klatkę może być rozsądnym kompromisem. (Silnik Source firmy Valve robi to dla efektów cząsteczkowych.)
Istnieje trwałość, współbieżność, lokalizacja pamięci podręcznej, skalowalność w klastrze / chmurze i wiele innych możliwych powodów, dla których jedna struktura danych lub algorytm może być bardziej odpowiednia niż inna, nawet biorąc pod uwagę tę samą złożoność obliczeniową dla operacji, na których Ci zależy.
To powiedziawszy, nie oznacza to, że na wszelki wypadek powinieneś zapamiętać kilka algorytmów i struktur danych. Większość bitew polega na uświadomieniu sobie, że trzeba wykorzystać kompromis, i wiedzieć, gdzie szukać, jeśli uważasz, że może być coś odpowiedniego.