Что это означает под ожидаемым временем работы и средним временем работы алгоритма?

17

Допустим, мы хотим проанализировать время выполнения алгоритмов. Иногда мы говорим, что хотим найти время выполнения алгоритма, когда входной размер равен n, а в худшем случае это обозначается как O (n). Хотя иногда я вижу книги / газеты, в которых говорится, что нам нужно найти ожидаемое время алгоритма. Также иногда используется среднее время бега .

Что такое «ожидаемое время»? В каких случаях полезно найти ожидаемое время вместо худшего?

Редактировать : Я думаю, что есть небольшая разница между ожидаемым и средним временем выполнения, но я не уверен. Через этот пост я хочу узнать точную разницу, если таковая имеется.

Компьютерщик
источник
1
Предположительно они имеют в виду средний случай ..
Мартейн Питерс
4
Ожидаемое значение функции распределения вероятностей описываются как интеграл от й * Р (х) от отрицательного до положительной бесконечности. Ожидаемое время будет получено путем определения вероятностного распределения всех возможных времен и последующего принятия ожидаемого значения. Эта операция более известна как вычисление среднего значения или вычисление среднего значения .
Джоэл Корнетт
1
@JoelCornett: Это было бы хорошим ответом, если бы вы опубликовали это ..
Martijn Pieters
@MartijnPieters: Нет, средний случай делает предположение о распределении вероятностей входных данных, а ожидаемый случай - нет.
Йорг Миттаг
@ JörgWMittag: Правильно, если вы знаете распределение вероятностей ваших входных данных в реальном мире, вы можете игнорировать средний случай. Другими словами, ожидаемый случай - это время, которое ваш алгоритм использует для распределения вероятностей ожидаемых входных наборов.
Мартейн Питерс

Ответы:

15

Ожидаемое время - это просто среднее ожидаемое время работы алгоритма с использованием предполагаемого ввода.

Скажем, у вас есть несколько миллионов пользовательских записей и вы хотите отсортировать их, вы можете использовать алгоритм, который наиболее подходит для вашего ввода и, следовательно, дает наилучшее ожидаемое время выполнения, в отличие от алгоритма, который лучше наихудшее время работы, но хуже ожидаемое время работы.

Иногда, например, постоянные коэффициенты для сложности времени алгоритма настолько высоки, что имеет смысл использовать алгоритмы с меньшей сложностью времени, но меньшими постоянными коэффициентами, поскольку это дает вам лучшее ожидаемое время выполнения при небольшом входном сигнале, даже если бы это было получить ужасно лучше, чем больший вклад.

Возможно, лучшим примером будет классический алгоритм быстрой сортировки, который имеет время выполнения в наихудшем случае O (n²), но ожидаемое среднее время выполнения O (n log n), независимо от входных данных . Это потому, что алгоритм использует (или, скорее, может использовать , в зависимости от реализации) рандомизацию. Так что это так называемый рандомизированный алгоритм . Он работает немного по-разному с каждым вызовом, даже с тем же вводом, Таким образом, для реализации не существует универсального ввода для наихудшего случая, потому что ввод для наихудшего случая зависит от того, как алгоритм выбирает стержень для деления данного ввода. И как таковой, нельзя просто предоставить какой-то заранее заданный вход, вызывающий наихудшее время работы. Это часто имеет место с рандомизированными алгоритмами, которые стремятся к лучшему ожидаемому среднему времени работы независимо от входных данных.

Это все об использовании правильного алгоритма для ввода под рукой.

zxcdw
источник
Отличный ответ. Благодарю . Я думаю, что разница между ожидаемым и средним значением заключается в том, что когда мы знаем распределение входов и запускаем алгоритм, он называется «средним», а когда мы используем генератор случайных чисел для перестановки входных данных, это называется ожидаемым временем выполнения. Вы согласны с этой предпосылкой?
Компьютерщик
4

Ожидаемое время работы рандомизированного алгоритма является четко определенной концепцией, как и время работы в худшем случае. Если алгоритм рандомизирован, его время выполнения также является случайным, что означает, что мы можем определить ожидаемое значение его времени выполнения.

Хорошо известным примером является Quicksort: если мы выбираем шарниры случайным образом, мы можем доказать, что его ожидаемое время выполнения становится O (n log n), даже если его наихудшее время выполнения остается O (n ^ 2). Примером, когда рандомизация является очень мощной, является наименьшая проблема окружающего круга: существует простой алгоритм, время выполнения которого в худшем случае равно O (n ^ 3), но, как ожидается, его время выполнения составляет только O (n).

Среднее время выполнения обычно используется, когда речь идет о поведении алгоритма «для большинства входов». Мы определяем некоторый способ случайной генерации ввода, например, заполняем массив случайными числами, или мы случайным образом переставляем числа от 1 до n (чтобы не было дубликатов), или мы подбрасываем монету и получаем либо нисходящий, либо восходящий набор номера. Среднее время работы алгоритма для этого случайного распределения входных сигналов является ожидаемым временем работы алгоритма (в этом случае алгоритм может быть не рандомизированным, а входным).

В качестве примера: существуют геометрические проблемы, для которых существуют алгоритмы, которые, на первый взгляд, хорошо работают, пока вы не обнаружите какой-то очень странный способ распределения, скажем, входных строк. Если вы предполагаете, что линии распределены случайным образом, то может случиться так, что эти странные сценарии крайне маловероятны, поэтому ваш алгоритм в конечном итоге будет хорошим.

В отличие от этого: ожидаемое время выполнения - это то, как алгоритм работает «если вам не повезет» - повторение одного и того же алгоритма на одном входе, но с разными случайными вариантами выбора может привести к его быстрому решению. Среднее время выполнения говорит о том, насколько хорошо алгоритм работает «для большинства входов» - повторная попытка того же алгоритма на том же входе не поможет вам (за исключением, возможно, если алгоритм также рандомизирован).

Алекс тен Бринк
источник