Değişen yönlendirilmemiş bir grafikteki bileşenleri izlemek için çevrimiçi bir algoritma var mı?


12

Sorun

Zamanla değişecek olan yönlendirilmemiş bir grafiğim var (çok kenarlı), düğümler ve kenarlar eklenebilir ve silinebilir. Grafiğin her değişikliğinde, bu grafiğin bağlı bileşenlerini güncellemem gerekiyor.

Özellikleri

Ek özellikler, hiçbir iki bileşenin tekrar bağlanmayacağıdır. Tabii ki, grafik keyfi bir miktarda döngü içerebilir (aksi takdirde çözüm önemsiz olacaktır). Eğer bir kenar düğümü içermiyorsa , asla bu düğümü kabul etmez. Ancak, , bu olabilir değiştirmek .n n eennene

Yaklaşımlar

Şimdiye kadar iki olası yaklaşımım var, ancak göreceğiniz gibi korkunçlar:

Yavaş halsiz

Her seferinde değiştirilmiş öğelerden başlayarak grafiği arayabilirim (dfs / bfs). Bu alandan tasarruf sağlar, ancak her değişiklik için O (n + m) olduğu için yavaştır.

Durum bilgisi olan hızlı (-er) (?) Yaklaşım

Her düğüm için tüm olası yolları tüm olası düğümlere kaydedebilirim, ancak doğru görürsem, bu O (n ^ 4) belleği alacaktır. Ancak çalışma zamanı iyileştirmesinin nasıl olduğundan emin değilim (eğer varsa), aynı bileşendeki her düğüm için bilgileri güncel tutmak zorundayım).

Soru

Herhangi bir işaretçiniz var mı, bu sorun hakkında nasıl daha fazla bilgi edinebilirim veya belki de geliştirebileceğim bazı algoritmalar?

Not

Çalışma zamanında / bellekte büyük bir gelişme varsa, bazen iki bileşenin bir olduğunu söyleyen optimal olmayan bir çözümle yaşayabilirdim, ancak elbette en uygun çözümü tercih ederim.


Eğer son iki cümlenizi "Özellikler" de okursam, o zaman sadece ondalık soruna ilgi duyuyorsunuz. Öyleyse, Thorup'un aşamalı dinamik bağlantı konusundaki çalışmalarını kontrol ettiğinizden emin olun. (Alıntıyı JeffE'nin sorunun tamamen dinamik versiyonu için olan işaretçileri aracılığıyla bulabilirsiniz.)
Maverick Woo

@Maverick Woo: Her zaman yeni kenarlar / düğümler olabilir. Son mülkün tam olarak bu nedenle çok güçlü olmadığını düşünüyorum. Hâlâ ondalık olarak nitelendiriliyor mu?
bitmask

Hata! İlk cümleyi nasıl özlediğimi bilmiyorum ... Aşağıdaki "cevaba" bakınız.
Maverick Woo

Yanıtlar:


17

Polilogaritmik zamanda kenar eklemeleri, kenar silme işlemleri ve bağlantı sorgularını (bu iki köşe aynı bağlı bileşende mi?) Destekleyen çeşitli veri yapıları vardır.


Bu kulağa harika geliyor, gazetelere girdikten sonra bunu kabul edeceğim.
bitmask

6

Bağlı bileşen ayrıştırması için dinamik grafik algoritması denilen şeyi aradığınızı düşünüyorum. Holm, de Lichtenberg ve Thorup [HLT01] algoritması, her kenar güncellemesinde polilogaritmik zamanı amorti etmiştir. Soruna son kez baktığımdan beri uzun zaman geçti, bu yüzden muhtemelen daha yeni bir ilerleme var.

[HLT01] Jacob Holm, Kristian de Lichtenberg ve Mikkel Thorup. Bağlantı, minimum yayılan ağaç, 2 kenar ve çift bağlantı için poli-logaritmik deterministik tam dinamik algoritmalar. ACM Dergisi , 48 (4): 723–760, Temmuz 2001. http://doi.acm.org/10.1145/502090.502095


Uğursuzluk. Bana bir kola borçlusun.
Jeffε

@JeffE: O oyunu bilmiyordum . Ama kurallara göre, oyunu kaybetmedim (sadece “jinxed” durumundayım), bu yüzden daha fazla konuşmadıkça sana kola borçlu değilim… oh, bir dakika bekle.
Tsuyoshi Ito

Eğer saygınlık noktalarında ticaret yapabilseydin :)
Suresh Venkat

5

(Şimdilik maalesef uygulamanız için yeterli olmayabilecek bağlantı sorgularına bağlı kalmama izin verin.)

Dinamik bağlantı sorunuyla ilgili önceki çalışmaların çoğu kenar güncelleme modelindedir: köşe sayısının sabit olduğunu varsayarsınız ve sorgu yaparken kenar ekleyebilir ve / veya silebilirsiniz. Yalnızca ekleyebilir (silebilirseniz), bu artımlıdır (artan). Her ikisini de yapabiliyorsanız, bu tamamen dinamiktir. Thorup'un JeffE (ve yorumda kendim) tarafından işaret edilen çalışmaları tamamen güncellemeler içindir.

AFAIK, CS teorisi topluluğu sadece genel grafikler için köşe güncellemelerine bakmaya başlıyor. Bu konuda FOCS 2008'de Chan, Pătraşcu ve Roditty tarafından çığır açıcı bir çalışma vardı. Çok yakın tarihli (Eylül 2010) bir revizyon ve içindeki referanslar için bu bağlantıya bakın .


Neden Holm ve diğ. ark. yaklaşım benim sorunum için çalışmıyor? Bunu benimseyecektim.
Bitmask

1
Grafiğinizin derecesi sınırlıysa, teoride bir grup kenar güncellemesini kullanarak bir tepe noktası güncellemesini taklit edebilirsiniz. Aksi takdirde, tek bir köşe güncellemesi (bir yıldız grafiğinin merkezinin kaldırılması) grafiğin bağlantısını önemli ölçüde değiştirebilir ve bu durumda Chan ve ark.
Maverick Woo

Anlıyorum. Orijinal soruda, tepe kaldırma işlemlerinin nadir olduğunu belirtmem gerekirdi , bu yüzden bunu kenardan yapmayı göze alabilirim.
bitmask
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.