Який найшвидший спосіб перевірити на включення набору?


24

Беручи під увагу підмножини з .nS1,,Sn{1,,d}

Перевірте, чи є набори з . (Якщо так, знайдіть приклад, якщо ні, просто скажіть «ні»)Si,SjSiSj

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

Відповіді:


27

Ви не можете її вирішити за час для будь-якої постійної якщо гіпотеза сильного експоненційного часу не є хибною.ϵ > 0O(n2ϵ)ϵ>0

Тобто, якби у нас був такий алгоритм, ми могли б вирішити -змінну Задовільність CNF в час для деякого . Причина полягає в тому, що ми могли б розділити змінні на дві рівні частини і з змінних кожна. Для кожної частини ми побудуємо сімейство та відповідно підмножини пунктів наступним чином. Для кожного завдання ми додаємо підмножину, що складається з пунктів, не задоволених завданням. Ця конструкція працює в час.O ( ( 2 - ϵ ) n ) ϵ > 0 P 1 P 2 n / 2 F 1 F 2 p o l y ( n ) 2 n / 2nO((2ϵ)n)ϵ>0P1P2n/2F1F2poly(n)2n/2

Для завершення побудови зазначимо, що в оригінальному екземплярі CNF є рішення, якщо є підмножина в яка не відповідає деякому підмножину в .F 2F1F2

Додавання додаткових елементів до вашої наземної сукупності на додаток до тих, що містяться в кожному пункті, не дуже важко вбудувати цю проблему нерозбірливості як питання про включення набору. Ви в основному приймаєте доповнення підмножини у . Щоб переконатися, що два набори в не зараховуються як включення, ви додаєте код із анти-ланцюга на додаткові елементи. Інший анти-ланцюговий код (для інших додаткових елементів наземного набору) використовується для підмножини щоб переконатися, що жодна пара підмножини з не включає включення. І, нарешті, все набори , утворені з включає в себе всі елементи кодів анти-ланцюга «S.F 1 F 2 F 2 F 1 F 2F1F1F2F2F1F2

Це набір питань включення для підмножини на наборі ґрунту . Аргумент в основному сходить до деякої ранньої статті Райана Вільямса (не можу пригадати). d = p o l y ( n )2n/2+1d=poly(n)


Дуже дякую за швидку відповідь. Ми навіть маємо , якщо спочатку скористаємось лемою розщеплення, правда? d=O(n)
Карл

9

Якщо вас цікавлять множинні сім’ї з , то інше рішення, концептуально дуже схоже на рішення, викладене у відповіді Юваля, - обчислити перетворення зети.n=ω(2d/2)

fζ(T)=STf(S),

де - функція індикатора сімейства входів . Тобто якщо і іншому випадку. Зрозуміло, що є набори такі, що тоді і тільки тоді, коли для деякого .F = { S 1 , S 2 , , S n } f ( S ) = 1 S F f ( S ) = 0 S iS j S iS j f ζ ( S ) > 1 S Ff:2[d]RF={S1,S2,,Sn}f(S)=1SFf(S)=0SiSjSiSjfζ(S)>1SF

Перетворення zeta можна обчислити в часі за допомогою алгоритму Йейтса, див., Наприклад, TAOCP Knuth, vol. 2, §4.6.4. Сам алгоритм є досить простим динамічним програмуванням, і його легко змінити, щоб надати приклад включеного набору, якщо такий існує.O(d2d)


Це набагато простіше, ніж моя відповідь!
Yuval Filmus

8

Цю проблему можна вирішити за допомогою алгоритму швидкого множення матриць, і я також підозрюю, що це обчислювально еквівалентно матричному множенню (хоча я не знаю жодного способу довести це, і я не думаю, що методи доведення цього існують ). У цьому рішенні буде час роботи O (n ^ {2.373}), коли n = d, та інші періоди виконання для інших відносин між d і n.

Ось як ви вирішите це за допомогою матричного множення: Ви записуєте характерні вектори множин у рядках n n d матриці A, а характерні вектори комплементів множин у стовпцях оголошення за n матрицею B. потім помножте A на B. Пари множин, які перетинаються, є саме місцями добутку A * B, рівними нулю.

