İkiz köşeleri grafiklerde bulma


22

Let bir grafiktir olabilir. Bir köşe için tanımlama, (açık) mahalle olarak de . Yani, N (x) = \ {y \ 'de V \, \ vert \, \ {x, y \} \, E \} . İki köşe tanımlama u, v içinde G olduğu ikiz ise u ve v , komşu aynı kümesini, bir, eğer , N (u) = N (v) .G=(V,E)xVN(x)xGN(x)={yV|{x,y}E}u,vGuvN(u)=N(v)

Bir grafiktir verilen G ile n köşe ve m girdi olarak kenarları, ne kadar hızlı biz ikiz bir çift bulabilirsiniz G gibi bir çift varsa,?

Verilen iki köşenin komşularını karşılaştırarak zamanında ikiz olup olmadığını kontrol edebiliriz . Basit bir algoritma, ikizleri bulmaktır, bu nedenle, her iki köşe çifti için ikiz olup olmadıklarını kontrol etmektir. Bu, zaman alır (ve ayrıca tüm ikizleri bulur ). (Eğer varsa) grafikte bir çift ikiz bulmak için daha hızlı bir yol var mı? Literatürde bu sorunu ele alan bilinen çalışmalar var mı?O(n)O(n3)


Mahalleleri tekrar edebilir ve bunları bir karma tabloya ekleyebilirsiniz. İlgili: cstheory.stackexchange.com/q/3390/236
Radu GRIGore,

1
Bu burada egzersiz 2.17 olduğunu books.google.co.uk/...
Radu Grigore

Düzenleme yetkisi olan biri ikizlerin tanımını düzeltmelidir. (TheMachineCharmer'in cevabı hakkındaki açıklamalara veya bağladığım kitaptaki tanımlara bakın.)
Radu GRIGore,

Yanıtlar:


21

Bir grafikteki ikizler sadece 2 boyutlu modüllerdir. Bir grafiğin modüler ayrışması, zamanında bulunabilir. Modüler ayrışma ağacı, grafiğin tüm modüllerini örtük olarak temsil eder ve üç tür iç düğümden oluşur: seri, paralel ve asal düğümler ve yapraklar, ayrı düğümlerden oluşur. En az iki köşe seti S V , sadece ağaçta bir düğüm veya bir dizi veya paralel düğümden bazı çocuk kümelerinin birleşmesi durumunda ve eğer bir modül ise.O(n+m)SV

Bu yüzden eğer bir çift ikiz düğüm bulmak için, eğer varsa, modüler ayrışma ağacını sürede oluşturabiliriz. O zaman yapraklara bakın, herhangi bir yaprağın ebeveyni bir seri veya paralel düğüm ise, o düğümün ikiz bir çift oluşturan en az iki çocuğu olması gerekir. Yani toplam çalışma süresi doğrusaldır.O(n+m)

http://en.wikipedia.org/wiki/Modular_decomposition


Beni Modüler Ayrıştırma ile tanıştırdığınız için teşekkürler!
gphilip

12

Sorun, grafik matrisinde iki eşit satır olduğunu belirlemeye eşdeğerdir. Grafik matris satırları üzerinde trie yapabiliriz. Zaman compleixty O (n ^ 2) olacak


6
Bitişik listelerde aynı fikir . O(m+n)
Radu GRIGore,

Şimdi bir sineği uçuracağım;)
Hsien-Chih Chang,

2
Bu biraz genelleştirilebilir. Biz sorunu yeniden ifade ise "Verilen (burada f ( x ) : = N ( x ) ) farklı bulmak x 1 , x 2 , öyle ki f ( x 1 ) = f ( x 2 ) " daha sonra tamamen sipariş edilen Y için bir yaklaşım, her x X için f ( x ) değerini değerlendirmektir.f:X>Yf(x):=N(x)x1x2f(x1)=f(x2)Yf(x)xX, onları sıralayın ve çoğaltmalar için sıralanmış listeyi kontrol edin. Trie etkili bir şekilde radix sıralamadır.
Peter Taylor

8

EDIT: @MikleB ve @Travis tarafından sunulan çözümler çok zekice. Overkilling cevap için özür dilerim.


Sorunun , grafiğin bitişik matrisi A'daki matris çarpma problemine indirgenmesi , çarpımın EQU (NXOR) ile değiştirilmesi ve VE ile eklenmesiyle azaltılabileceği görülmektedir. Eğer grafikte bir çift ikiz varsa, sonuçta A A T matrisi özdeşlik matrisi olmayacak ve a i , j değerinin sıfır olmadığı endeksler ( i , j ) tam olarak ikiz çift düğümler olmayacaktır. .AAAT(i,j)ai,j

En iyi bilgi için matris çarpım sorunu çözülebilir ile zaman a 2.376 ile Coppersmith-Winograd algoritması . Pratik çözümler gerekirse, herhangi bir matris çarpma algoritması pratikte iyi çalışıyor güzel.O(nα)α2.376


Müthiş bu çalışıyor! : DI bunun yalnızca üst yarısını değerlendirmek yeterli olacaktır düşünüyorum . ne düşünüyorsun? A2
Pratik Deoghare

1
@ TheMachineCharmer: Teşekkür ederim :) Evet, grafik yönlendirilmemişse.
Hsien-Chih Chang,

