Có một thuật toán phù hợp để vẽ biểu đồ cấu thành / phụ thuộc hỗn hợp trong một hệ tọa độ không?


9

Tôi đang tìm kiếm một thuật toán để vẽ biểu đồ cấu thành / phụ thuộc hỗn hợp (cho một ứng dụng ngôn ngữ). Một biểu đồ như vậy sẽ có hai loại đỉnh khác nhau (mã thông báo, nút) và hai loại cạnh khác nhau (phân cấp, không phân cấp).

Tôi chưa quen với lý thuyết và thuật toán đồ thị nói chung và tôi hy vọng rằng câu hỏi này không va chạm, ví dụ như với các yêu cầu ở cấp độ nghiên cứu của trang web này. Tuy nhiên, nó thường phải nằm trong phạm vi của cstheory .

Biểu đồ sẽ phải được vẽ từ dưới lên (tôi nghĩ), vì tất cả các mã thông báo phải được hiển thị với cùng tọa độ y và tọa độ y của các nút nhóm các mã thông báo và / hoặc các nút thành các thành phần sẽ phải được tính toán linh hoạt, ví dụ: thông qua đường dẫn dài nhất của họ tới mã thông báo.

Các cạnh phân cấp (được sử dụng để nhóm các mã thông báo / nút thành các thành phần) nên có số lượng điểm uốn tối thiểu (lý tưởng là 0), nhưng cũng cần có số lượng giao cắt tối thiểu, ghi đè lên yêu cầu trước đây nếu cần.

Các cạnh không phân cấp (được sử dụng cho các phụ thuộc) nên có số lượng giao cắt tối thiểu và được vẽ dưới dạng các đường cong Bézier.

Điều tốt nhất tiếp theo tôi đã gặp là thuật toán được mô tả bởi Hội trưởng và cộng sự. , cải thiện thuật toán của Walker để chạy trong thời gian tuyến tính.

Xin vui lòng cho tôi biết nếu cần có bất kỳ nhu cầu cải thiện câu hỏi của tôi, và cảm ơn rất nhiều trước cho bất kỳ con trỏ.

BIÊN TẬP:

Như đã chỉ ra trong một nhận xét, tôi nên đề cập rằng về cơ bản tôi muốn bố trí biểu đồ mặc định bằng thuật toán, mà về lâu dài - tôi muốn chỉnh sửa và sửa đổi trong các khả năng GEF của Eclipse . Trước đây tôi đã xem xét các tùy chọn để khiến Graphviz hoạt động với GEF, nhưng dường như không có giải pháp hoạt động nào bảo tồn tất cả chức năng chỉnh sửa được kế thừa từ GEF.


Bạn có cần một thuật toán hoặc một công cụ hiện có? Graphviz ( graphviz.org ) có thể làm điều này. Bạn chỉ định biểu đồ, có thể một số tùy chọn định dạng (cho các loại nút và cạnh khác nhau) và công cụ sẽ xuất ra biểu đồ được hiển thị hợp lý.
Dave Clarke

@DaveClarke: Cảm ơn. Tôi biết rằng Graphviz có thể làm điều này. Thật không may, dường như hiện tại không có khả năng sử dụng Graphviz với trình soạn thảo dựa trên [Khung chỉnh sửa đồ họa Eclipse] (www.eclipse.org/gef). Do đó tôi đang tìm kiếm một thuật toán thực tế. Trừ khi có ai đó biết cách cắm / chuyển Graphviz vào GEF tất nhiên :).
sd

Nghe có vẻ như OP đang tìm kiếm một thuật toán (hoặc một công thức vấn đề nắm bắt đặc tả)
Suresh Venkat

@SureshVenkat: Vâng, cảm ơn vì đã làm rõ.
sd

1
Q không đề cập đến việc chỉnh sửa & nhưng trong phần bình luận, bạn từ chối graphviz và dường như cho biết bạn muốn chỉnh sửa nó bằng GEF. GEF là một khung / API chỉnh sửa trực quan chung mà các "plugin" khác có thể xây dựng. bạn dường như muốn bố trí biểu đồ mặc định bằng thuật toán mà sau đó bạn có thể sửa đổi. đề nghị bạn chỉnh sửa câu hỏi của bạn để phản ánh điều đó. bằng cách tin rằng graphviz có thể được sử dụng để tạo tọa độ mà sau đó có thể đưa vào trình chỉnh sửa biểu đồ. tái chỉnh sửa biểu đồ GEF, ví dụ: bố trí biểu đồ chuyên nghiệp cho GEF
vzn

Câu trả lời:


1

bạn có vẻ muốn như sau

  • một thuật toán bố trí đồ thị. nhiều thuật toán tiêu chuẩn thường sử dụng các phương pháp dựa trên lực trong đó các nút được kết nối bằng "lò xo" hấp dẫn và trạng thái cân bằng / năng lượng thấp có được thông qua một số lần lặp (của phương trình vi phân liên quan đến lực được xây dựng trên toàn cầu). đầu ra của thuật toán là một tập hợp tọa độ 2-d hoặc 3-d cho các nút và (thường) các cạnh.
  • khả năng sửa đổi kết quả của thuật toán đó. thường được gọi là "trình soạn thảo đồ thị". điều này bắt đầu với tọa độ từ thuật toán bố trí và cho phép điều chỉnh.

lại (1) phần mềm hàng đầu dường như là graphviz . re (2) xem ví dụ câu hỏi này "trình soạn thảo biểu đồ tốt nhất" trên mathoverflow là gì .

duyệt bộ sưu tập graphviz, đây là hai loại biểu đồ tương tự như những gì bạn muốn.

Sơ đồ ERđèn giao thông .

bạn nói bạn có hai loại cạnh. một cách đơn giản là có các cạnh được định hướng "hướng tới hoặc đi" như trong ví dụ về đèn giao thông. hoặc các cạnh có thể được dán nhãn theo hai cách như trong sơ đồ ER. cả hai ví dụ cho thấy hai loại nút khác nhau bằng cách sử dụng các hình dạng hoặc nhãn khác nhau hoặc tô bóng, vv các cách tiếp cận khác sẽ là sử dụng màu.

như mathoverflow Q / Như chỉ ra rằng có nhiều trình soạn thảo đồ thị. một std với graphviz là "dotty". xem ví dụ pdf "chỉnh sửa biểu đồ với dấu chấm " của Koutsofious.

một kỹ thuật khác để vẽ đồ thị, có thể là đồ thị lớn, là xem xét các thành phần cấu trúc, ví dụ như phân tách clique.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.