В большинстве наших проблем мы имеем дело с большими списками чисел, которые удобно вписываются в стандартные типы данных int / float. Из-за того, что большинство процессоров построены так, чтобы обрабатывать 4-8-байтовые числа за раз без дополнительных затрат (по сравнению с числами, которые умещаются, скажем, в 1 байт), мы редко сталкиваемся с изменением времени выполнения от увеличения наших чисел или в пределах диапазонов, с которыми мы сталкиваемся в реальных проблемах - поэтому доминирующим фактором остается только огромное количество точек данных, n или m факторов, к которым мы привыкли.
(Вы можете себе представить, что нотация Big-O скрывает постоянный коэффициент, который делит 32 или 64 бита на элемент данных, оставляя только количество точек данных, когда каждое из наших чисел вписывается в такое количество бит или меньше)
Но попробуйте переработать другие алгоритмы, чтобы воздействовать на наборы данных, включающие большие целые числа - числа, для представления которых требуется более 8 байтов, - и посмотрите, как это повлияет на среду выполнения. Величина используемых чисел всегда имеет значение, даже в других алгоритмах, таких как двоичная сортировка, когда вы выходите за пределы буфера безопасности, обычные процессоры дают нам «бесплатно», обрабатывая пакеты по 4–8 байт.
Хитрость с алгоритмом Рюкзака, который мы обсуждали, заключается в том, что он необычайно чувствителен (по сравнению с другими алгоритмами) к величине определенного параметра, W. Добавьте один бит к W, и вы удвоите время работы алгоритма. Мы не видели такого драматического отклика на изменения стоимости в других алгоритмах до этого, поэтому может показаться, что мы относимся к ранцу иначе - но это подлинный анализ того, как он реагирует неполиномиальным образом к изменениям в размере ввода.