Esiste un algoritmo adatto per disegnare un grafico elettorale / di dipendenza misto in un sistema di coordinate?


9

Sto cercando un algoritmo per disegnare un grafico elettorale misto / dipendenza (per un'applicazione linguistica). Un tale grafico avrebbe due diversi tipi di vertici (token, nodi) e due diversi tipi di bordi (gerarchici, non gerarchici).

Sono nuovo della teoria dei grafi e degli algoritmi in generale, e spero che questa domanda non si scontrino, ad esempio con i requisiti a livello di ricerca di questo sito. Dovrebbe tuttavia generalmente rientrare nell'ambito di applicazione di cstheory .

Il grafico dovrebbe essere disegnato dal basso verso l'alto (penso), poiché tutti i token dovrebbero essere visualizzati con la stessa coordinata y e le coordinate y dei nodi che raggruppano token e / o nodi in componenti devono essere calcolate dinamicamente, ad esempio, attraverso il percorso più lungo verso un token.

I bordi gerarchici (usati per raggruppare token / nodi in componenti) dovrebbero avere un numero minimo di punti di piega (idealmente 0), ma dovrebbe esserci anche un numero minimo di incroci, sovrascrivendo il precedente requisito se necessario.

I bordi non gerarchici (usati per le dipendenze) devono avere un numero minimo di incroci e devono essere disegnati come curve di Bézier.

La prossima cosa migliore che ho incontrato è l'algoritmo descritto da Buchheim et al. , migliorando l'esecuzione dell'algoritmo di Walker in tempo lineare.

Per favore fatemi sapere se ci fosse bisogno di migliorare la mia domanda, e grazie mille in anticipo per eventuali suggerimenti.

MODIFICARE:

Come sottolineato in un commento, dovrei ricordare che fondamentalmente voglio un layout grafico predefinito da un algoritmo, che a lungo termine voglio modificare e rivedere all'interno delle possibilità di Eclipse GEF . Ho già esaminato le opzioni per far funzionare Graphviz con GEF, ma non sembra esserci alcuna soluzione funzionante che preservi tutte le funzionalità di modifica ereditate da GEF.


Hai bisogno di un algoritmo o di uno strumento esistente? Graphviz ( graphviz.org ) può farlo. Si specifica il grafico, possibilmente alcune opzioni di formattazione (per diversi tipi di nodi e bordi) e lo strumento produrrà un grafico con rendering ragionevole.
Dave Clarke,

@DaveClarke: grazie. Sono consapevole che Graphviz è in grado di farlo. Sfortunatamente non sembra che al momento non ci sia alcuna possibilità di usare Graphviz con un editor basato su [Eclipse Graphical Editing Framework] (www.eclipse.org/gef). Quindi sto cercando un vero algoritmo. A meno che qualcuno non sappia come collegare / trasferire Graphviz su GEF ovviamente :).
sabato

Sembra che l'OP stia cercando un algoritmo (o una formulazione del problema che catturi le specifiche)
Suresh Venkat,

@SureshVenkat: Sì, grazie per il chiarimento.
sabato

1
Q non ha accennato alla modifica e, nei commenti, si rifiuta graphviz e sembra che si desideri modificarlo con GEF. GEF è un framework / API di editing visivo generale su cui possono basarsi altri "plug-in". sembra che tu voglia un layout grafico predefinito da un algoritmo che puoi quindi rivedere. ti suggerisco di modificare la tua domanda per riflettere ciò. a proposito credo che graphviz possa essere usato per generare coordinate che possono poi essere inserite in un editor di grafici. per la modifica dei grafici GEF, ad es. layout grafico professionale per GEF
vzn

Risposte:


1

sembra che tu voglia quanto segue

  • un algoritmo di layout grafico. molti algoritmi std tipicamente usano metodi basati sulla forza in cui i nodi sono collegati da "molle" sostitutive / attraenti e lo stato di equilibrio / bassa energia è ottenuto attraverso un certo grado di iterazione (della corrispondente equazione differenziale relativa alla forza costruita globalmente). l'output dell'algoritmo è un insieme di coordinate 2-d o 3-d per nodi e (solitamente) bordi.
  • capacità di modificare manualmente i risultati di tale algoritmo. in genere chiamato "editor grafico". questo inizia con le coordinate dell'algoritmo di layout e consente la regolazione.

ri (1) il software all'avanguardia sembra essere graphviz . re (2) vedi ad esempio questa domanda "qual è il miglior editor di grafici" su mathoverflow .

sfogliando la gallery di graphviz, ecco due tipi di grafici simili a quelli che desideri.

Diagramma ER e semaforo .

dici di avere due tipi di bordi. un modo semplice sarebbe quello di orientare i bordi "verso o lontano" come nell'esempio del semaforo. oppure i bordi possono essere etichettati in due modi come nel diagramma ER. entrambi gli esempi mostrano due diversi tipi di nodo usando forme o etichette diverse, o ombreggiatura ecc. altri approcci sarebbero usare la colorazione.

come indica il mathoverflow Q / As ci sono molti editor di grafici. quello standard con graphviz è "dotty". vedere ad esempio pdf "modifica di grafici con punti" di Koutsofious.

un'altra tecnica per rappresentare graficamente, possibilmente grafici di grandi dimensioni, è guardare alle composizioni strutturali, ad esempio le decomposizioni della cricca.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.