Я не дуже це продумав, тому, будь ласка, виправте мене, якщо я помиляюся.
Скажімо, - ширина позета.ш
Для відвідати , який є об'єднанням непересічних ланцюгів , які необхідно , по крайней мере ш журнал п оцінок P , просто застосовуючи стандарт нижньої межі від складності запиту довічного пошуку для кожної ланцюга.шw журналнП
Оскільки ви даєте порівняння безкоштовно, ви можете безкоштовно обчислити ланцюгову декомпозицію групи в ланцюги. Виконувати двійковий пошук на кожному ланцюзі , щоб ідентифікувати перший елемент, що задовольняє P . Потім перейдіть через ідентифіковані елементи та видаліть усі домінуючі. Кількість оцінок P дорівнює O ( w log n ) . Це ідентифікує всі максимальні елементи, оскільки в ланцюзі може бути не більше одного максимального елемента.шППO ( w журналn )
ДОДАТО: Насправді я бачу простий рекурсивний алгоритм зробити набагато краще ( ) для решітки підмножини 2 [ n ] ( EDIT : domotor описав загальну стратегію у своїй відповіді). Тут я припускаю, що P є монотонним вниз (тобто підмножини { X : P ( X ) = 1 } утворюють нижчу множину), тобто я думаю, що ви маєте на увазі. Отже, ось алгоритм пошуку члена нижнього набору:O ( n )2[ n ]П{ X: P( X) = 1 }
а) Тест . Якщо 0, то зупиніться.П( ∅ )
б) Тест . П( { n } )
bi) Якщо 0, то повторіть на (Гаразд, оскільки жоден набір, що містить n, не може бути в нижньому наборі).2[ n - 1 ]н
b.ii) Якщо 1, то в підрешітці існує член нижнього набору . Ця підрешітка є ізоморфною для 2 [ n - 1 ], тому ми знову можемо повторити. Точніше, ми можемо запустити алгоритм для 2 [ n - 1 ] , але коли алгоритм просить оцінити P ( Y ) , ми оцінюємо P ( X ), де X = Y ∪ { n } .{ X: n ∈ X}2[ n - 1 ]2[ n - 1 ]П( Y)П( X)Х= Y∪ { n }
Отже, на кожному кроці ми повторюємо підрешітку, що наполовину менша від початкової. Загалом нам потрібно оцінити не більше 2 n разів (адже ви можете реалізувати алгоритм для оцінки предиката n + 1 раз, як вказує Йосіо, оскільки вам потрібно перевірити ∅ лише один раз).П2 нn + 1∅