Bir koordinat sisteminde karma seçim bölgesi / bağımlılık grafiği çizmek için uygun bir algoritma var mı?


9

Karışık bir seçim bölgesi / bağımlılık grafiği (dilsel uygulama için) çizmek için bir algoritma arıyorum. Böyle bir grafik iki farklı tipte köşeye (jeton, düğüm) ve iki farklı kenar tipine (hiyerarşik, hiyerarşik olmayan) sahip olacaktır.

Teori ve algoritmaları genel olarak grafiğe dökmek için yeniyim ve umarım bu soru örneğin bu sitenin araştırma düzeyindeki gereksinimleriyle çarpışmaz. Bununla birlikte, genel olarak taslak kapsamında olmalıdır .

Tüm jetonlar aynı y koordinatı ile gösterilmesi gerektiğinden ve tokenleri ve / veya düğümleri bileşenlere gruplayan düğümlerin y koordinatlarının dinamik olarak hesaplanması gerektiğinden, grafiğin aşağıdan yukarıya doğru çizilmesi gerekir (sanırım), örneğin, bir token'a giden en uzun yollarından.

Hiyerarşik kenarlar (belirteçleri / düğümleri bileşenlere gruplamak için kullanılır) minimum sayıda bükülme noktasına sahip olmalıdır (ideal olarak 0), ancak gerektiğinde eski gereksinimin üzerine yazılan minimum sayıda geçiş olmalıdır.

Hiyerarşik olmayan kenarlar (bağımlılıklar için kullanılır) minimum geçiş sayısına sahip olmalı ve Bézier eğrileri olarak çizilmelidir.

Karşılaştığım bir sonraki en iyi şey Buchheim ve ark. , Walker'ın algoritmasını doğrusal zamanda çalışacak şekilde geliştirir.

Sorumu geliştirmek için herhangi bir ihtiyaç olması durumunda lütfen bana bildirin ve herhangi bir işaretçi için şimdiden çok teşekkürler.

DÜZENLE:

Bir yorumda belirtildiği gibi, temelde bir algoritma tarafından varsayılan bir grafik düzeni istediğimi belirtmeliyim ki, uzun vadede - Eclipse GEF olasılıkları içinde düzenlemek ve revize etmek istiyorum . Daha önce Graphviz'in GEF ile çalışmasını sağlamak için seçenekleri araştırdım, ancak GEF'ten miras alınan tüm düzenleme işlevlerini koruyan hiçbir çalışma çözümü yok gibi görünüyor.


Bir algoritmaya veya mevcut bir araca mı ihtiyacınız var? Graphviz ( graphviz.org ) bunu yapabilir. Grafiği, muhtemelen bazı biçimlendirme seçeneklerini (farklı türde düğümler ve kenarlar için) belirtirsiniz ve araç makul şekilde oluşturulmuş bir grafik çıkarır.
Dave Clarke

@DaveClarke: Teşekkürler. Graphviz'in bunu yapabildiğinin farkındayım. Ne yazık ki, şu anda Graphviz'i [Eclipse Grafik Düzenleme Çerçevesi] 'ne (www.eclipse.org/gef) dayanan bir editörle kullanma imkanı yok gibi görünüyor. Bu yüzden gerçek bir algoritma arıyorum. Birisi tabii ki Graphviz'i GEF'e nasıl bağlayacağını / bağlayacağını bilmiyorsa :).
sd

OP bir algoritma (veya spesifikasyonu yakalayan bir problem formülasyonu) arıyor gibi görünüyor
Suresh Venkat

@SureshVenkat: Evet, açıkladığınız için teşekkürler.
sd

1
Q'nun düzenleme sözü yok & yorumda graphviz'i kapatıyorsunuz ve GEF ile düzenlemek istediğinizi belirtiyorsunuz. GEF, diğer "eklentilerin" üzerine inşa edilebileceği genel bir görsel düzenleme çerçevesi / API'sıdır. daha sonra revize edebileceğiniz bir algoritma tarafından varsayılan bir grafik düzeni istiyorsunuz gibi görünüyor. sorunuzu bunu yansıtacak şekilde düzenlemenizi öneririz. Bu arada graphviz, daha sonra bir grafik düzenleyiciye beslenebilen koordinatlar oluşturmak için kullanılabilir. yeniden GEF grafik düzenleme bkz. örn . GEF için profesyonel grafik düzeni
vzn

Yanıtlar:


1

aşağıdakileri istiyor gibisin

  • grafik düzen algoritması. birçok std algoritması tipik olarak, düğümlerin tekrarlanan / çekici "yaylar" ile bağlandığı ve denge / düşük enerji durumunun bir miktar iterasyonla (ilgili küresel olarak oluşturulmuş kuvvetle ilgili diferansiyel denklemin) elde edildiği kuvvet tabanlı yöntemler kullanır. algoritmanın çıktısı, düğümler ve (genellikle) kenarlar için 2-d veya 3-d koordinat kümesidir.
  • bu algoritmanın sonuçlarını el ile değiştirme yeteneği. genellikle "grafik düzenleyici" olarak adlandırılır. bu, düzen algoritmasındaki koordinatlarla başlar ve ayarlamaya izin verir.

re (1) ön yazılım graphviz olarak gözükmektedir . re (2) bkz. örneğin bu soru , mathoverflow'daki "en iyi grafik düzenleyici nedir" .

graphviz galerisine göz atarken, istediğiniz gibi iki grafik türü vardır.

ER diyagramı ve trafik ışığı .

iki tür kenarınız olduğunu söylüyorsunuz. basit bir yol, trafik ışığı örneğinde olduğu gibi kenarları "doğru veya uzağa" yönlendirmek olacaktır. veya kenarlar ER diyagramında olduğu gibi iki şekilde etiketlenebilir. her iki örnek de farklı şekiller veya etiketler veya gölgeleme vb. kullanan iki farklı düğüm tipini gösterir. diğer yaklaşımlar renklendirme kullanmaktır.

Mathoverflow Q / As belirttiği gibi birçok grafik düzenleyici var. graphviz ile std bir "dotty" dir. bkz. örneğin Koutsofious tarafından pdf "dotty ile grafik düzenleme" .

grafik için başka bir teknik, muhtemelen büyük grafikler, yapısal bileşimlere, örneğin, klik ayrışmalarına bakmaktır.

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.