Dinamik olarak kenarlar ekleyebileceğiniz ve bazı belirli sorgular yapabileceğiniz yönlendirilmiş bir grafik düşünün .
Ö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 .
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 .equiv
find
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.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.
Bir tanımlayabilir ve tanımlamak için olarak zaman . Ama bunu kademeli olarak nasıl hesaplayabilirim?
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.