İlk grafik derinliği araştırmasında gri düğümün amacı


19

Gördüğüm derinlik-ilk aramanın birçok uygulamasında (örneğin: burada ), kod gri bir tepe noktasını (keşfedildi, ancak tüm komşuları ziyaret edilmedi) ve siyah bir tepe noktasını (keşfedildi ve tüm komşuları ziyaret edildi) ayırt ediyor . Bu ayrımın amacı nedir? Görünüşe göre DFS algoritması, ister gri ister siyah olsun, ziyaret edilen bir tepe noktasını asla ziyaret etmeyecektir.

Yanıtlar:


26

Bir DFS yaparken, herhangi bir düğüm üç eyaletten birinde bulunur - ziyaret edilmeden önce, torunlarını tekrar tekrar ziyaret ederken ve tüm torunları ziyaret edildikten sonra (ebeveynine geri dönme, yani sarma aşaması). Üç renk, üç durumun her birine karşılık gelir. Renklerden ve ziyaret ve geri dönüş süresinden bahsetmenin nedenlerinden biri, bu ayrımları daha iyi anlamak için açıkça yapmaktır.

Tabii ki, bu renklerin gerçek kullanımları var. Yönlendirilmiş bir grafik düşünün . Döngü olup olmadığını G olarak kontrol etmek istediğinizi varsayalım . Yönlendirilmemiş bir grafikte, söz konusu düğümün siyah veya gri bir komşusu varsa, bir döngüyü gösterir (ve DFS sizin belirttiğiniz gibi ziyaret etmez). Bununla birlikte, yönlendirilmiş bir grafik durumunda, siyah bir komşu bir döngü anlamına gelmez. - Örneğin, 3 köşeleri ile bir grafik dikkate bir , B , ve C olarak yönelmiş kenarları olan bir B , B C , A C . DFS'nin A'da başladığını varsayalımG,G,bir,B,CbirBBCbirCbir, sonra , ardından C'yi ziyaret eder . A'ya döndüğünde , C'nin daha önce ziyaret edildiğini ve siyah olup olmadığını kontrol eder . Ancak grafikte bir döngü yoktur.BCbirC

Yönlendirilmiş bir grafikte, yalnızca tüm düğümleri ziyaret edilmeden önce bir düğüm tekrar görülürse bir döngü vardır. Başka bir deyişle, bir düğümün gri olan bir komşusu varsa, o zaman bir döngü vardır (komşu siyah olduğunda değil). Gri bir düğüm şu anda torunlarını keşfettiğimiz anlamına gelir - ve böyle bir torunun bu gri düğüme bir kenarı varsa, bir döngü vardır. Bu nedenle, yönlendirilmiş grafiklerde döngü tespiti için 3 renge sahip olmanız gerekir. Başka örnekler de olabilir, ama fikri anlamanız gerekir.


2
+1 iyi açıklama. Yönlendirilmemiş bir grafikteki tüm düğümlerin basit geçişi için (soru gövdeme bağlı olan gibi), GRİ ve SİYAH'ın fonksiyonel bir farkı yok mu?
user6805

1
@ user6805 Hem yönlendirilmiş hem de yönlendirilmemiş grafiğin basit geçişi - her düğümü ziyaret etmek için, gri ve siyah arasında fonksiyonel bir fark yoktur. Yalnızca iki renk kullanabilirsiniz (veya ziyaret edilen / ziyaret edilmeyen). Renklere ihtiyacınız olan daha karmaşık algoritmalar içindir.
Paresh

Anladım! Tamam, aşağıdaki durumu göz önünde bulundurun: twitter.com/MaksimADmitriev/status/796995958043279361 Grafikleri DFS kullanarak geçiriyoruz. Soldaki grafik, bu cevabın grafiğiyle aynıdır ve döngüleri yoktur. Sağdaki bir döngüye sahip grafiği geçelim. A'yı ziyaret edip gri işaretliyoruz. B'yi ziyaret edip gri olarak işaretliyoruz. C'yi ziyaret edip gri olarak işaretliyoruz. Şimdi gri olan A'yı ziyaret etmek üzereyiz. Yani "siyahtan siyaha" bir döngü olduğu anlamına gelmez, "griden griye" anlamına gelir. Bu yüzden griye ihtiyacımız var. Yanılıyorsam lütfen beni düzeltin
Maksim Dmitriev

