Чи відома складність цієї проблеми шляху?


9

Екземпляр: непрямий графікГ з двома розрізненими вершинами ст, і ціле число к0.

Питання: Чи існуєс-т шлях в Г, такий, що шлях перетинається не більше ктрикутники? (У цій проблемі кажуть, що шлях перетинає трикутник, якщо шлях містить принаймні один край від трикутника.)


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

3
@Saeed Я не розумію: що таке аргумент, що перенарахування не змушує вас вибрати неоптимальний шлях? Ваш алгоритм, безумовно, 2-наближений. Можливо, виправлення полягає в тому, щоб додати край(у,ш) для кожного шляху уvш з вагою, рівною кількості трикутників, що містять обидва (у,v) і (v,w)
Сашо Ніколов

2
Правильно, ми можемо переходити від u до v, а потім вибираємо x (якийсь інший вузол не в трикутнику uvw), тоді ми переходимо до w, що неправильно (моя помилка полягала в тому, що я пропустив між вершинами, які не є у трикутнику uvw) , але з вашим виправленням це правильно, тому що для кожного першого шляху з α трикутників в оригінальному графіку є шлях ваги αу допоміжному графіку. Крім того, вага шляху в новому графіку завжди є щонайменше як кількість трикутників у відповідному шляху в початковому графіку.
Саїд

1
Я трохи більше замислююся над цим, навіть після виправлення це не працює. Вибачте, Андрас, якщо я привів неправильну надію. Щоб зрозуміти, чому виправити неправильно, розгляньте вершиниu>v>w>x в стежку P і у нас є трикутник u,v,ш і v,w,x і припустимо, ребра vx і uwтрапляються надто багато трикутників. Якщо ми будемо використовувати штучний новий край, який з'єднуєтьсяu>w потім ми порахували трикутник v,w,xдвічі. PS: Мої міркування знову були помилковими, тому що я думав, що ми просто замінимоu>v і v>w з новим (мульти) краєм u>w. Якщо додати ці штучні ребра для кожного шляху, він буде працювати тривіально. Здається, це NPC.
Саїд

1
Моя ідея не спрацює - мені потрібно буде підтримувати кілька наборів, і я думаю, їх буде занадто багато.
reinierpost

Відповіді:


1

Припустимо, що в ньому немає саморізів G.

Для кожного краю між вузлом vi і vj в G, дозволяє E[i,j]=1, і E[i,j]=0якщо немає краю. Обчислитиn×n матриця C[i,j]=k=1nE[i,k]E[k,j], яка дає кількість шляхів з двома скачками між кожною парою вузлів vi і vj. Потім для краю міжvi і vj в G обчислити D[i,j]=E[i,j]C[i,j] інакше встановити D[i,j]=, який дає кількість трикутників, край є частиною (або нескінченності, якщо немає краю). Матричне множення, необхідне для обчисленняC витрати O(n3) (можна обчислити швидше, залежно від рідкості G).

Тепер обчислити n×n матриця A, такий як A[i,j]=min(D[i,j],mink(D[i,k]+D[k,j]E[i,j])). A це всі найкоротші шляхи в D довжиною до двох збільшених для обліку шляхів, які йдуть по двох краях якогось трикутника.

Тепер просто обчисліть найкоротший шлях між ними vi і vj в G на новій графіці якої A є (зваженою) матрицею суміжності, використовуючи Dijkstra (оскільки всі крайові ваги є позитивними), тобто визначають, чи A[i,j]k, де A - це замикання над тропічним семірінгом (що дає матрицю відстані).

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