Evet. Kesinlikle! :)
Pratik Deoghare

5

Bu sitedeki çılgın sistem yüzünden doğrudan yorum yapamıyorum, ancak mevcut cevaplarla ilgili birkaç gözlemim var.

Hsien-Chih Chang'in çözümünün den A A T ye düzeltilmesi gerektiğine eminim .A2AAT

MachineCharmer'ın gözlemi 4 öne çıkar (karşı örnek: [0,0,1], [0,1,0], [0,1,1] belirleyici 0'a sahip fakat ikiz yok). İkizler varsa, determinant sıfırdır.


A2

A2AAT

Sistem çılgınca olmayabilir, ama belki de ilk kez yayınlanan posterlere karşı sezgisel. Cevap yazabilirsin ama yorum yazamazsın ... ama yorumların IMHO'yu göndermeyi haklı çıkaracak kadar iyi. Daha fazla itibar kazandıktan sonra, sistemi oldukça bağımlılık bulacağını düşünüyorum.
Hardmath

3
Cevaplamak için güçlü olmak değil, açıklama olduğunu deli. Yeni kullanıcıları, yardımcı olmama veya yanlış yerde cevaplama arasında seçim yapmaya zorlar.
Peter Taylor

3

This thread is quite old; however, nobody seems to have hit on the most elegant and simple approach. Lexicographically sort the adjacency-list in O(n+m) time then check for duplicates (see Aho, Hopcroft, Ullman, 74'). You can use modular decomposition, but this is total overkill.


2

This thread is old and OP's question has been answered but I'd like to add another algorithm to find all such pairs in linear time. Nobody mentioned Partition Refinement!

This algorithm finds the equivalence classes of false twins. The algorithm relies on an efficient procedure that refines a partition. Given a set S and a partition P = {X1, ..., Xn}. refine(P, S) = {X1 ^ S, X1 - S, X2 ^ S, X2 - S, ..., Xn ^ S, Xn - S}. ^ denotes set intersection and - set difference. A partition is stable if it cannot be further refined. This procedure takes time O(|S|) (see Wikipedia's article on partition refinement), so it's fast.

Algorithm:

P = {V} // initial partition consists of the vertex set
for every vertex v:
    P = refine(P, N(v)) // refine with the open neighborhood of v

Total time is O(|V|+|E|). This is simple to program as well.


1

Some observations that might help

  1. For a,bV if a is not twin of b then c and d can't be twins where cN(a) and dN(b).

  2. |N(a)||N(b)| then a and b can't be twins.

  3. If bN(a) then a and b can't be twins. This works only if you are looking for non-adjacent twins.

  4. If twins exist then determinant of the adjacency matrix is zero.

Fancy idea:

  1. Build a complete binary tree with height = |V|.
  2. Then start reading one row of adjacency matrix.
  3. If you encounter 0 take left otherwise take right.
  4. When you reach a leaf store your vertex there.
  5. Do this for all the rows. So, in the end each leaf will have neighbors.

Stolen from Inspired by Huffman compression algorithm! :)


2
The 3rd point is true only if we look for non-adjacent twins. In the usual notion of twins, a and b are allowed to be adjacent.
Mathieu Chapelle

1
Peter Taylor, Mathieu Chapelle: Thanks! I have edited the answer to reflect the changes. @Serge Gaspers: I guess in that case the condition must be N(a)b=N(b)a.
Pratik Deoghare
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.