Допустим, мы хотим проанализировать время выполнения алгоритмов. Иногда мы говорим, что хотим найти время выполнения алгоритма, когда входной размер равен n, а в худшем случае это обозначается как O (n). Хотя иногда я вижу книги / газеты, в которых говорится, что нам нужно найти ожидаемое время алгоритма. Также иногда используется среднее время бега .
Что такое «ожидаемое время»? В каких случаях полезно найти ожидаемое время вместо худшего?
Редактировать : Я думаю, что есть небольшая разница между ожидаемым и средним временем выполнения, но я не уверен. Через этот пост я хочу узнать точную разницу, если таковая имеется.
algorithms
terminology
performance
complexity
Компьютерщик
источник
источник
Ответы:
Ожидаемое время - это просто среднее ожидаемое время работы алгоритма с использованием предполагаемого ввода.
Скажем, у вас есть несколько миллионов пользовательских записей и вы хотите отсортировать их, вы можете использовать алгоритм, который наиболее подходит для вашего ввода и, следовательно, дает наилучшее ожидаемое время выполнения, в отличие от алгоритма, который лучше наихудшее время работы, но хуже ожидаемое время работы.
Иногда, например, постоянные коэффициенты для сложности времени алгоритма настолько высоки, что имеет смысл использовать алгоритмы с меньшей сложностью времени, но меньшими постоянными коэффициентами, поскольку это дает вам лучшее ожидаемое время выполнения при небольшом входном сигнале, даже если бы это было получить ужасно лучше, чем больший вклад.
Возможно, лучшим примером будет классический алгоритм быстрой сортировки, который имеет время выполнения в наихудшем случае O (n²), но ожидаемое среднее время выполнения O (n log n), независимо от входных данных . Это потому, что алгоритм использует (или, скорее, может использовать , в зависимости от реализации) рандомизацию. Так что это так называемый рандомизированный алгоритм . Он работает немного по-разному с каждым вызовом, даже с тем же вводом, Таким образом, для реализации не существует универсального ввода для наихудшего случая, потому что ввод для наихудшего случая зависит от того, как алгоритм выбирает стержень для деления данного ввода. И как таковой, нельзя просто предоставить какой-то заранее заданный вход, вызывающий наихудшее время работы. Это часто имеет место с рандомизированными алгоритмами, которые стремятся к лучшему ожидаемому среднему времени работы независимо от входных данных.
Это все об использовании правильного алгоритма для ввода под рукой.
источник
Ожидаемое время работы рандомизированного алгоритма является четко определенной концепцией, как и время работы в худшем случае. Если алгоритм рандомизирован, его время выполнения также является случайным, что означает, что мы можем определить ожидаемое значение его времени выполнения.
Хорошо известным примером является Quicksort: если мы выбираем шарниры случайным образом, мы можем доказать, что его ожидаемое время выполнения становится O (n log n), даже если его наихудшее время выполнения остается O (n ^ 2). Примером, когда рандомизация является очень мощной, является наименьшая проблема окружающего круга: существует простой алгоритм, время выполнения которого в худшем случае равно O (n ^ 3), но, как ожидается, его время выполнения составляет только O (n).
Среднее время выполнения обычно используется, когда речь идет о поведении алгоритма «для большинства входов». Мы определяем некоторый способ случайной генерации ввода, например, заполняем массив случайными числами, или мы случайным образом переставляем числа от 1 до n (чтобы не было дубликатов), или мы подбрасываем монету и получаем либо нисходящий, либо восходящий набор номера. Среднее время работы алгоритма для этого случайного распределения входных сигналов является ожидаемым временем работы алгоритма (в этом случае алгоритм может быть не рандомизированным, а входным).
В качестве примера: существуют геометрические проблемы, для которых существуют алгоритмы, которые, на первый взгляд, хорошо работают, пока вы не обнаружите какой-то очень странный способ распределения, скажем, входных строк. Если вы предполагаете, что линии распределены случайным образом, то может случиться так, что эти странные сценарии крайне маловероятны, поэтому ваш алгоритм в конечном итоге будет хорошим.
В отличие от этого: ожидаемое время выполнения - это то, как алгоритм работает «если вам не повезет» - повторение одного и того же алгоритма на одном входе, но с разными случайными вариантами выбора может привести к его быстрому решению. Среднее время выполнения говорит о том, насколько хорошо алгоритм работает «для большинства входов» - повторная попытка того же алгоритма на том же входе не поможет вам (за исключением, возможно, если алгоритм также рандомизирован).
источник