Помітні приклади ідеї квадратного кореня в аналізі складності


15

max{k,n/k}k=n

  • алгоритм дитячого гігантського кроку для обчислення дискретного логарифму в ,O(n)
  • статичний 2D ортогональний підрахунок діапазону в часу та пам'яті,O(n)O(n)
  • пріоритетна черга з EXTRACT-MIN в та DECREASE-KEY в ,O(nk)O(1)
  • розфарбування трикольорового графіка кольорами у поліноміальний час,O(n)

просто назвати кілька.

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

Мене цікавлять більш виразні приклади такого роду. Тому я шукаю будь-які (бажано елегантні) алгоритми, структури даних, протоколи зв'язку тощо, аналіз яких спирається на ідею квадратного кореня. Їх асимптотика не повинна бути оптимальною.


Вибачте, якщо питання трохи розпливчасте; сміливо вдосконалюйтесь.
Дмитро Кордубан

Чи повинен це бути CW?
Суреш Венкат

2
@Suresh: Якщо правило "великого списку ⇒ CW" все ще діє, то так, воно повинно бути CW.
Цуйосі Іто


це основна хитрість у всіх останніх алгоритмах моделей зменшення карт
Сашо Ніколов

Відповіді:


10

Підлінійні геометричні алгоритми Шазель, Лю та Магена (STOC 2003, SICOMP 2006) мають декілька розумних застосувань наступного трюку випадкової вибірки. Варіанти цього ж трюку раніше використовували Гартнер та Вельцл [ DCG 2001 ], які цитують перше видання CLR (1990).

Припустимо, нам подано відсортований круговий зв'язаний список номерів, що зберігається у суміжному блоці пам'яті. Тобто ми маємо два масиви і N e x t [ 1 .. n ] , деKey[1..n]Next[1..n]

  • зберігає набір з n чисел у довільному порядку;Key[1..n]n
  • Якщо - найбільше число у множині, то K e y [ N e x t [ i ] ] - найменше число у множині; в іншому випадку K e y [ N e x t [ i ] ] - найменше число у множині, яке більше, ніж K e y [ i ] .Key[i]Key[Next[i]]Key[Next[i]]Key[i]

Тоді ми можемо знайти наступника заданого числа в O ( xочікуваний час наступним чином:O(n)

  • Виберіть випадкову вибірку елементів масивуKey. НехайKey[j]- найбільший зразок, менший заx(або найбільший зразок, якщо всі вибірки більшеx).nKeyKey[j]xx

  • Дотримуйтесь покажчиків від K e y [ j ], поки ми не побачимо число, яке більше або рівне x (після обгортання, якщо всі вибірки були більшими за x ).NextKey[j]xx

Порівняно просте застосування леми Яо означає, що очікуваний обмежений час є оптимальним. Будь-який детермінований алгоритм цієї проблеми вимагаєв найгіршому випадку часΩ(n).O(n)Ω(n)


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