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