Про найкращий час роботи, відомий для цієї проблеми, дивіться у статті Хуан і Пана на цю тему. Якщо я правильно пам'ятаю, коли d стане достатньо великим, час роботи стане очевидно оптимальним O (другим). Для n = d у вас буде час роботи O (n ^ {2.373}). Для інших відносин n і d ви отримаєте інші значення. Якщо існує оптимальний алгоритм для множення прямокутної матриці, ви отримаєте алгоритм із часом виконання O (n ^ 2 + nd) для вашої проблеми. Я підозрюю, що немає кращого способу вирішити вашу проблему, але я далеко не впевнений.

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


6

Якщо то ми знаємо, що множина не є протирізкою за леммою Спернера, і тому версія рішення проблеми стає тривіальною. Але може бути цікавим розглянути випадок, коли близький до цього значення. нn>(dd/2)2dπd/2n

Робота Фрідґута над теоремою Ерджо-Ко-Радо показує, що з огляду на характерний вектор для сімейства підмножин , можна за час виявити чи - сім'я, що перетинається (кожні два елементи перетинаються). Більш загально, його метод дозволяє обчислити де - деяка (конкретна) відома функція, яка не є нуль, лише якщо неперервні. залежить лише від гістограми , де - показник для .[ m ] O ( m 2 m ) f f Σ = x , y f S ( x , y ) , S ( x , y ) 0 x , y S ( x , y ) { ( x i , y i ) : i [ d ] } x if[m]O(m2m)ff

Σ=x,yfS(x,y),
S(x,y)0x,yS(x,y){(xi,yi):i[d]}xiix

(Вбік, ми коментуємо, що його метод також працює, якщо нам дають дві родини , і ми зацікавлені в . в обох випадках нам потрібно обчислити -вище перетворення Фур'є-Уолша для довільного , а потім , де залежить лише від ваги Хеммінга .)Σ = Σ х F , у г S ( х , у ) р е , г р ( 0 , 1 / 2 ) Σ = Σ х Т ( х ) е ( х ) г ( х ) T ( x ) xf,gΣ=xf,ygS(x,y)pf,gp(0,1/2)Σ=xT(x)f^(x)g^(x)T(x)x

Як все це стосується проблеми, що знаходиться у вас? Розглянемо сімейство Кожна від'єднана від кожного . Оскільки задано явно, ми можемо обчислити внесок цих пар у . Чи є ще непересічні пари? Якщо відключається від тоді і так . Отже, - це протидіюча iff S i{ x } ¯ S i{ y } S ( x , y ) Σ S i{ x } ¯ S

F={Si{x}:i[n]}{Si¯{y}:i[n]}.
Si{x}Si¯{y}S(x,y)ΣSi{x}Si ¯ S j =SiSjS1,,SnΣ= n i=1S(Si{x}, ¯ S i{y}).Sj¯{y}SiSj¯=SiSjS1,,Sn
Σ=i=1nS(Si{x},Si¯{y}).

Цей алгоритм працює у часі , ігноруючи множники множників у . Коли близький до , це значно краще, ніж . Загалом, ми отримуємо поліпшення до тих пір, поки .O~(n+2d)dn2dO~(n2)n=ω(2d/2)

З огляду на те, що ми знаємо, що пара, що задовольняє існує, як ми її знаходимо? Припустимо, ми розділимо всі множини на дві групи навмання. Імовірність приблизно , множини і опиняться в одній групі. Якщо нам пощастило, ми можемо запустити наш алгоритм на та , виявити, до кого вони належать, і таким чином зменшити вдвічі кількість наборів, які нам потрібно врахувати. Якщо ні, ми можемо спробувати ще раз. Це показує, що при очікуваній кількості викликів Oracle oracle до версії рішення ми можемо знайти пару, що задовольняє .SiSjS1,,SnG1,G21/2SiSjG1G2O(logn)SiSj

Ми також можемо знецінити алгоритм. Не втрачаючи загальності, припустимо, . На кожному кроці ми розділяємо відповідно до кожного з бітів. Один з цих розділів завжди буде ставити і в одну і ту ж частину, якщо вони не мають протилежних полярностей; ми можемо перевірити це на явно, використовуючи лише операції . Це дає детермінований алгоритм, що використовує оракул виклику до версії рішення. k x y O ( n d ) O ( log 2 n )n=2kkxyO(nd)O(log2n)


Цікаво. Що я повинен прочитати, якщо хочу дізнатися більше про це?
Janne H. Korhonen

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