Bei den meisten unserer Probleme haben wir es mit großen Listen von Zahlen zu tun, die bequem in Standard-Int / Float-Datentypen passen. Aufgrund der Art und Weise, wie die meisten Prozessoren dafür ausgelegt sind, 4-8-Byte-Zahlen gleichzeitig ohne zusätzliche Kosten zu verarbeiten (im Verhältnis zu Zahlen, die beispielsweise in 1 Byte passen), kommt es selten zu einer Änderung der Laufzeit durch Skalieren unserer Zahlen oder Innerhalb von Bereichen, auf die wir bei realen Problemen stoßen - der dominierende Faktor bleibt also nur die schiere Menge an Datenpunkten, die n oder m Faktoren, die wir gewohnt sind.
(Sie können sich vorstellen, dass die Big-O-Notation einen konstanten Faktor verbirgt, der 32 oder 64 Bit pro Datum aufteilt und nur die Anzahl der Datenpunkte belässt, wenn jede unserer Zahlen in so viele Bits oder weniger passt )
Versuchen Sie jedoch, mit anderen Algorithmen zu überarbeiten, um auf Datensätze mit großen Ints zu reagieren - Zahlen, für deren Darstellung mehr als 8 Byte erforderlich sind - und sehen Sie, was dies für die Laufzeit bedeutet. Die Größe der beteiligten Zahlen macht auch bei anderen Algorithmen wie der binären Sortierung immer einen Unterschied, wenn Sie über den Sicherheitspuffer hinaus expandieren, den herkömmliche Prozessoren uns "kostenlos" geben, indem sie 4-8-Byte-Stapel verarbeiten.
Der Trick mit dem von uns diskutierten Knapsack-Algorithmus besteht darin, dass er (im Vergleich zu anderen Algorithmen) ungewöhnlich empfindlich auf die Größe eines bestimmten Parameters W reagiert. Wenn Sie W ein Bit hinzufügen, verdoppeln Sie die Laufzeit des Algorithmus. Wir haben diese dramatische Reaktion auf Wertänderungen in anderen Algorithmen vor diesem nicht gesehen, weshalb es so aussieht, als würden wir Knapsack anders behandeln - aber das ist eine echte Analyse dessen, wie es nicht-polynomisch reagiert zu Änderungen in der Eingabegröße.