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.