Бінарні пошукові узагальнення для постів?


28

Припустимо, у мене є позиція "S" і монотонний предикат "P" на S. Я хочу знайти один або всі максимальні елементи S, що задовольняють P.

EDIT : Я зацікавлений в мінімізації кількості оцінок P .

Які алгоритми існують для цієї проблеми та які властивості та додаткові операції вони вимагають на S?

Як щодо важливих особливих випадків, таких як:

  • S - лінійний порядок - тоді регулярний двійковий пошук працює, доки у вас є операція "знайти середину"
  • S - решітка
  • S - решітка підмножини
  • S - багатошарова решітка
  • ...

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


1
Що таке решітка 'мультисети'?
Суреш Венкат

1
Це решітка, елементами якої є відображення X -> N, meet - елементарно min та з'єднання - max. Вона може бути узагальнена до будь-якої решітки замість N як кодомена.
jkff

Відповіді:


15

Я не дуже це продумав, тому, будь ласка, виправте мене, якщо я помиляюся.

Скажімо, - ширина позета.w

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

  2. Оскільки ви даєте порівняння безкоштовно, ви можете безкоштовно обчислити ланцюгову декомпозицію групи в ланцюги. Виконувати двійковий пошук на кожному ланцюзі , щоб ідентифікувати перший елемент, що задовольняє P . Потім перейдіть через ідентифіковані елементи та видаліть усі домінуючі. Кількість оцінок P дорівнює O ( w log n ) . Це ідентифікує всі максимальні елементи, оскільки в ланцюзі може бути не більше одного максимального елемента.wPPO(wlogn)


ДОДАТО: Насправді я бачу простий рекурсивний алгоритм зробити набагато краще ( ) для решітки підмножини 2 [ n ] ( EDIT : domotor описав загальну стратегію у своїй відповіді). Тут я припускаю, що P є монотонним вниз (тобто підмножини { X : P ( X ) = 1 } утворюють нижчу множину), тобто я думаю, що ви маєте на увазі. Отже, ось алгоритм пошуку члена нижнього набору:O(n)2[n]P{X:P(X)=1}

а) Тест . Якщо 0, то зупиніться.P()

б) Тест . P({n})

bi) Якщо 0, то повторіть на (Гаразд, оскільки жоден набір, що містить n, не може бути в нижньому наборі).2[n1]n

b.ii) Якщо 1, то в підрешітці існує член нижнього набору . Ця підрешітка є ізоморфною для 2 [ n - 1 ], тому ми знову можемо повторити. Точніше, ми можемо запустити алгоритм для 2 [ n - 1 ] , але коли алгоритм просить оцінити P ( Y ) , ми оцінюємо P ( X ), де X = Y { n } .{X:nX}2[n1]2[n1]P(Y)P(X)X=Y{n}

Отже, на кожному кроці ми повторюємо підрешітку, що наполовину менша від початкової. Загалом нам потрібно оцінити не більше 2 n разів (адже ви можете реалізувати алгоритм для оцінки предиката n + 1 раз, як вказує Йосіо, оскільки вам потрібно перевірити ∅ лише один раз).P2nn+1


О, така проста ідея! Дякую - я
подумаю,

Це насправді навіть менше, ніж w log n, оскільки сума довжин ланцюга дорівнює n. Я здогадуюсь, що максимум - біля w log (n / w).
jkff

Добре, для лінійних порядків це дає двійковий пошук, для підмножини решітки це дає C (n, n / 2) log (2 ^ n / C (n, n / 2)) ~ exp (n) * n. Не надто швидко, але також не виглядає занадто неоптимально, оскільки насправді може бути так багато відповідей. Однак, щоб знайти одне максимальне підмножина, вам потрібен двійковий пошук по будь-якій одній ланцюжку - це чудово, і я зараз називаю себе дурним за те, що не думаю про це. Знову дякую!
jkff

2
Я думаю , що непересічні ланцюга дають вам нижню межу , щонайменше , ш + журнал п (для детермінованих алгоритмів). Подумайте про противника, який "ховає" єдине рішення в останньому запитуванні ланцюга. Рандомізована нижня межа Ω ( w ) повинна випливати з принципу мінімакса Яо. Пошук одного елемента зі складністю w + log n може бути цікавим. ww+lognΩ(w)w+logn
Сашо Ніколов

1
@YanKingYin Решітка не може бути об'єднанням (більше однієї) роз'єднаних ланцюгів, тому що кожен з двох елементів повинен мати надпремію. Пост - це об'єднання неперервних ланцюгів, якщо його можна розділити так, що елементи з різних частин є непорівнянними, а елементи в одній частині допускають загальний порядок.
Сашо Ніколов


8

Один недавній документ Daskalakis et al. Показує, що для набору розміру і ширини w мінімальні елементи можуть бути знайдені в часі O ( w n ) . Що цікаво, вони говорять про те, що вони резюмуютьnwO(wn)

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


Гей, звучить не надто надихаюче порівняно з log (n) :), але все одно дякую!
jkff

Але в цьому справа. Без структур даних ви не можете отримати log n навіть для цілком упорядкованого набору, тому що все, що ви можете зробити, це сканувати. Це насправді приємне питання, щоб спробувати знайти еквівалент BST.
Суреш Венкат

Ну - я говорю про складність з точки зору кількості оцінок предиката Р, а не присудок порівняння.
jkff

1
У певному сенсі так, але це далеко не повна відповідь - наприклад, це не дає поділу для випадків 1d або 2d :) що ви пропонуєте зробити з корінням?
jkff

1
Ще не впевнений. міркуючи вголос. Але це відмінне питання.
Суреш Венкат

4

x<y

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

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

Напр. якщо S - фіксована розмірна сітка, то існує швидкий алгоритм: Завжди вдвічі зменшуйте одну координату, зберігаючи інші мінімальними, тому запитайте, наприклад, на першому кроці (n / 2,0, ..., 0).

nd


Боюся, я не розумію перший абзац. Чи є у вас скорочення, чи є всі n-бітові рядки в поперечному S і вони даються як частина вводу? Якщо це так, ми можемо пройти всі рядки в поліноміальний час.
Йосіо Окамото

1
@YoshioOkamoto: Я думаю, що припущення в цьому абзаці полягає в тому, що порівняння в S наведено як булева схема. (Але це не має нічого спільного з пошуком у групі, і тому для мене це не цікаво.)
Цуйосі, Іто

@Tsuyoshi: Дякую Це має багато сенсу.
Йосіо Окамото

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