grafik döngülerini tespit etme - basit açıklama


9

bazıları lütfen layman terimleriyle grafiklerdeki döngüleri nasıl bulacağımı anlamama yardımcı olabilir mi?

Bu ve aynı zamanda bazı wikipedia sayfaları gibi diğer soruları okudum , ancak oldukça hızlı bir şekilde matematiksel jargona iniyor gibi görünüyorlar.

Java, modelleme düğümleri ve 'in' ve 'out' kenarlarında grafiğin bir modeli var - ve model sadece bir yönde bağlı düğümleri biliyor, bu yaprak düğümlerini bir başlangıç ​​noktası olarak bulmamı sağlıyor, planım bu yaprak düğümlerinin her birinden, her "yürüyüş" için, rotamda bulduğum diğer tüm düğümlerin bir listesini tutarak grafiği geri yürümek. Herhangi bir noktada listede zaten bir şey görürsem, grafikte bir döngü bulduğumu bilirim. Ancak bu biraz basit geliyor.

Eminim bu çözülmüş bir problemdir, basit terimlerle açıklanabilirse iyi olurdu.

-Ace

Yanıtlar:


6

Lekelenme grafik döngülerini layman terimleriyle açıklamanın en basit yolu şudur:

  • İlk olarak, bir grafiğin ne olduğunu ve düğümlerin ve kenarların ne olduğunu temel bildiğinizi varsayalım. Bu örnekte, tüm kenarların yalnızca tek yönlü olduğu bir grafiğiniz olduğu varsayılmaktadır.
  • Grafiğinizi oluşturun ve başlangıç ​​noktası olarak bir düğüm seçin.
  • Bir tür kapsayıcı nesnesi oluşturun (liste veya karma en iyi sonucu verir). "Ziyaret edildi" deyin.
  • İkinci bir kapsayıcı nesnesi oluşturun (burada kuyruk ideal olur) ve buna "Aç" deyin.
  • Başlangıç ​​düğümünü Aç listesine ekleyin.
  • Aç listesi boş değilken işlemi tekrarlayın:
    • İlk öğeyi Aç öğesinden kaldırın ve Geçerli olarak adlandırın
    • Ziyaret Edilen'de Geçerli varsa bir döngünüz vardır.
    • Değilse, Geçerli'yi Ziyaret Edilen'e ekleyin ve ardından Geçerli'nin giden kenarlarından Ulaşabileceği tüm düğümleri ekleyin.
  • Açık sonlanır ve herhangi bir döngü algılanmazsa, herhangi bir döngünüz olmaz. (En azından başlangıç ​​noktasından kaynaklanan ulaşılabilir kümede değil, eğer grafiğinizde adalar varsa, grafiğinizin tamamı olmayabilir.)

0

Temel olarak, grafikte bir genişlik araması yapar ve bir hashmap kullanarak ziyaret ettiğiniz düğümleri takip edersiniz.

Herhangi bir zamanda, daha önce ziyaret edilmiş bir düğümle karşılaşırsanız (hashmap'ta bulunur), grafikte bir döngü olduğunu bilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.