W większości naszych problemów mamy do czynienia z dużymi listami liczb, które wygodnie mieszczą się w standardowych typach danych typu int / float. Ze względu na sposób, w jaki większość procesorów jest zbudowanych tak, aby obsługiwać liczby 4-8 bajtów naraz bez dodatkowych kosztów (w stosunku do liczb, niż mieszczą się na przykład 1 bajt), rzadko spotykamy się ze zmianą czasu działania wynikającą ze skalowania naszych liczb w górę lub w zakresach, które napotykamy w rzeczywistych problemach - więc dominującym czynnikiem pozostaje tylko sama liczba punktów danych, n lub m czynników, do których jesteśmy przyzwyczajeni.
(Możesz sobie wyobrazić, że notacja Big-O ukrywa stały współczynnik, który dzieli 32 lub 64 bity na dane, pozostawiając tylko liczbę punktów danych, gdy każda z naszych liczb mieści się w tylu lub mniej bitach )
Ale spróbuj przepracować z innymi algorytmami, aby działać na zestawach danych zawierających duże liczby całkowite - liczby, które wymagają więcej niż 8 bajtów do reprezentacji - i zobacz, jak to wpływa na środowisko wykonawcze. Wielkość zaangażowanych liczb zawsze robi różnicę, nawet w innych algorytmach, takich jak sortowanie binarne, gdy rozwiniesz się poza bufor bezpieczeństwa, które konwencjonalne procesory dają nam „za darmo”, obsługując partie 4-8 bajtów.
Sztuczka z algorytmem Knapsack, o którym mówiliśmy, polega na tym, że jest on niezwykle czuły (w porównaniu z innymi algorytmami) na wielkość konkretnego parametru W. Dodaj jeden bit do W i podwoisz czas działania algorytmu. Nie widzieliśmy tak dramatycznej reakcji na zmiany wartości w innych algorytmach przed tym, dlatego może się wydawać, że traktujemy plecak w inny sposób - ale to prawdziwa analiza tego, jak reaguje w sposób nie wielomianowy na zmiany wielkości wejściowej.