Чи потрібно викликати матричне множення разів, щоб знайти кігті


20

Кігть - це . Тривіальний алгоритм виявить кігті за час. Це можна зробити в , де - це показник швидкого множення матриці так: візьміть підграф, індукований для кожної вершини , і знайдіть трикутник у її доповнення. O ( n 4 ) O ( n ω + 1 ) ω N [ v ] vK1,3O(n4)O(nω+1)ωN[v]v

Наскільки мені відомо, ці основні алгоритми відомі лише. Спінрад перераховував у своїй книзі "ефективні графічні подання" виявлення кігтя в час як відкриту проблему (8.3, стор. 103). Для нижньої межі ми знаємо, що алгоритм -time буде означати алгоритм часу для пошуку трикутника. Тому ми можемо вважати \ Omega (n ^ \ omega) нижньою межею.o(nω+1)O(nc)O(nmax(c,2))Ω(nω)

Питання:

  1. Чи є прогрес у цьому. Або якийсь прогрес у тому, щоб показати, що це неможливо?
  2. Чи є інші природні проблеми з алгоритмами O(nω+1) , які є найкращими?

Зауваження:

  1. Я явно прошу виявити кігті, а не розпізнавання графіків без кігтів. Хоча алгоритм вирішує обидва, винятків мало.
  2. У «Довіднику алгоритмів та теоретичних інформатик» стверджується, що його можна знайти в лінійному часі, але це було лише друкарською помилкою (див. «Ефективні графічні подання»).

Ви можете використовувати метод Алона та ін. Знаходження трикутника в O(|E|1.41) , для кожного вузла, який закінчується на O(|V||E|1.41) який є краще, ніж |V|ω+1 якщо графік не надто щільний.
RB

@RB, дякую, що вказали на це. Основна ідея по - , як і раніше запускати незалежно-трикутник виявлення-алгоритм n раз, що то , що я хочу , щоб уникнути.
Yixin Cao

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

2
Можливо, добре згадати, що якщо ми можемо знайти кігті за f (n) час, ми можемо також знайти трикутник за f (n + 1) час (просто візьміть доповнення графіка та додайте ще одну вершину, підключену до всіх ), тому ми не повинні сподіватися знайти щось краще, ніж . nω
domotorp

1
@domotorp, здається, що частина зрозуміла, навпаки не зрозуміло, я маю на увазі, чому нам потрібен лінійний пошук. Як також зазначив Ісін, можливо, є ще один алгоритм, який не використовує алгоритм пошуку трикутника і вирішує задачу в , який, на мою думку, важко знайти такий алгоритм і, ймовірно, простіше щоб показати, що будь-який алгоритм використовує пошук трикутника як підпрограму (або її можна перетворити) при лінійному пошуку по ній. o(nω+1)
Саїд

Відповіді:


16

Я думаю, що ми можемо зробити трохи краще, ніж для щільних графіків, використовуючи множення прямокутної матриці. Аналогічну ідею використали Ейзенбранд та Грандоні ("Про складність кліки з фіксованим параметром та домінуючим набором", Теоретична комп'ютерна наука. Том 326 (2004) 57–67) для 4-клічного виявлення.O(n1+ω)

Нехай - графік, в якому ми хочемо виявити існування кігтя. Нехай безліч (впорядкованих) пар вершин у . Розглянемо наступну булеву матрицю розміром: кожен рядок індексується деяким , кожен стовпець індексується деяким , а відповідний запис - один, якщо і лише тоді, коли , і . Розглянемо булеву матрицю твір і транспонованою . Графік має кігті тоді і лише тоді, коли він існуєA V M | V | × | А | u V ( v , w ) A { u , v } E { v , w } G=(V,E)AVM|V|×|A|uV(v,w)A{u,v}E{ u , w } E M M T G { u , v } E M M{v,w}E{u,w}EMMTG{u,v}E такий, що запис у рядку, індексованому та стовпцем, індексованим є одиницею. у вMMTuv

Складність цього алгоритму по суті полягає у складності обчислення булевого добутку матриці матриці , де позначає кількість вершин на графіку. Відомо, що такий матричний добуток можна обчислити за час , що краще, ніж для найвідомішої верхньої межі на . Звичайно, якщо (як передбачається), то два підходи дають однакову складність .n 2 × n n O ( n 3.3 ) O ( n 1 + ω ) ω ω = 2 O ( n 3 )n×n2n2×nnO(n3.3)O(n1+ω)ωω=2O(n3)


Чудово! Саме цього я хочу свого першого запитання: лише один виклик множення матриці, хоча і більший. Я зачекаю ще коментарів чи відповідей на своє друге питання, перш ніж приймати це як відповідь.
Ісін Цао

15

Я не знаю, як уникнути множення матриць, але ви можете проаналізувати їх таким чином, щоб час був меншим за їх кількість. Цей трюк відn

Клокс, Тон; Кратч, Дітер; Мюллер, Хайко (2000), "Ефективне знаходження та підрахунок малих індукованих підграфів", Листи з обробки інформації 74 (3–4): 115–121, doi: 10.1016 / S0020-0190 (00) 00047-8, MR 1761552.

Перше зауваження полягає в тому, що, коли ви збираєтеся матричне множення, матриці насправді не , а де - ступінь кожної вершини, тому що те, що ви шукаєте, - це трикутник по сусідству кожної вершини.d × d dn×nd×dd

По-друге, у графі, що не містить кігтів, кожна вершина повинна мати сусідів . Бо в іншому випадку набір сусідів матиме занадто мало ребер, щоб уникнути наявності трикутника в доповненні. Отже, коли ви робите множення матриць, вам потрібно робити це лише на матрицях розміру а не .O(O(m)нO(m)n

Крім того, кожне ребро може сприяти розміру задачі на множення матриці лише для двох вершин, її кінцевих точок. Найгірший випадок трапляється, коли для загального розміру цих задач на множення матриці поширюється на розміром кожна, що дає загальний обмежений час , вдосконалення для розріджених графіків через згадане R B.O ( 2mO(O(m)O(m ( 1 + ω ) / 2 )O(nm ω / 2 )O(m)O(m(1+ω)/2)O(nmω/2)


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

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