Що це означає передбачуваний час виконання та середній час роботи алгоритму?


17

Скажімо, ми хочемо проаналізувати час роботи алгоритмів. Іноді ми говоримо, що ми хочемо знайти час виконання алгоритму, коли розмір вводу дорівнює n, а для найгіршого можливого випадку - позначаємо його O (n). Іноді я бачу книги / статті, які говорять про те, що нам потрібно знайти очікуваний час роботи алгоритму. Також іноді використовується середній час бігу .

Що таке "очікуваний час"? У яких випадках корисно знайти очікуваний час замість гіршого часу?

Редагувати : Я думаю, що між очікуваним часом роботи та середнім часом бігу є незначна різниця, але я не впевнений. Через цей пост я хочу знати точну різницю, якщо така є.


1
Імовірно, вони означають середній випадок ..
Martijn Pieters

4
Очікуване значення функції розподілу ймовірностей описуються як інтеграл від ї * Р (х) від негативного до позитивного нескінченності. Очікуваний час буде отриманий шляхом визначення розподілу ймовірності на всі можливі часи, а потім взяття очікуваного значення. Ця операція більш відома як обчислення середнього або обчислення середнього .
Джоел Корнетт

1
@JoelCornett: Це було б чудовою відповіддю, якщо ви опублікували це ..
Martijn Pieters

@MartijnPieters: Ні, середній випадок робить припущення щодо розподілу ймовірностей вхідних даних, очікуваний випадок - ні.
Йорг W Міттаг

@ JörgWMittag: Правильно, якщо ви знаєте реальний розподіл ймовірностей ваших даних, ви можете ігнорувати середній випадок. Іншими словами, очікуваний випадок - це час, який ваш алгоритм займає, розподіл вірогідності очікуваних наборів вводу.
Martijn Pieters

Відповіді:


15

Очікуваний час - це лише середній, очікуваний час роботи алгоритму з використанням призначеного вводу.

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

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

Можливо, кращим прикладом може стати класичний алгоритм кварцового коріння, який має найгірший час роботи O (n²), але очікуваний середній час роботи O (n log n), незалежно від введення . Це тому, що алгоритм використовує (а точніше, може використовувати , залежно від реалізації) рандомізацію. Тож це так званий рандомізований алгоритм . Він працює трохи по-іншому при кожному виклику навіть з одним і тим же входом. Таким чином, тве не є універсальним вхідним для найгіршого випадку для реалізації, оскільки найгірший вхід залежить від способу алгоритму вибору опор для поділу даного входу. І як такий, не можна просто поставити деякий заздалегідь визначений вхід, що спричинить найгірший час роботи. Це часто трапляється з рандомізованими алгоритмами, які спрямовані на кращий очікуваний, середній час роботи незалежно від вкладених даних.

Вся справа у використанні правильного алгоритму для вхідного сигналу.


Відмінна відповідь. Спасибі . Я думаю, що різниця між очікуваним і середнім полягає в тому, що коли ми знаємо розподіл входів і запускаємо алгоритм, він називається "середнім", а коли ми використовуємо генератор випадкових чисел для перестановки вхідних даних, це називається очікуваним часом роботи. Чи згодні ви з цією передумовою?
Geek

4

Очікуваний час роботи рандомізованого алгоритму - це чітко визначена концепція, як і найгірший час роботи. Якщо алгоритм рандомізований, його час роботи також є випадковим, а це означає, що ми можемо визначити очікуване значення його часу.

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

Середній час роботи зазвичай використовується, коли йдеться про поведінку алгоритму "для більшості входів". Ми визначаємо певний спосіб випадкового генерування введення, наприклад, заповнюємо масив випадковими числами, або випадковим чином переставляємо числа від 1 до n (тому жодних дублікатів), або перегортаємо монету і отримуємо низхідний або висхідний набір числа. Середній час роботи алгоритму для цього випадкового розподілу входів - це очікуваний час роботи алгоритму (у такому випадку алгоритм може бути не рандомизованим, але введенням є).

Як приклад: є геометричні проблеми, для яких існують алгоритми, які, здається, працюють добре на перший погляд, поки ви не відкриєте якийсь дуже дивний спосіб розподілу, скажімо, рядків введення. Якщо ви припускаєте, що рядки розподіляються випадковим чином, то, можливо, трапляються ці дивні сценарії вкрай малоймовірно, тому ваш алгоритм виявляється хорошим.

Контраст: очікуваний час роботи - це те, як працює алгоритм "якщо у вас немає удачі" - повторний пошук того ж алгоритму на одному вході, але з різними випадковими варіантами може призвести до його вирішення набагато швидше. Середній час роботи говорить про те, наскільки добре алгоритм виконує функцію "для більшості входів" - повторне спробу того ж алгоритму на тому ж вході вам не допоможе (за винятком випадків, якщо алгоритм також буде рандомізований).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.