Yönlendirilmiş birlik bulma


11

Dinamik olarak kenarlar ekleyebileceğiniz ve bazı belirli sorgular yapabileceğiniz yönlendirilmiş bir grafik düşünün G.

Örnek: ayrık set orman

Aşağıdaki sorgu kümesini göz önünde bulundurun:

arrow(u, v)
equiv(u, v)
find(u)

Birincisi, bir ok ekler halinde grafiğe, ikinci bir karar u * v , son bir eşdeğerliliği sınıfının kanonik temsil eden bulur * , diğer bir deyişle R ( u ) , öyle ki , u * v r ( v ) = r ( u ) anlamına gelir .uvuvr(u)uvr(v)=r(u)

Bir bulunmaktadır ayrık kümesi orman veri yapısı kullanılarak, iyi bilinen bir algoritma karmaşıklığı, yani itfa yarı-sabit bu sorgu uygulanması . Bu durumda kullanılarak uygulandığını unutmayın .O(α(n))equivfind

Daha karmaşık değişken

Şimdi, yönlerin önemli olduğu daha karmaşık bir problemle ilgileniyorum:

arrow(u, v)
confl(u, v)
find(u)

ilk olarak bir ok ekler bir düğüm varsa saniye karar verir, ulaşılabilir hem ve , yani . Sonuncusu bir amacı döndürmelidir , öyle ki ima burada kolayca hesaplanabilir olmalıdır. (Örneğin, hesaplamak için ). Amaç, bu operasyonların hızlı olması için iyi bir veri yapısı bulmaktır.uvwuvuvr(u)uvr(u)r(v)confl

döngüleri

Grafik döngü içerebilir.

Sadece ana sorun için DAG'ları dikkate almak için güçlü bir şekilde bağlı bileşenleri etkili ve kademeli olarak hesaplamanın bir yolu olup olmadığını bilmiyorum .

Tabii ki DAG'lar için de bir çözüm takdir ediyorum. En az ortak ataların artımlı bir hesaplamasına karşılık gelir.

Saf yaklaşım

Ayrık olarak ayarlanmış orman veri yapısı burada yardımcı olmaz, çünkü kenarların yönünü göz ardı eder. Grafik konfluent değilse , 'nun tek bir düğüm olamayacağını unutmayın.r(u)

Bir tanımlayabilir ve tanımlamak için olarak zaman . Ama bunu kademeli olarak nasıl hesaplayabilirim?r(u)={vuv}S1S2S1S2

Muhtemelen böyle büyük bir setin hesaplanmasının yararlı olmadığı, daha küçük bir setin her zamanki birleşim bulma algoritmasında olduğu gibi daha ilginç olması gerekir.

Yanıtlar:


3

( Düzenle : Sorunu tamamen anladığım için cevabımı şimdi tamamen yeniden yazdım (umarım) daha açıktır.)

Bu sorun, grafik oluşturuldukça ve araştırıldıkça, grafiğin geçişli kapanışının yaklaşık olarak oluşturulmasına ve geliştirilmesine kademeli olarak indirgenebileceği gibi görünüyor.

r(u) olup, soyut olarak, hem de ulaşılabilir tüm düğümlerin grubu ve , her için grafikte. (Tabii ki, çiftlerinin hepsinin mutlaka ikisinden de ulaşılabilecek bir düğümü olmayacaktır.) Union-find'daki durumun aksine, bu küme grafikte kanonik bir temsil düğümü olarak temsil edilemez, çünkü orada her ikisi de erişilebilir olan düğümler olabilir ve , ve hem de ve yine her iki erişilemez olduğu, ve .uvvuu,vuvuwvw

Her için, korumak Say , düğümler kümesi dan Ulaşılamıyor (bunu arayacağım ). Bu kümelerin zorunlu olarak her bir düğüm için ekstra bir veri yapısı veya en azından grafikteki bir dizi ekstra "kısayol" kenarı olması gerekir. Grafiğin belirtilen yapısını korumayı umursamıyorsanız, bu kenarlar ile belirtilen kenarlar arasında ayrım yapmaya gerek kalmaz.uuR(u)

