Karışık grafik çevrim testi algoritması için referans mı?


16

Karışık grafik, hem yönlendirilmiş hem de yönlendirilmemiş kenarlara sahip olabilen bir grafiktir. Alttaki yönlendirilmemiş grafiği, yönlendirilmiş kenarların yönelimlerinin unutulmasıyla elde edilir ve diğer yönde, karıştırılmamış her bir kenara bir yön atanarak karışık bir grafiğin bir yönelimi elde edilir. Bir kenar kümesi, yönlendirilmiş bir döngü oluşturmak üzere yönlendirilebiliyorsa, karışık bir grafikte bir döngü oluşturur. Karışık bir grafik, yalnızca ve hiç döngüsü yoksa döngüseldir.

Bunların hepsi standarttır ve asiklik karışık grafiklerden bahseden birçok yayınlanmış makale vardır. Bu nedenle, karışık grafiklerin döngüselliğini test etmek için aşağıdaki algoritma bilinmelidir:

Aşağıdaki adımları tekrarlayın:

  • Herhangi bir döngünün parçası olamayacağından, gelen yönlendirilmiş kenarları ve olay yönlendirilmemiş kenarları olmayan tepe noktalarını kaldırın.
  • Herhangi bir tepe noktasının gelen yönlendirilmiş kenarları yoksa ancak tam olarak bir olay yönlendirilmemiş kenarı varsa, yönlendirilmemiş kenarı kullanan herhangi bir döngü bu kenarda gelmelidir. Yönlendirilmemiş kenarı gelen bir yönlendirilmiş kenarla değiştirin.

Başka adım gerçekleştirilemediğinde durun. Sonuç boş bir grafikse, orijinal grafiğin mutlaka döngüsel olması gerekir. Aksi takdirde, kalan herhangi bir tepe noktasından başlayarak, her adımda, gelen bir kenardan geriye doğru takip eden veya geçerli tepe noktasına ulaşmak için kullanılan olmayan yönlendirilmemiş bir kenarı takip eden, tekrarlanan bir tepe noktası görülene kadar grafik boyunca geriye doğru izlenebilir. Bu tepe noktasının birinci ve ikinci tekrarı arasında takip edilen kenar sırası (ters sırada), karışık grafikte bir döngü oluşturur.

Karışık grafiklerle ilgili Wikipedia makalesinde çevrimsel olmayan karışık grafiklerden bahsediliyor, ancak bunların nasıl test edileceğinden bahsetmiyor, bu yüzden bu algoritma hakkında bir şeyler eklemek istiyorum, ancak bunun için yayınlanmış bir referansa ihtiyacım var. Birisi bana literatürde nerede (veya döngüselliği test etmek için herhangi bir algoritmanın) göründüğünü söyleyebilir mi?


Bir tepe noktasında iki olay yönlendirilmemiş kenarı olduğunda ve başka bir kenarı olmadığında ne olur? Örneğin, yönlendirilmemiş bir üçgende. Yani yukarıdaki kurallar bu durumu kapsıyor mu?
Mateus de Oliveira Oliveira

Farklı bir köşe, kenarlardan birini yönlendiren kuralı uygulayana kadar böyle bir tepe noktası hakkında hiçbir şey yapamazsınız. Bu gibi köşelerin bulunduğu bir durumla karşılaşırsanız ve başka kural uygulayamazsanız, grafiğiniz bir döngü içerir.
David Eppstein

Belki de grafiğinizin yönlendirilmemesi durumunda ne olacağını düşünmeniz daha açık olur. Bir orman olup olmadığını test etmenin bir yolu, boş bir grafik (bir orman) veya önemsiz 2 çekirdekli (tüm köşelerin derecesi ≥ 2 olan bir alt çizgi) elde edene kadar yaprakları (bir derece köşe) ve izole köşeleri kaldırmaktır. ki bu mutlaka bir döngü içerir). Karışık grafik algoritması, yönlendirilmemiş durumda (aynen yönlendirilen durumda standart bir topolojik sıralama algoritmasına dejenere olduğu gibi, yaprakları hemen çıkarmak yerine yönlendirmek dışında) buna dejenere olur.
David Eppstein

Gördüğünüzden emin değilim: cs.stackexchange'te benzer bir soru soran bir gönderi var ref . Yanıtlayıcı, yönlendirilmemiş kenarları yönlendirerek, yoksa, grafiği reddederek karışık bir grafikte bir döngü bulmak için bir algoritma verir. Karışık grafik kuvvetle yönlendirilebilir olup olmadığını belirlerken kağıt (lar) da var ref ama garip, aslında karışık grafiklerde bağlı bileşenleri bulmaya şey bulamadı.
Quanquan Liu

Teşekkürler - hayır, bunu görmemiştim. "Grafiğin yönlendirilmiş bir döngü içermesini sağlamak için bir yön bul" sorusu kesinlikle aynıdır ve yanıttaki algoritma doğru görünüyor. Ama tarif ettiğimden farklı olarak, doğrusal bir zaman değil.
David Eppstein

Yanıtlar:


1

Karışık bir grafikte karışık döngülerin bulunması, karşılık gelen yönlendirilmiş grafikte temel yönlendirilmiş döngülerin (uzunluk> = 3) bulunmasına eşdeğerdir. Karşılık gelen yönlendirilmiş grafik, her yönlendirilmemiş kenarı, zıt yönlere işaret eden iki yönlendirilmiş kenar ile değiştirerek karışık grafikten elde edilir. Kanıt: (1) Digraftaki her bir temel yönlendirilmiş çevrim (uzunluk> = 3), doğrudan karışık grafikteki karışık bir döngüye karşılık gelir. (2) Karışık grafikteki her karışık döngü,> = 3'lük bir temel karışık döngü içerir ve bu tür her bir döngü, doğrudan yönlendirilmiş grafikteki bir temel yönlendirilmiş döngüye (uzunluk> = 3) karşılık gelir. (1) ve (2) ifadenin her iki yönünü birlikte kanıtlarlar, qed. Bu nedenle, yönlendirilmiş bir grafikte temel döngülerin (uzunluk> = 3) nasıl hesaplanacağı (tümü?) Referanslar arıyoruz.

