Я ищу алгоритм для рисования смешанного графа групп интересов / зависимостей (для лингвистического приложения). Такой граф будет иметь два разных типа вершин (токены, узлы) и два разных типа ребер (иерархические, неиерархические).
Я новичок в теории графов и алгоритмах в целом, и я надеюсь, что этот вопрос не вступает в противоречие, например, с требованиями исследовательского уровня этого сайта. Однако, как правило, это должно быть в рамках теории .
График должен быть нарисован снизу вверх (я думаю), так как все токены должны отображаться с одинаковыми координатами y, а координаты y узлов, группирующих токены и / или узлы в составляющие, должны рассчитываться динамически, например, через их самый длинный путь к токену.
Иерархические ребра (используемые для группировки токенов / узлов в составляющие) должны иметь минимальное количество точек сгиба (в идеале 0), но также должно быть минимальное количество пересечений, перезаписывая прежнее требование, если это необходимо.
Неиерархические ребра (используемые для зависимостей) должны иметь минимальное количество пересечений и быть нарисованы в виде кривых Безье.
Следующая лучшая вещь, с которой я столкнулся, - это алгоритм, описанный Buchheim et al. , улучшая алгоритм Уокера для запуска в линейное время.
Пожалуйста, дайте мне знать, если возникнет необходимость улучшить мой вопрос, и большое спасибо заранее за любые ссылки.
РЕДАКТИРОВАТЬ:
Как отмечено в комментарии, я должен упомянуть, что я в основном хочу макет графика по умолчанию с помощью алгоритма, который я - в конечном счете - хочу редактировать и пересматривать в рамках возможностей Eclipse GEF . Ранее я рассматривал варианты, чтобы заставить Graphviz работать с GEF, но, похоже, не существует рабочего решения, которое сохранило бы все функциональные возможности редактирования, унаследованные от GEF.
Ответы:
Вы, кажется, хотите следующее
По-видимому, (1) передовое программное обеспечение выглядит графически . re (2) см., например, этот вопрос «какой редактор графов лучше» на mathoverflow .
просматривая галерею graphviz, вы увидите два типа графиков, аналогичных тем, которые вы хотите.
Диаграмма ER и светофор .
Вы говорите, у вас есть два типа ребер. простой способ состоит в том, чтобы направлять края «в направлении или в сторону», как в примере со светофором. или края могут быть помечены двумя способами, как на диаграмме ER. В обоих примерах показаны два разных типа узлов с использованием разных форм или меток, или затенения и т. д. Другие подходы заключаются в использовании окраски.
как показывают mathoverflow Q / As, существует много графических редакторов. STD с Graphviz является "dotty". см., например, pdf "Редактирование графиков с помощью dotty" от Koutsofious.
Другой метод построения графиков, возможно больших графиков, заключается в рассмотрении структурных композиций, например, разложений по кликам.
источник