Bir diyagramdaki geçiş kenarlarının sayısı nasıl azaltılır?


10

Bir diyagram editörü üzerinde çalışıyorum. Diyagramlar konektörlere ( kenarlara ) bağlı 2D şekilleri ( düğümler ) gösterir.

Bir düğüm seçimi verildiğinde onları "serbest bırakan" bir işlem eklemek istiyorum : mümkünse geçiş kenarlarının sayısını azaltmak için onları yeniden konumlandırır (ve kenarların bükülme noktaları ile çizilmesi gerekiyorsa sorun değil) .

Bu nedenle, ( topolojik ) grafik yerleştirme ve düğümlerinin bir alt kümesi verildiğinde, geçiş kenarlarının sayısını en aza indirecek şekilde yalnızca bu düğümlerdeki yerleştirmeyi ( topolojisi ) değiştiren bir grafik algoritması istiyorum .

Apeks grafikleri hakkında okumaktan ve Cabello ve Mohar'a (2013) göz atmaktan , bu sorunun NP-zor olduğunu düşünüyorum. Bu nedenle, herhangi bir parametre değeri için bilinen, polinom, zaman karmaşıklığına sahip parametreli bir algoritmadan (örn. Geçiş kenarı sayısında) memnun olacağım. Bu mümkün görünüyor, ancak kendi başıma böyle bir algoritma bulmak kolay değil.

Sorular:

  • Böyle bir algoritmayı nerede ararım?
  • Var mı?
  • Mevcut yazılımda?
  • Böyle bir operasyonla ilgili önemli bir pratik deneyim var mı? (Teoride iyi görünen şey pratikte o kadar iyi olmayabilir veya tam tersi olabilir.)

(Bu soruyu en iyi nerede soracağından emin değilim: burada, StackOverflow veya MathOverflow?)


1
Sorunun StackOverflow için daha uygun olabileceğini varsayıyorum, ancak benzer soruların tatmin edici cevaplar olmadığını fark ettim. Teorik olarak size yardımcı olacak bir cevap izleyeceğim, ancak sorunuzun buraya taşınması en iyisi olabilir.
mdxn

Burada çok derinlemesine çalışmalar yapılıyor: complang.tuwien.ac.at/cd/ebner/ebner05da.pdf
Dschoni

Teşekkürler! Sadece bu değil, aynı zamanda sorunun çok okunabilir bir sunumu ve bazı iyi bilinen yaklaşımların bir anketidir.
reinierpost

Yanıtlar:


9

Mutlak minimum geçiş sayısını hesaplamak, gözlemlediğiniz gibi . Grafikleri çizme işlemi en azından bu kadar zor olmalıdır.NP-hard

Soruda ortaya çıkan sorun aslında yukarıdakilerden daha zor ve daha karmaşık. Sonucun boyutunu (alanını) sınırlarken, belirli bir boyut ve şekle sahip grafik düğümleri de göz önünde bulunduruyorsunuz. Ek olarak, henüz belirlenmemiş bir estetik kavramı arzu edilir. Açıkçası bunun için genel durumda mutlak minimum değeri kullanmayan bir buluşsal yöntem istiyoruz. Böyle bir uygulamada karşılaşılan düğüm sayısı ortalama durumda çok fazla değildir. Grafiğin minimum kenar geçiş versiyonunun çizilmesi küçük boyutlar için uygun olabilir.

Kaynaklar:
Özellikle ilk kaynakla ilgili olarak aşağıdaki kaynaklarla ilgilenebilirsiniz:

Çok sayıda başka kaynak da var. Bunlar başlamanıza yardımcı olacaktır.

Ek Düşünceler ve Gözlemler:

Düğümlerin şekli ve boyutu ile ilgili sorunları çözmek için bir fikir. Grafik göz önüne alındığında (sonsuz küçük düğümler), kenarları yoldan "iterken" veya bükerken her düğümü genişletin (örn. Yakınlık sınırını uygularken spline kullanarak). Bunu, bir zincir reaksiyonu başlatabilecek şekilde engelleyen diğer kenarlar ve düğümlerle yapmanız gerekir. Bir dengenin nasıl verimli bir şekilde hesaplanabileceğine bakın (örn. Moleküler yapılar). Bir düğümün şeklini istenen boyuta getiremiyorsanız, tüm diyagramı ölçeklendirin.

Bir kullanıcı rastgele bir algoritmanın sonuçlarından yararlanabilir. Beğendikleri bir şey elde edene kadar özelliğinizi birden çok kez kullanabilirler. Bu durumda fazladan hesaplama yapmaktan kaçının (bir geçiş numarasını tekrar hesaplamaya gerek yoktur).


Estetiğin tartışılmasını önlemek için sorumu topolojik olarak özellikle ekledim . Önemli, ama temel problemi çok etkilediğini sanmıyorum - düğümlerin topolojisini ayarladıktan sonra ayrı bir adımda ele alınabileceğini düşünüyorum (diğer düğümlerin hangi düğümlerle çevrili olduğu).
reinierpost

Graphviz'i ilk olarak 15 yıl önce kullandım; Her türlü grafik için kabaca haftada bir kullanıyorum. Sonuçlarından çok etkilenmedim ve daha iyisini yapmanın zor olduğunu anlıyorum.
reinierpost

Sık sık graphviz.org'u ziyaret ediyorum ve atıfta bulundukları makaleleri okudum. Ancak bu soruya henüz cevap vermedim ve literatürle tanışmak iş tanımımda değil. Bu yüzden burada soruyorum.
reinierpost

Yine de referanslar için teşekkür ederim - bunun hala güncel bir araştırma olduğunu fark ettim .
reinierpost

Deneyeceğim ilk şey, kabaca Bayan Shabbeer'in fikrine dayanan önemsiz (ve bu nedenle mutlaka yararlı olmayan) bir algoritmadır. Tekrar teşekkürler.
reinierpost
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.