Yorumlar, cs.stackexchange'in bu soruya bazı cevaplar içerdiğini gösteriyor , ancak sonuçların özlü bir cevapta nasıl düzenleneceği belirsiz. Bu blog gönderisi (en çok?) Önemli referansları güzel bir şekilde özetliyor gibi görünüyor:

Algoritma R. Tarjan

Dahil ettiğim en eski algoritma 1973 yılında R. Tarjan tarafından yayınlandı.

Enumeration of the elementary circuits of a directed graph
R. Tarjan, SIAM Journal on Computing, 2 (1973), pp. 211-216
http://dx.doi.org/10.1137/0202017

DB Johnson tarafından Algoritma

DB Johnson tarafından 1975'teki algoritma, Tarjan'ın algoritmasında karmaşıklığıyla gelişiyor.

Finding all the elementary circuits of a directed graph.
D. B. Johnson, SIAM Journal on Computing 4, no. 1, 77-84, 1975.
http://dx.doi.org/10.1137/0204007

En kötü durumda, Tarjan'ın algoritmasının zaman karmaşıklığı O (n⋅e (c + 1)) iken, Johnson algoritmasının sözde n (O + (n + e) ​​(c + 1)) içinde kalmayı başarması, burada n sayısı köşeler, e kenar sayısı ve c grafikteki devir sayısıdır.

KA Hawick ve HA James tarafından algoritma

2008'den kalma KA Hawick ve HA James'in algoritması Johnson'un algoritmasını daha da geliştirir ve sınırlamalarını ortadan kaldırır.

Enumerating Circuits and Loops in Graphs with Self-Arcs and Multiple-Arcs.
Hawick and H.A. James, In Proceedings of FCS. 2008, 14-20
www.massey.ac.nz/~kahawick/cstn/013/cstn-013.pdf
http://complexity.massey.ac.nz/cstn/013/cstn-013.pdf

Johnson'un algoritmasının aksine, KA Hawick ve HA James'in algoritması, aynı tepe noktasında başlayan ve biten kenarları ve aynı iki köşeyi birbirine bağlayan birden fazla kenarı içeren grafikleri işleyebilir.

Döngüsellik testinin kendisi kolay görünmektedir: Grafiğin güçlü bir şekilde bağlı bileşenlerini hesaplayın . Herhangi bir (temel) döngü, güçlü bir şekilde bağlı bir bileşende tamamen bulunur. Güçlü bir şekilde bağlanmış bir bileşen, yönlendirilmemiş bir ağaç değilse temel bir döngü içerir.

David Eppstein'ın önerilen algoritması ek olarak bir temel döngüyü kanıt olarak hesaplar ve yukarıdaki algoritmalar tüm temel döngüleri numaralandırır. Bir temel döngüde bulunmayan tepe noktaları veya kenarlar, yukarıdaki algoritmaların hızını artırmak için bir ön işleme adımı olarak silinebilir. David Eppstein'ın algoritması bu amaçla kullanılabilir, ancak yalnızca güçlü bir şekilde bağlı bileşenler üzerinde kullanılsa bile, silinebilecek tüm olası tepe noktalarını veya kenarları silmez. Ancak bunu yapmak için genişletilebilse bile ( blok kesilmiş ağacın hesaplanması en azından silinebilecek her olası tepe noktasını silmeye izin verir), bunun yukarıdaki algoritmaların hızını gerçekten iyileştirip iyileştirmeyeceği belirsizdir.


Bu referanslardan herhangi biri karışık grafiklerden bahsediyor mu? Yönlendirilmiş grafiklerde döngü bulmayı biliyorum. Benim sorum, bu algoritmaların karışık grafiklere genişletilmesi hakkındaydı.
David Eppstein

@DavidEppstein Karışık bir grafikte karışık döngüleri bulmak, karşılık gelen yönlendirilmiş grafikte temel döngüleri (uzunluk> = 3) bulmakla eşdeğerdir. Bu ifade için bir referans bulmak zor olabilir, ancak bu ifadenin kanıtlanması basittir. Şimdi ifadeyi ve kanıtını cevaba ekledim. (Ayrıca, blok kesilmiş ağacın hesaplanmasının , temel döngüleri etkilemeden silinebilecek tüm olası tepe noktalarını silmesine izin verdiğine dair bir açıklama eklendi .)
Thomas Klimpel

Tamam, ama yine de doğrusal zaman değiller.
David Eppstein

@DavidEppstein Çevrim testinin kendisi doğrusal zamanda yapılır. Fakat haklısınız, bu algoritmalardan herhangi birinin ilk temel devreyi (uzunluk> = 3) bulması gereken zaman doğrusal değildir (en kötü durumda). Daha da kötüsü, Johnson algoritmasının mevcut uygulamalarının çoğunda, tek bir yönlendirilmiş daireye (n köşeleri, e = n kenarları ve c = 1 temel öğesi) uygulandığında O ((n + e) ​​(c + 1)) süresinden daha fazla zaman kullanılmış gibi görünüyor döngü). Yine de, bunun doğru bir cevap olması amaçlanmıştı, çünkü Johnson'un makalesi "temel devreleri bulmak" için en çok alıntı yapılan referans gibi görünüyor.
Thomas Klimpel
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.