Перейти до вмісту

Цикл (теорія графів)

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

Ци́кл (в теорії графів) — ланцюг x0u1x1u2x2xl−1ulx0, в якому перша та остання вершина збігаються.

Якщо відсутні інші збіжності вершин, то такий цикл називається простим. Цикл, який містить всі ребра графа називається ейлеровим, а простий цикл, який містить всі вершини графа — гамільтоновим. Якщо кожне ребро ui — дуга від xi−1 до xi (i = 1, 2, …, l; xl = x0), то цикл називається орієнтованим, або орциклом. Дозволяючи повторення ребер, отримаємо визначення циклічного (замкненого) шляху.

Пошук циклів

[ред. | ред. код]

Нехай дано орієнтований або неорієнтований граф без петель і кратних ребер. Потрібно перевірити, чи є він ациклічним, а якщо не є, то знайти будь-який цикл.

Вирішимо цю задачу за допомогою серії пошуків в глибину в графі. Тобто з кожної вершини, до якої ми ще жодного разу не приходили, запустимо пошук в глибину, який при вході в вершину буде позначати її відвіданою. І якщо пошук в глибину знайде ребро до вже відвіданої вершини, то це означає, що ми знайшли цикл.[1][2]

Сам цикл можна відновити проходом по масиву предків.

Застосування

[ред. | ред. код]

Кожен алгоритм топологічного сортування виявляє цикли, бо їх присутність означає відсутність часткового порядку для вершин.

Знаходження циклів у графі очікування[en] дозволяє виявляти взаємні блокування.[3]. Якщо Андрій чекає на Богдану, Богдана чекає на Василя, а Василь чекає на Андрія, то існує цикл і вони не дочекаються.[4]

Циклічні залежності[en] - це теж форма циклу на графі і їх наявність є небажаним індикатором.[5]

Див. також

[ред. | ред. код]

Література

[ред. | ред. код]
  • Sedgewick, Robert (1983). Algorithms. Reading, Mass: Addison-Wesley. ISBN 0-201-06672-6.
  • Skiena, Steven S. (2008). The algorithm design manual (вид. 2nd). London: Springer. ISBN 978-1-84800-069-8.
  • Енциклопедія кібернетики, Зиков О. О., т. 2, с. 518.
  • Silberschatz, Abraham; Peter Galvin; Greg Gagne (2003). Operating System Concepts. John Wiley & Sons, INC. ISBN 0-471-25060-0.
  • Джозеф Ротман[en]. An Introduction to the Theory of Groups. — 4th. — Springer (Graduate Texts in Mathematics), 1994. — 532 с. — ISBN 978-0387942858.(англ.)

Зноски

[ред. | ред. код]
  1. Sedgewick, 1983, Graph algorithms.
  2. Skiena, 2008, p. 173.
  3. Silberschatz, 2003, p. 260.
  4. Skiena, 2008, p. 479.
  5. Pike, Rob. proposal: Go 2: allow import cycle · Issue #30247 · golang/go. GitHub (англ.). Процитовано 5 вересня 2025.