Come ridurre il numero di bordi incrociati in un diagramma?


10

Sto lavorando a un editor di diagrammi. I diagrammi mostrano forme 2D ( nodi ) collegate con connettori ( bordi ).

Vorrei aggiungere un'operazione che, data una selezione di nodi, li "districa" : li riposiziona per ridurre il numero di bordi di incrocio, se possibile (ed è OK se i bordi dovranno essere disegnati con punti di piega) .

Quindi voglio un algoritmo grafico che, dato un incorporamento ( topologico ) del grafico e un sottoinsieme dei suoi nodi, modifichi l'incorporamento (la sua topologia ) solo su quei nodi in modo da ridurre al minimo il numero di spigoli incrociati.

Dalla lettura di grafici apicali e la navigazione di Cabello e Mohar (2013) , suppongo che questo problema sia NP-difficile. Quindi sarò felice con un algoritmo parametrizzato (ad es. Sul numero di spigoli) che ha una complessità temporale nota, polinomiale, per ogni dato valore di parametro. Sembra fattibile, ma non trovo facile elaborare un simile algoritmo da solo.

Domande:

  • Dove cerco un tale algoritmo?
  • Esiste?
  • Nel software esistente?
  • Esiste un'esperienza pratica significativa con un'operazione del genere? (Ciò che sembra buono in teoria potrebbe non essere così buono in pratica, o viceversa.)

(Non sono sicuro di quale sia il posto migliore per porre questa domanda: qui, su StackOverflow o MathOverflow?)


1
Suppongo che la domanda possa essere più adatta a StackOverflow, ma ho notato che domande simili hanno risposte insoddisfacenti. Ti seguirò con una risposta che dovrebbe aiutarti in termini teorici, ma potrebbe essere meglio migrare la tua domanda lì.
mdxn,

C'è un lavoro molto approfondito qui: complang.tuwien.ac.at/cd/ebner/ebner05da.pdf
Dschoni

Grazie! Non solo, ma è chiaramente una presentazione molto leggibile del problema e un'indagine su alcuni approcci ben noti.
reinierpost

Risposte:


9

NP-hard

Il problema posto nella domanda è in realtà più difficile e più coinvolto di quanto sopra. Stai prendendo in considerazione i nodi del grafico di una certa dimensione e forma, pur limitando la dimensione (area) del risultato. Inoltre, si desidera una nozione di estetica non ancora determinata. Ovviamente vogliamo un euristico per questo, che non usa il minimo assoluto nel caso generale. Il numero di nodi riscontrati in un'applicazione di questo tipo non è probabilmente enorme nel caso medio. Disegnare la versione minima del bordo del grafico può essere fattibile per piccole dimensioni.

Risorse:
potresti essere interessato alle seguenti risorse, in particolare alla prima:

Ci sono anche molte altre risorse. Questi dovrebbero aiutarti a iniziare.

Ulteriori pensieri e osservazioni:

Ecco un'idea per aggirare i problemi riguardanti la forma e le dimensioni dei nodi. Dato il grafico (nodi infinitamente piccoli), espandi ciascun nodo mentre "spingi" o piega i bordi di mezzo (es. Usando le spline mentre imponi un limite di prossimità). È necessario farlo con altri spigoli e nodi che si frappongono, il che può iniziare una reazione a catena. Guarda come un equilibrio può essere calcolato in modo efficiente (es. Strutture molecolari). Se non riesci a ottenere la forma di un nodo alla dimensione desiderata, ridimensiona l'intero diagramma.

Un utente potrebbe godere dei risultati di un algoritmo randomizzato. Potrebbero usare la tua funzione più volte fino a quando non avranno qualcosa che gli piace. Evitare il calcolo ridondante in questo caso (non è necessario calcolare nuovamente un numero di attraversamento).


Ho aggiunto la topologia alla mia domanda specificamente per evitare la discussione sull'estetica. È importante, ma non penso che influenzino molto il problema di base - penso che possano essere affrontati in una fase separata, dopo aver regolato la topologia dei nodi (ovvero quali nodi sono circondati da quali altri nodi).
reinierpost,

Ho usato Graphviz per la prima volta oltre 15 anni fa; Lo uso all'incirca una volta alla settimana per tutti i tipi di grafici. Non sono troppo impressionato dai suoi risultati e capisco che è difficile fare molto meglio.
reinierpost,

Visito spesso graphviz.org e ho letto alcuni dei documenti a cui si riferiscono. Ma non ho ancora incontrato una risposta a questa domanda specifica, e non è nella mia descrizione del lavoro fare conoscenza con la letteratura. Ecco perché lo sto chiedendo qui.
reinierpost,

Grazie per i riferimenti però - noto che questa è ancora ricerca corrente .
reinierpost,

La prima cosa che proverò è un algoritmo banale (e quindi non necessariamente utile) basato approssimativamente sull'idea della signora Shabbeer. Grazie ancora.
reinierpost,
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.