Güçlü bir şekilde bağlı bileşenler bulmak gibi daha karmaşık amaçlar için, her düğüm için iki kez kayıt yapılması gerekebilir: bir düğümün ilk bulunduğu zaman (yani gri renkte olduğu zaman) ve bir düğüm ziyaretinin tamamlandığı zaman sonrası (yani siyah renkte olduğu zaman). Kayıtları uygulamak için, her olay gerçekleştikçe artan bir sayaç tutulur.
John

2

CLRS'de gri veya siyah rengi kaldırabileceğiniz bir egzersizdir ve algoritma sadece iki renkle iyi çalışır, diğer bir deyişle gerçekten gerekli değildir. Köşeleri işaretlemenin temel amacı, önceden ziyaret edilen köşeleri tekrar tekrar ziyaret ederek sonsuz bir döngüye girmediğimizden emin olmaktır.

DFS algoritmasında 3 renk kullanmanın nedeni temel olarak pedagojiktir: kavramsal olarak daha açıktır, öğrencilerin her bir düğüm için yürütme sırasında neler olduğunu görmelerine yardımcı olur.


0

Gri tepe noktası, bu düğümü ziyaret ettiğinizi ve bir sırayla komşularından birine geçtiğinizi belirtir, ancak o düğüme daha fazla komşu köşe noktaları olabilir. Görünmeyen köşeleri keşfetmek için geri izleme sırasında yararlı olur.

Vertex A'nın iki komşusu B ve C ve B'nin bir komşusu D olduğunu varsayalım .

beyaz renkte olan köşe A'dan başlayın ve onu gri ve komşusuna çaprazlayın.

Alfabetik sıralamayı seçerek , beyaz renkte ve gri olarak işaretlenen köşe B'yi ziyaret ettiğini söyleyelim .

Sonra beyaz -> gri D -> D komşuları ziyaret. dolayısıyla D-> siyah işaretler .

Şimdi, Gri renkte B'ye geri dönüyor ve artık nieghbors yok. Bu nedenle B-> siyah işaretler .

AAain gri renkte geri izler ve c işaretini ziyaret eder c-> Gri artık komşu C işaretini siyah olarak göstermez

Son olarak, A'ya geri döner ve köşe A'yı artık beyaz köşeler olmadığından ve hepsi siyah olarak siyah olarak işaretler.


Gri ve siyah arasındaki farkın burada bir amacı olup olmadığını görmüyorum ..
user6805

anlamanız gereken şey bu. Bir tepe noktası siyah olarak işaretlenirse, bu tepe noktasına komşu köşe noktaları olmayacağı anlamına gelir. Burada D köşesi siyaha işaretlenmiştir, çünkü komşu köşe noktaları yoktur. Burada gri renkte ziyaret edilebilecek daha fazla komşu olduğu ve dolayısıyla bunlardan geçtiğiniz anlamına gelir.
NRK

Sizi sadece arka kenarları olmayan (yani optimizasyon) bildiğiniz düğümleri yeniden ziyaret
etmekten kurtardığına inanıyorum

0

DFS'de kenarları ileri kenar, arka kenar, çapraz kenar ve ağaç kenarı olarak sınıflandırırız.

Kenarları sınıflandırmak için 3 renk kullanıyoruz. ve bu renkler tepe noktasının durumunu temsil eder, yani v. beyaz: köşe v henüz keşfedilmemiştir.

gri: v zaten keşfedildi, ancak v'den erişilebilen tüm köşeler henüz bulunmadı. böylece v tepe noktası hala yığın halindedir.

siyah: v zaten yığından çıkar. keşfedildi ve bitti.

E kenarından gri bir tepe noktasıyla karşılaşırsanız DFS yaparken bu arka kenardır. Kenar e boyunca siyah bir tepe noktasıyla karşılaşırsanız, bu bir çapraz kenar / ileri kenardır. beyaz tepe noktasıyla karşılaşırsanız, DFS'yi özyinelemeli olarak çağırırsınız.


Tamam ama ne anlamı var? Beyaz / gri / siyahın ileri / geri / çapraz / ağaçla ilgili olduğunu söylediniz, ancak bu şeylerin ne için olduğunu da söylemiyorsunuz. Şimdi, sadece üç yerine, adamın anlamadığı yedi şey var!
David Richerby

Bu kenarlar, DFS'nin çeşitli uygulamalarında kullanılabilir, örneğin arka kenarlar bir grafikteki döngülerin tanımlanmasında kullanılır, İleri ve çapraz kenarlar, her köşe çifti arasında benzersiz yol olup olmadığını test etmek için kullanılır.
Neeraj Singh
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.