Задача про найдовший шлях

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Завдання про найдовший шлях — це задача пошуку простого шляху найбільшої довжини в заданому графі. Шлях називається простим, якщо в ньому немає повторних вершин. Довжину шляху можна виміряти або числом ребер, або (в разі зважених графів) сумою ваг його ребер. На відміну від задачі про найкоротший шлях, яку на графах без циклів з від'ємною вагою можна розв'язати за поліноміальний час, задача пошуку найдовшого шляху є NP-складною і не може бути розв'язаною за поліноміальний час для довільного графа, якщо не P = NP. Належність до вищого класу складності також означає, що задачу складно апроксимувати. Однак задача розв'язується за лінійний час на орієнтованих ациклічних графах, які мають важливе застосування в задачах знаходження критичного шляху в задачах планування.

NP-складність[ред. | ред. код]

Докладніше: Клас складності NP

NP-складність незваженої задачі пошуку найдовшого шляху можна показати, звівши задачу до пошуку гамільтонового шляху — граф G має гамільтонів шлях тоді й лише тоді, коли найдовший шлях у ньому має довжину n − 1, де n — число вершин графа G. Оскільки задача пошуку гамільтонового шляху є NP-повною, це зведення показує, що задача пошуку найдовшого шляху у варіанті розв'язності також NP-повна. У цій задачі розв'язності входом є граф G і число k. Очікується вихід «так», якщо G містить шлях з k і більше дугами, або ні в іншому разі[1].

Якби задачу пошуку найдовшого шляху можна було розв'язати за поліноміальний час, її можна було б використати для розв'язання цієї задачі розв'язності, знайшовши найдовший шлях та порівнявши його довжину з числом k. Таким чином, задача пошуку найдовшого шляху є NP-складною. Вона не є NP-повною, оскільки вона не є задачею розв'язності[2].

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

Ациклічні графи та критичні шляхи[ред. | ред. код]

Найдовший шлях A між двома заданими вершинами s і t у зваженому графі G — це те саме, що й найкоротший шлях у графі −G, отриманому з G заміною всіх ваг на ваги з протилежним знаком. Отже, якщо можна знайти найкоротший шлях в −G, то можна знайти і найдовший шлях у G[4].

Для більшості графів таке перетворення марне, оскільки створює в −G цикли від'ємної довжини. Але якщо G є спрямованим ациклічним графом, від'ємний цикл створити неможливо і найдовший шлях у G можна знайти за лінійний час, застосувавши алгоритм пошуку найкоротшого шляху в −G (теж орієнтованому ациклічному графі), який працює за лінійний час[4] . Наприклад, для будь-якої вершини v в орієнтованому ациклічному графі довжину найдовшого шляху, що закінчується у v, можна отримати, виконавши такі кроки: Коли це буде зроблено, найдовший шлях у всьому графі можна отримати, почавши з вершини v з найбільшим записаним значенням і проходячи у зворотному порядку, вибираючи вхідну дугу, в якої запис у початковій вершині має найбільше значення.

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

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

Наближення[ред. | ред. код]

Бьорклунд, Гасфелдт і Канна писали, що задача пошуку найдовшого шляху в незваженому неорієнтованому графі є «сумно відомою за складністю розуміння труднощів її апроксимації»[6]. Найкращий відомий алгоритм апроксимації поліноміального часу виконання дає лише дуже слабку апроксимацію, [7]. Для будь-якого неможливо апроксимувати найдовший шлях із множником, меншим від , якщо тільки NP не належить до задач квазіполіноміального детермінованого часу. Однак існує великий розрив між цим результатом апроксимованості та відомими алгоритмами апроксимації для цієї задачі[8].

У разі незважених, але орієнтованих графів відомі сильні результати апроксимованості. Для будь-якого задачу не можна апроксимувати в межах , якщо тільки не P = NP, і, за сильних теоретичних припущень, задачу не можна апроксимувати в межах [6]. Для пошуку шляху логарифмічної довжини, якщо він існує, можна використати техніку колірного кодування[en], але вона дає апроксимаційний коефіцієнт лише [9].

Параметризована складність[ред. | ред. код]

Задача пошуку найдовшого шляху є фіксовано-параметрично розв'язною[en], якщо параметризувати її за довжиною шляху. Наприклад, задачу можна розв'язати за час, що лінійно залежить від розміру вхідного графа (але за експоненційний час за довжиною шляху), за допомогою алгоритму, що включає такі кроки:

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

Оскільки початковий шлях має довжину щонайменше , час роботи також буде обмежено значенням , де  — довжина найдовшого шляху[10]. Використовуючи колірне кодування, залежність від довжини шляху можна звести до одинично експоненційної[11][12][13]. Схожа техніка динамічного програмування показує, що задача пошуку найдовшого шляху є також фіксовано-параметрично розв'язною за деревною шириною графа.

Для графів з обмеженою кліковою шириною задачу про найдовший шлях можна розв'язати за поліноміальний час за допомогою алгоритму динамічного програмування. Однак степінь полінома залежить від клікової ширини графа, тому ці алгоритми не є фіксовано-параметрично розв'язними. Задача знаходження найдовшого шляху, параметризована за кліковою шириною, є складною для класу парметризованої складності[en] , що говорить про те, що навряд чи існує фіксовано-параметрично розв'язний алгоритм[14].

Особливі випадки графів[ред. | ред. код]

Задача про найдовший шлях можна розв'язати за поліноміальний час на доповненнях графів порівнянності[15]. Також її можна розв'язати за поліноміальний час на будь-якому класі графів із обмеженою деревною шириною або обмеженою кліковою шириною, такому як дистанційно-успадковувані графи. Однак задача є NP-складною, навіть якщо обмежитися розщеплюваними графами, коловими графами або планарними графами[16].

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Schrijver, 2003, с. 114.
  2. Cormen, Leiserson, Rivest, Stein, 2001, с. 978.
  3. Lawler, 2001, с. 64.
  4. а б в Sedgewick, Wayne, 2011, с. 661–666.
  5. Di Battista, Eades, Tamassia, Tollis, 1998, с. 265–302.
  6. а б Björklund, Husfeldt, Khanna, 2004, с. 222–233.
  7. (Gabow, Nie, 2008). Раніші праці навіть зі слабшою апроксимацією див. у статтях Габова (Gabow, 2007) та Б'єрклунда і Гасфелдта (Björklund, Husfeldt, 2003).
  8. Karger, Motwani, Ramkumar, 1997, с. 82–98.
  9. Alon, Yuster, Zwick, 1995.
  10. (Bodlaender, 1993). Раніший фіксовано-параметрично розв'язний алгоритм із трохи кращою залежністю від довжини шляху, але з гіршою залежністю від довжини графа, див. у статті (Monien, 1985).
  11. Chen, Lu, Sze, Zhang, 2007, с. 298-307.
  12. Koutis, 2008, с. 575-586.
  13. Williams, 2009, с. 315-318.
  14. Fomin, Golovach, Lokshtanov, Saurabh, 2009, с. 825–834.
  15. (Ioannidou, Nikolopoulos, 2011). Раніші праці на більш обмежених класах див. у статтях (Ioannidou, Mertzios, Nikolopoulos, 2011) і (Uehara, Valiente, 2007).
  16. Ioannidou, Mertzios, Nikolopoulos, 2011.

Література[ред. | ред. код]

Посилання[ред. | ред. код]