кров’янисті цикли графіків - просте пояснення


9

Чи можете мені допомогти зрозуміти, як знайти цикли у графах у лайманських термінах?

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

У мене є модель графіка в java, моделюючих вузлах, а також "in" та "out" країв - і модель знає, що вузли з'єднані лише в одному напрямку, це дозволяє мені знайти вузли листя як вихідну точку, мій план був щоб повернути графік з кожного з цих вузлів листків, для кожної "прогулянки", зберігаючи список всіх інших вузлів, які я знайшов у своєму маршруті. Якщо я побачу щось у списку в будь-який момент, я знаю, що знайшов цикл у графіку. Однак це трохи спрощено.

Я впевнений, що це вирішена проблема, було б просто добре, якби це можна було пояснити простими словами.

-ас

Відповіді:


6

Найпростіший спосіб, який я можу придумати, щоб пояснити точкові графіки циклів в умовах непростого, - це приблизно такий:

  • По-перше, я припускаю, що ви знаєте основи, що таке графік, а також що таке вузли та ребра. Цей приклад передбачає, що у вас є графік, у якому всі ребра є лише односторонніми.
  • Створіть свій графік та виберіть один вузол як вихідну точку.
  • Створіть якийсь об'єкт контейнера (найкраще працює список чи хеш). Назвіть це "Відвідано".
  • Створіть другий об'єкт контейнера (тут ідеально підійде черга) і назвіть його "Відкрити".
  • Додайте початковий вузол до списку Відкрити.
  • Повторіть, поки список відкритих не порожній:
    • Видаліть перший елемент з «Відкрити» і назвіть його Поточний
    • Якщо Поточний існує у Відвіданому, у вас є цикл.
    • Якщо ні, додайте Поточний у Відвідане, а потім додайте до "Відкрити" всі вузли, до яких Потік може дійти від своїх вихідних країв.
  • Якщо Open відкриється порожнім і циклів не виявлено, то циклів у вас немає. (Принаймні, не в досяжному наборі, що починається з початкової точки, що не обов'язково є сукупністю вашого графіка, якщо у вас на острові є острови.)

0

По суті, ви вперше здійснюєте пошук на графіку і відстежуєте, які вузли ви відвідали за допомогою хешмапу.

У будь-який момент часу, якщо ви зіткнулися з уже відвіданим вузлом (присутній у хешмапі), то ви знаєте, що в графіку є цикл.

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