Sorunlarımızın çoğunda, standart int / float veri türlerine rahatça uyan büyük sayı listeleri ile uğraşıyoruz. Çoğu işlemcinin, ek bir maliyet olmaksızın bir seferde 4-8 baytlık sayıları işleyecek şekilde inşa edilme şekli nedeniyle (sayılara göre, örneğin 1 baytlık), çalışma süresinde, sayılarımızı büyütme veya gerçek problemlerde karşılaştığımız aralıklar dahilinde - bu nedenle baskın faktör, yalnızca veri noktalarının miktarı, alıştığımız n veya m faktörleri olarak kalır.
(Big-O gösteriminin, veri başına 32 veya 64 biti bölen sabit bir faktörü gizlediğini ve sayılarımızın her biri bu kadar bit veya daha azına sığdığında yalnızca veri noktalarının sayısını bıraktığını hayal edebilirsiniz. )
Ancak, temsil etmesi için 8 bayttan fazla gerektiren sayılar olan büyük tamsayı içeren veri kümeleri üzerinde işlem yapmak için diğer algoritmalarla yeniden çalışmayı deneyin ve bunun çalışma zamanına ne yaptığını görün. İlgili sayıların büyüklüğü, ikili sıralama gibi diğer algoritmalarda bile her zaman bir fark yaratır, bir kez güvenlik tamponunun ötesine geçtiğinizde, geleneksel işlemciler 4-8 baytlık yığınları işleyerek bize "ücretsiz" verir.
Tartıştığımız Knapsack algoritmasının püf noktası, belirli bir parametrenin (W) büyüklüğüne (diğer algoritmalara göre) alışılmadık derecede hassas olmasıdır. W'ye bir bit ekleyin ve algoritmanın çalışma süresini ikiye katlarsınız. Bundan önce diğer algoritmalardaki değer değişikliklerine bu tür dramatik bir tepki görmedik, bu yüzden Knapsack'e farklı davranıyormuşuz gibi görünebilir - ancak bu, polinom olmayan bir şekilde nasıl tepki verdiğinin gerçek bir analizi giriş boyutundaki değişikliklere.