2011-02-20 20 views
7

Używam networkx (pakiet do rysowania wykresów Pythona) http://networkx.lanl.gov/index.html dla jednego z moich projektów. Choć networkx jest całkiem fajny, funkcja wyświetlania jest zasysana z powodu liczby krawędzi poprzecznych. Czy istnieje sposób, aby zminimalizować poprzeczne krawędzie na wykresie? Chodzi mi o algorytm, który może sortować węzły w taki sposób, aby zminimalizować przekroje poprzeczne?Minimalizuj krzywe krawędzi na wykresie

+0

Czy próbowałeś użyć Graphviz do swojego rysunku? To może zrobić lepiej przy minimalizowaniu przejazdów (zwłaszcza Dot, jeśli masz rodzaj wykresów, który preferuje). Jakiego rodzaju wykresu masz (tj. Skąd się bierze)? –

+0

Myślałem, że networkx używa graphviz do wyświetlania (poprzez pydot). Te wykresy pochodzą ze śladów specjalnego rodzaju sieci. Pierścienie są najgorszym hitem :( –

+0

możliwy duplikat [Planar Graph Layouts] (http://stackoverflow.com/questions/2347748/planar-graph-layouts) –

Odpowiedz

3

Ustalenie planarnego układu graficznego, który minimalizuje liczbę skrzyżowań, jest NP-trudny. Zobacz stronę wiki pod adresem Crossing Number.

Można wypróbować heurystyki, układ sił jest dość popularny, jak sądzę (graphviz używa ich, jeśli dobrze pamiętam).

Można również wypróbować algorytmy aproksymacyjne, powinieneś znaleźć odnośniki na stronie wiki, którą połączyłem.

Nadzieję, że pomaga.