Я встречал множество источников, утверждающих, что:
Бенчмарки оценивают время выполнения, Big O оценивает масштабируемость.
Они объяснили значение «масштабируемости» следующим образом:
Масштабируемость говорит вам, как масштабируется время выполнения вашего алгоритма. Значение, как время вычислений увеличивается, когда вы увеличиваете размер ввода. Для вы удваиваете размер входных данных и удваиваете время вычислений. Для вы удваиваете размер входных данных, в четыре раза увеличиваете время вычислений и так далее.
Это означает, что если ваш алгоритм принимает шагов в худшем случае и , то отношение равно при достаточно больших значениях (вы удваиваете размер ввода и в четыре раза увеличиваете время вычислений).
И в этом было так много смысла. Но недавно мне показали контрпример, доказывающий, что приведенное выше утверждение просто неверно. Рассмотрим функцию . Мы видим, что . Кроме того, для тех из вас, кто хочет заметить, что люди обычно имеют в виду мы можем легко заметить, что также:
Но не масштабируется как в том смысле, что мы не можем утверждать, что равно (даже приблизительно) при любых (даже больших) значениях n. Я имею в виду, если мы знаем, что и если мы удвоим размер входных данных, мы не сможем просто вчетверо увеличить время вычислений, потому что это неправильно.
Я сделал сюжет для вас, чтобы визуализировать это:
Не похоже, что это соотношение стремится к 4.
Итак, мои вопросы:
Почему люди так объясняют значение «масштабируемости»? Есть ли причина для этого или они технически неверны?
Что же тогда означает это слово «масштабируемость»? Что же тогда оценивает Big O (если не «масштабируемость»)?
В общем, я ищу чисто математическое объяснение этому. Но не усложняйте, пожалуйста: я все еще изучаю исчисление одной переменной. Спасибо всем заранее!
Этот (очень красивый) пример весьма необычен — на практике функции которые на самом деле возникают и обычно удовлетворяют стремится к некоторому положительному пределу (а не просто отграничивается от и ). Итак, упрощенная версия масштабируемости — - существует и есть .
Тем не менее, даже для вашей функции есть разумный смысл, в котором удвоение , в среднем увеличивается с коэффициентом . Что мы можем подразумевать под «в среднем»? Ну, чтобы взять среднее, вам нужно удвоить более одного раза. Если вы удвоите дважды, чтобы перейти от к тогда средний коэффициент масштабирования двух удвоений, который имеет смысл, представляет собой среднее геометрическое (потому что вы пытаетесь приблизиться к геометрическому росту), т.е. . Теперь и это не стремится к пределу, но , то есть (геометрический) средний коэффициент масштабирования от удвоения, стремится к пределу, поскольку , который .
Символы Ландау не заботятся о точном поведении функций. означает, что для больших у нас есть весы в лучшем случае так плохо, как в смысле ограничен кратным .
Когда люди объясняют это так, как вы упомянули, они чрезмерно упрощают это, вероятно, предполагая, что другая сторона иначе не поняла бы, о чем идет речь.
Фшрайк
математик
Фшрайк
Ян
Ян
математик
Ян
математик
Ян
математик
Ян