좌표계에서 혼합 성분 / 종속성 그래프를 그리는 데 적합한 알고리즘이 있습니까?


9

혼합 된 구성 요소 / 종속성 그래프 (언어학 응용 프로그램)를 그리는 알고리즘을 찾고 있습니다. 이러한 그래프에는 두 가지 유형의 정점 (토큰, 노드)과 두 가지 유형의 가장자리 (계층 적, 비 계층 적)가 있습니다.

나는 일반적으로 이론과 알고리즘을 그래프로 처음 접했고이 질문이이 사이트의 연구 수준 요구 사항과 충돌하지 않기를 바랍니다. 그러나 일반적으로 cstheory의 범위 내에 있어야합니다 .

모든 토큰은 동일한 y 좌표로 표시되어야하며 토큰 및 / 또는 노드를 구성 요소로 그룹화하는 노드의 y 좌표는 동적으로 계산되어야하므로 그래프는 상향식으로 그려야합니다 (제 생각에) 예를 들어, 가장 긴 토큰 경로를 통해.

계층 적 에지 (토큰 / 노드를 구성 요소로 그룹화하는 데 사용됨)에는 최소 수의 굽힘 점이 있어야하지만 (최소 0), 필요한 경우 이전 요구 사항을 겹쳐서 최소 수의 교차점이 있어야합니다.

비 계층 적 모서리 (종속성에 사용)는 최소 교차 수를 가져야하며 베 지어 곡선으로 그려야합니다.

내가 만난 가장 좋은 것은 Buchheim et al. 선형 시간으로 실행되도록 Walker의 알고리즘을 개선합니다.

내 질문을 개선해야 할 필요가 있으면 알려주십시오. 포인터에 대해 미리 감사드립니다.

편집하다:

의견에서 지적했듯이 기본적으로 알고리즘에 의한 기본 그래프 레이아웃이 필요하다는 것을 언급해야합니다.이 알고리즘은 장기적으로 Eclipse GEF 가능성 내에서 편집하고 수정하고 싶습니다 . 이전에 Graphviz가 GEF와 작동하도록 옵션을 살펴 봤지만 GEF에서 상속 된 모든 편집 기능을 유지하는 작동 솔루션이없는 것 같습니다.


알고리즘이나 기존 도구가 필요하십니까? Graphviz ( graphviz.org )가이를 수행 할 수 있습니다. 그래프를 지정할 수 있으며 (일부 종류의 노드 및 모서리에 대한 일부 형식화 옵션) 도구가 합리적으로 렌더링 된 그래프를 출력합니다.
Dave Clarke

@DaveClarke : 감사합니다. Graphviz가 이것을 할 수 있다는 것을 알고 있습니다. 불행히도 현재 [Eclipse Graphical Editing Framework] (www.eclipse.org/gef) 기반 편집기에서 Graphviz를 사용할 가능성이없는 것 같습니다. 따라서 실제 알고리즘을 찾고 있습니다. 누군가가 Graphviz를 GEF에 꽂거나 포팅하는 방법을 알고 있지 않으면 :).
sd

OP가 알고리즘 (또는 사양을 캡처하는 문제 공식)을 찾고있는 것 같습니다.
Suresh Venkat

@SureshVenkat : 예, 설명해 주셔서 감사합니다.
sd

1
Q는 편집에 대한 언급은 없지만 주석에서 graphviz를 끄고 GEF로 편집하고 싶다고 표시하는 것 같습니다. GEF는 다른 "플러그인"을 구축 할 수있는 일반적인 시각적 편집 프레임 워크 / API입니다. 알고리즘을 사용하여 기본 그래프 레이아웃을 원하는 것으로 보이며 수정 할 수 있습니다. 이를 반영하여 질문을 수정하시기 바랍니다. 그런데 graphviz를 사용하여 좌표를 생성 한 다음 그래프 편집기로 피드 할 수 있습니다. GEF 그래프 편집 관련 예 : GEF를위한 전문 그래프 레이아웃
vzn

답변:


1

당신은 다음을 원하는 것 같습니다

  • 그래프 레이아웃 알고리즘. 많은 std 알고리즘은 일반적으로 노드가 보충 / 매력적인 "스프링"에 의해 연결되고 평형 / 낮은 에너지 상태가 (해당하는 전체적으로 구성된 힘 관련 미분 방정식의) 반복 횟수를 통해 획득되는 힘 기반 방법을 사용합니다. 알고리즘의 출력은 노드 및 (일반적으로) 모서리에 대한 2 차원 또는 3 차원 좌표 세트입니다.
  • 해당 알고리즘의 결과를 수동으로 수정하는 기능 일반적으로 "그래프 편집기"라고합니다. 이것은 레이아웃 알고리즘의 좌표로 시작하여 조정할 수 있습니다.

다시 (1) 최전선 소프트웨어는 graphviz 인 것 같습니다 . 다시 (2) 예를 들어 mathoverflow에서 "최고의 그래프 편집기는 무엇입니까?"라는 질문을 참조하십시오 .

graphviz 갤러리를 탐색 하면 원하는 것과 비슷한 두 가지 그래프 유형이 있습니다.

응급실 다이어그램신호등 .

두 가지 유형의 모서리가 있다고 말합니다. 간단한 방법은 신호등 예 에서처럼 가장자리를 "가로 또는 멀리"향하게하는 것입니다. 또는 ER 다이어그램과 같이 가장자리에 두 가지 방법으로 레이블을 지정할 수 있습니다. 두 예제 모두 다른 모양이나 레이블 또는 음영 등을 사용하는 두 개의 다른 노드 유형을 보여줍니다. 다른 방법은 색상을 사용하는 것입니다.

mathoverflow Q / A는 많은 그래프 편집기가 있음을 나타냅니다. graphviz를 가진 std는 "dotty"입니다. 예를 들어 Koutsofious의 pdf " dtty로 그래프 편집"을 참조하십시오 .

그래프 화를위한 또 다른 기술, 아마도 큰 그래프는 구조적 구성, 예를 들어 도축 분해를 보는 것이다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.