Bir veri yapısı için herhangi bir fikir hazırlıksız olmadığını yakalar genel durumda daha etkili olduğunu, bu (örneğin biraz vektör veya hash tablosu,), ancak olabilir bu setleri aşamalı güncelleme:

Eğer bir kenar ekleyin her bir diğer düğüm için , set .uvR(u)=R(u)R(v)

conflÖnce deneyerek uygulayın ; bu boş değilse, true değerini döndürün. O Ama eğer olduğunu boş, iki paralel genişliği birinci aramalar yapmak ve ya hem ulaşılabilir setleri tüketmek veya ortak noktası bir düğümü buluncaya kadar. Bunu yaparken, aynı zamanda güncelleme ve (ve 'bulduğunuz tüm ara düğümlerin s) Eğer bulduğu ulaşılabilir düğümleri kapsayacak şekilde. ve ortak bir düğüm bulursanız, R (u) = R (v) = R (u) \ fincan R (v) olarak ayarlayın .R(u)R(v)R(u)R(v)R(u)R(v)R

find(u)sadece döndürür . Sorun şu ki , sadece açısından uygulanmıyor . Algoritmanın artımlı olmadığı sürece nasıl olabileceğini görmüyorum (yani tüm düğümlerin tüm setlerini grafiğin geçişli kapanışı ile önceden hesaplayın .) Ancak, artımlı yaklaşım hala oldukça iyi amortisman vermelidir. maliyet, hazırlıksız yaklaşırsa hiçbir fikrim yok . (Muhtemelen hayır. Bunun yanlış bir yanıtı, setleriniz doygun olsa bile iki BFS'ye başlamanızı gerektirir ; algoritma artımlı olmadığı sürece bu da kaçınılmaz görünüyor.)R(u)conflfindRO(α(n))conflR

Bu, La Poutré ve van Leeuwen'in bir grafiğin geçişli kapanışını koruma yöntemlerinin özel bir örneği olabileceği gibi görünüyor .

Bunun soruyu tam olarak cevaplamadığını, ancak belki de açıklığa kavuşturduğunu fark ediyorum ve grafik algoritmaları hakkında daha fazla deneyime sahip biri, setlerini kodlamak için daha iyi bir veri yapısı verebilir .R


Cevabınız için teşekkür ederim, umarım şimdi sorumu daha açık hale getirdim: Bağlı bileşenleri umursamıyorum (ancak güçlü CC'ler son çözüme yardımcı olabilir ); Ben yok henüz ve bu bir DAG tek düğüm olamaz. r(u)r(u)
jmad

Tamam, bu biraz daha açık. Bu gibi görünüyor olup, soyut olarak, hem de ulaşılabilir tüm düğümlerin grubu ve için her grafikte. Bu set "off" kısayol "bir dizi olabilir , sanırım, ve sonra bu grafikte ulaşılabilirliğin geçişli kapanış hesaplamak gibi görünmeye başlar. Hala send-find daha fazla depolama / çalışma (etiket / tüm "kısayol" kenarları etiketleme) gerektirecektir rağmen neden bu artımlı olarak (yolları bulmak gibi sıkıştırmak) olamazdı hemen görmüyorum. Bu mantıklı mı? r(u)uv vuu
Chris Pressey

Geçişli kapanışın, karakterini tanımlamanın adil bir yolu olduğunu varsayarsak , bu kulağa yakından alakalı olurdu: en.wikipedia.org/wiki/…r(u)
Chris Pressey

veconfl(u,v) birleştirmesi gerektiğini düşünmüyorum . Bunları değiştirebilir, ancak bu ayrık ayarlı orman yönteminde olduğu gibi çağrıyla zaten yapılacaktı . R(u)R(v)find
jmad

Onları birleştirmemesi gerektiği konusunda haklısınız; Cevabı düzenleyeceğim. Ama yapılan çağrılar findgerçekten hiçbir benzersiz nesne için olduğundan hariç "Bul", kullanışlı hesaplama şey yapamaz , yaklaşır. (Ne arayacağınızı , güncellemeleri nasıl yapacağınızı nasıl bilebilirsiniz? Sadece verilir, ancak daki bilgi potansiyel olarak grafikteki diğer tüm düğümler için geçerlidir.)r(u)R(u)finduR(u)
Chris Pressey
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.