Чому Big O викладають замість Big Theta?


21

Позначення Big O забезпечує верхню межу функції, тоді як Big Theta забезпечує чітку межу. Однак я вважаю, що нотація Big O, як правило, (і неофіційно) викладається та використовується, коли вони справді означають Велику Тету.

наприклад, "Quicksort є O (N ^ 2)" може перетворитися на набагато сильніший вислів "Quicksort є Θ (N ^ 2)"

Хоча використання Big O є технічно правильним, чи не більш поширене використання Big Theta було б більш виразним та призведе до меншої плутанини? Чи є якась історична причина, чому цей Big O частіше використовується?

Вікіпедія зазначає:

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


3
Я знаю, що це насправді не стосується питання, але квакісорт - це не тета (N ^ 2). Це О (N ^ 2).
jsternberg

Big O - це те, що потрібно знати початківцям / людям, які не належать до CS. Велика Тета - це те, що висвітлено у вступі до алгоритмів, яке не буде прийнято кожним головним. Ті, хто пройшов клас алгоритмів, можуть прочитати нотацію Big O глибше, якщо хочуть. Я не впевнений, на що посилається цитата у Вікіпедії. З академічними виданнями ви отримаєте щілину горла на конференції, якщо плутаєте Big O та Big Theta. Деякі люди проводять все своє життя, переслідуючи "Тету", і це проблеми ТВОРДОГО ТВАРДУ.
Робота

@jsternberg Технічно ви праві. Це також вірно, але безглуздо: "Quicksort у будь-якому випадку (найгірше, найкраще, ...) - це O (n ^ 100). Але я погоджуюся з OP, це повинно бути точніше: QuickSort в гіршому випадку - Theta (N ^ 2), найкращий випадок QuickSort - Theta (NlogN). Тому що в кожному випадку ми отримаємо різні функції.
Eldar

Відповіді:


26

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

Коли він працює швидше, ніж очікувалося для даного вводу - це нормально, це не критична точка. Це переважно незначна інформація.

Деякі алгоритми, як зазначав @Peter Taylor, взагалі не мають жорсткої межі. Дивіться, наприклад, швидкий вибір (O (n ^ 2) та Omega (n).

Більше того, жорсткі межі часто важче обчислити.

Дивись також:


6
Але Big O не обов'язково відповідає найгіршому результату. Я міг би сказати, що quicksort працює в O (2 ^ n) і бути 100% правильним. Було б набагато важливіше, якби я сказав, що алгоритм X працює у Теті (N ^ 2), а не в O (N ^ 2).
tskuzzy

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

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

9

Одна з причин - багато випадків, коли Θ просто невідомо. Наприклад, матричне множення є O (n ^ 2.376), але немає відомої щільної межі. Звичайно, наскільки я можу судити, це жорстка межа для матричного множення, але ми не знаємо його значення.


Але це були б межі часу роботи проблеми, а не конкретного алгоритму. Хоча множення матриці взагалі можна вирішити швидше, ніж кубічний час, наївний алгоритм має значення Θ (n ^ 3) незалежно від того.
tskuzzy

5
@tskuzzy, візьми quicksort. Він не пов'язаний з Тетою, тому що це O (n ^ 2) і Omega (n).
Пітер Тейлор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.