нарисовать график, где расстояние между вершинами соответствует весу ребер - PullRequest
3 голосов
/ 31 марта 2011

Есть ли алгоритм, который дает мне координаты вершин в графе, когда я даю ему взвешенный граф, и вес ребер между вершинами указывает на расстояние между вершинами ?

Что-то вроде:

public _ArrayOfCoordinatesForVertices_ **super_hyper_algorithm**(weighted_graph){  
     return _foo_;  
}

Ответы [ 4 ]

4 голосов
/ 31 марта 2011

Обычно это невозможно: представьте себе граф с 3 узлами n1, n2 и n3.

Теперь рассмотрим следующие расстояния:

n1-n2: 4
n1-n3: 1
n2-n3: 1

(Это нарушает неравенство треугольника).

2 голосов
/ 26 февраля 2012

То, на что вы ссылаетесь, называется Многомерное масштабирование (MDS) , и вы должны найти множество реализаций, теперь вы знаете, как его искать.

Как и другие говорили, в некоторой степени невозможно нарисовать идеальный график, не нарушив некоторые из ваших ограничений (расстояния между точками). Алгоритмы MDS специально предназначены для минимизации таких нарушений.

0 голосов
/ 31 марта 2011

ОК, я нашел библиотеку для python, и она создает графическое изображение для меня :), и я могу дать вес для ребер, например, атрибут: Вес ребра.В точке, чем тяжелее вес, тем короче, прямее и вертикальнее край.

0 голосов
/ 31 марта 2011

Если график нарисован в евклидовом пространстве , вы не сможете этого сделать, потому что, как указано в в этом ответе , вы можете нарушить Неравенство треугольника .

Обычно вы можете визуально представить веса ребер, используя другой цвет (т.е. сопоставляя веса с цветовой картой), или используя разные толщины ребер (то есть, сопоставляя веса с масштабом толщины).).

...