Ekler / siler varlığında bir DAG için bağlantı bilgilerini etkin bir şekilde korumak için bir algoritma var mı?


17

Yönlendirilmiş bir asiklik grafik verildiğinde G(V,E) , aşağıdaki işlemleri verimli bir şekilde desteklemek mümkün müdür?

  • isConnected(G,a,b) : düğümünden düğümünden düğümüne yol olup olmadığını belirler.a bGab
  • link(G,a,b) : 'den ekler bir kenar için grafikteb GabG
  • unlink(G,a,b) : 'den kenarı kaldırır etmek deb GabG
  • add(G,a) : G'ye bir tepe noktası ekler
  • remove(G,a) : G'den bir tepe noktasını kaldırır

Birkaç not:

  • Bağlantıyı izin vermezsek , ayrık olmayan bir set veri yapısı kullanarak bağlılık bilgisini korumak kolay olurdu.unlink
  • Açıkçası, , grafiğin saf işaretçi tabanlı gösterimi kullanılarak derinlik veya önce genişlik araması kullanılarak uygulanabilir. Ancak bu verimsizdir.isConnected

Her üç operasyon için de itfa edilmiş sabit veya logaritmik zaman umuyorum. Mümkün mü?



1
Ayrık set tipi veri yapısı kullanarak daha basit durumun (bağlantısız) nasıl çözüleceğini açıklayabilir misiniz?
jbapple

@Tsuyoshi - bu sorudaki bağlantılar ilginç görünüyor, şimdi onlara bir göz atıyorum.
Justin Kilpatrick

(1) Grafiğin bir DAG olması kısıtlamasıyla yönlendirilmiş erişilebilirlik için dinamik bir grafik algoritması arıyorsunuz. Yanılmıyorsam, dinamik yönlendirilmiş ulaşılabilirlik, yönlendirilmemiş muadilden çok daha zordur, ancak burada DAG özelliği yardımcı olabilir. (2) removeAyrıca gelen kenarları da giderir mi? Eğer öyleyse, bu işlemin O (log n) süresi olmasını istemek umut etmek için çok fazla olabilir.
Tsuyoshi Ito

Yanıtlar:


19

Tanımladığınız sorun tamamen dinamik DAG erişilebilirliği (DAG'larda tamamen dinamik geçişli kapatma olarak da bilinir). Tam dinamik olarak adlandırılır, çünkü insanlar sadece silme işlemlerinin mümkün olduğu sürümleri (daha sonra adım adım erişilebilirlik olarak adlandırılır) ve yalnızca eklemelerin mümkün olduğu (artımlı erişilebilirlik olarak adlandırılır) sürümleri de inceler.

Güncelleme zamanı ile sorgu zamanı arasında birkaç tutarsızlık vardır. Let kenar sayısı ve olmak n köşe sayısı. DAG'lar için Demetrescu ve Italiano (FOCS'00) O ( n 1.58 ) zamanında güncellemeleri (kenar ekler veya siler) ve O ( n 0.58 ) zamanda (düğüm ekler / silmeler) erişilebilirlik sorgularını destekleyen rastgele bir veri yapısı verdi , O (1) zamanında); bu sonuç Sankowski (FOCS'04) tarafından genel yönlendirilmiş grafikler için çalışacak şekilde genişletildi. Ayrıca DAG'lar için Roditty (SODA'03) geçişli kapatma matrisini toplam O ( m n + I · n 2 + D ) süresinde koruyabileceğinizi gösterdi.mnn1.58n0.58mn+I·n2+D ekleme sayısı, D silme sayısı ve tabii ki sorgu süresi O ( 1 ) 'dir.ID1

Genel yönlendirilmiş grafikler için aşağıdaki (güncelleme, sorgu) süreleri bilinmektedir: (O ( ), O (1)) (Demetrescu ve Italiano FOCS'00 (amortismana tabi tutulmuş), Sankowski FOCS'04 (en kötü durum)), ( O ( m n2 ),O(mn )) (Roditty, Zwick FOCS'02), (O (m+nlogn), O (n)) (Roditty, Zwick STOC'04), (O (n 1.58 ), O (n 0.58 )) ve (O (n 1.495 ), O (n 1.495 )) tarafından Sankowski (FOCS'04).O(nm+nlognnn1.58n0.58n1.495n1.495

Güncelleme süresini çok fazla artırmadan bir polilogaritmik sorgu süresi elde etmek, DAG'lar için bile büyük bir açık sorundur.


1
Cevabınız için teşekkür ederim. Her ne kadar bu sınırların ne kadar fakir olduğunu hayal kırıklığına uğrattığımı söylemek zorundayım. :(
Justin Kilpatrick

1
İlgili bir soru: beni daha basit problemler, artımlı ulaşılabilirlik ve DAG'lar için kademeli ulaşılabilirlik ile ilgili herhangi bir referansa yönlendirebilir misiniz?
Justin Kilpatrick

Bu naif dfs yaklaşımından çok daha iyi dikiş yapmaz (O(1),O(n^2))ya da (O(m),O(n+m)).
Thomas Ahle

4

O(n0.58)O(n1.58)

(Bu, yalnızca sona Sorunuzun ilk versiyonunu kapsar linkve unlinkancak olmadan addve remove.)


The bounds are build on Strassen's algorithm though, so the constant is huge.
Thomas Ahle
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.