Вопрос Нам дано два алгоритма сортировки. Время работы алгоритма является в то время как Алгоритм имеет время работы . Предположим, что алгоритм и алгоритм брать второй, чтобы разобраться числа. Сколько времени потребуется для каждого алгоритма, чтобы отсортировать а) числа б) числа?
Комментарии Я понимаю, что это может быть простой вопрос, но я только начинаю этот материал. Подсказка или полный ответ будут оценены.
Как говорится, ответ «мы не знаем». Это следует из обозначение — грубо говоря, у вас недостаточно информации, чтобы сделать вывод. Вы знаете только асимптотическое поведение, и даже не константы.
Алгоритм 1 вполне может быть таким же быстрым, как алгоритм 2, если меньше, чем, скажем, , а потом разорваться.
Хуже того, нотация «большое О» — это только верхняя граница. Насколько нам известно, оба могут иметь одинаковое время работы , так как если бы алгоритм 1 имел время работы , это также тривиально имело бы время работы .
Вы видели два ответа, которые иллюстрируют, что оценки времени по принципу «О» мало что говорят о фактическом времени работы, но чтобы проиллюстрировать, насколько велика разница между фактическими заказами, давайте обойдемся без оценок по принципу «О» и предположим, что мы действительно знали что Алгоритм 1 взял именно секунд для сортировки чисел, а Алгоритм 2 взял ровно секунд для сортировки числа (я выбрал логарифм по основанию десять, чтобы упростить расчеты; выбор другого основания только изменил бы константу ).
Если Алгоритму 2 потребовалась 1 секунда для сортировки числа, мы бы
Теперь давайте посмотрим, что происходит, когда мы сортируем числа. Алгоритм 1 примет
Для больших входных данных разница во времени становится еще более существенной. С чисел для сортировки, вы можете понять, что алгоритм 1 займет около 31688 лет , а алгоритм 2 — около 34,7 дней.
Обратите внимание, что алгоритм 1 имел гораздо меньший постоянный множитель, чем алгоритм 2, но в долгосрочной перспективе это не имело такого значения, как асимптотический порядок их времени выполнения. Проще говоря, Алгоритм в конечном итоге забьет алгоритм, независимо от того, каков постоянный кратный.
Математически, большой- нотация так не работает. обозначает класс эквивалентности функций, основанный на их амиптотике.
Так, например, определяется принадлежит . Так и функция определяется .
Итак, два разных алгоритма, которые требуют времени могут иметь совершенно разную производительность для конкретной задачи. Большой- нотация предназначена для того, чтобы зафиксировать эту масштабируемость этих алгоритмов как .
Однако, если вы используете это для практического применения, мультипликативная константа впереди, вероятно, не будет слишком большой. Игнорирование часто может дать разумное представление о том, сколько времени займет алгоритм.
Таким образом, мы можем приблизиться к тому, что алгоритм займет время обрабатывать предметы и алгоритм займет время обрабатывать предметы.
В большинстве реальных случаев сравнение будет неплохим, но, с другой стороны, оно может быть и ужасным.
Андреас Х.