Làm thế nào để giảm số lượng các cạnh chéo trong một sơ đồ?


9

Tôi đang làm việc trên một trình soạn thảo sơ đồ. Sơ đồ hiển thị hình dạng 2D ( nút ) được kết nối với đầu nối ( cạnh ).

Tôi muốn thêm một thao tác, đưa ra một lựa chọn các nút, "gỡ rối" chúng: nó định vị lại chúng để giảm số cạnh, nếu có thể (và sẽ ổn nếu các cạnh sẽ được vẽ bằng các điểm uốn cong) .

Vì vậy, tôi muốn một thuật toán đồ thị, đưa ra một nhúng đồ thị ( cấu trúc liên kết ) và một tập hợp con của các nút của nó, sửa đổi việc nhúng ( cấu trúc liên kết của nó ) trên các nút đó để giảm thiểu số lượng các cạnh chéo.

Từ việc đọc về đồ thị đỉnh và duyệt Cabello và Mohar (2013) , tôi cho rằng vấn đề này là NP-hard. Vì vậy, tôi sẽ hài lòng với thuật toán tham số hóa (ví dụ về số cạnh chéo) có độ phức tạp thời gian đã biết, đa thức, cho bất kỳ giá trị tham số đã cho nào. Điều này có vẻ khả thi, nhưng tôi không thấy dễ dàng tự mình nghĩ ra một thuật toán như vậy.

Câu hỏi:

  • Tôi tìm một thuật toán như vậy ở đâu?
  • Nó tồn tại?
  • Trong phần mềm hiện có?
  • Có bất kỳ kinh nghiệm thực tế quan trọng với một hoạt động như vậy? (Những gì có vẻ tốt trong lý thuyết có thể không tốt trong thực tế, hoặc ngược lại.)

(Tôi không chắc chắn nơi tốt nhất để đặt câu hỏi này: ở đây, trên StackOverflow hoặc MathOverflow?)


1
Tôi cho rằng câu hỏi có thể phù hợp hơn với StackOverflow, nhưng tôi đã nhận thấy rằng những câu hỏi tương tự trên đó có câu trả lời không thỏa mãn. Tôi sẽ theo dõi với một câu trả lời sẽ giúp bạn về kết thúc lý thuyết, nhưng tốt nhất là câu hỏi của bạn sẽ được di chuyển đến đó.
mdxn

Có một công việc rất sâu sắc đang được thực hiện ở đây: oblang.tuwien.ac.at/cd/ebner/ebner05da.pdf
Dschoni

Cảm ơn! Không chỉ vậy, đây rõ ràng là một bài trình bày rất dễ đọc về vấn đề và khảo sát một số phương pháp tiếp cận nổi tiếng.
Revierpost

Câu trả lời:


8

Tính toán số lượng vượt tối thiểu tuyệt đối là, như bạn đã quan sát, . Quá trình vẽ các biểu đồ nên ít nhất là khó như vậy.NP-hard

Vấn đề đặt ra trong câu hỏi thực sự khó hơn và liên quan nhiều hơn những điều trên. Bạn đang xem xét các nút biểu đồ có kích thước và hình dạng nhất định đồng thời giới hạn kích thước (diện tích) của kết quả. Ngoài ra, một khái niệm chưa được xác định về thẩm mỹ là mong muốn. Rõ ràng chúng tôi muốn một heuristic cho điều này, không sử dụng mức tối thiểu tuyệt đối trong trường hợp chung. Số lượng các nút gặp phải trong một ứng dụng như vậy có thể không lớn trong trường hợp trung bình. Vẽ phiên bản cắt cạnh tối thiểu của biểu đồ có thể khả thi đối với kích thước nhỏ.

Tài nguyên:
Bạn có thể quan tâm đến các tài nguyên sau, đặc biệt với tài nguyên đầu tiên:

Có rất nhiều tài nguyên khác, quá. Những điều này sẽ giúp bạn bắt đầu.

Những suy nghĩ và quan sát bổ sung:

Đây là một ý tưởng để giải quyết các vấn đề liên quan đến hình dạng và kích thước của các nút. Đưa ra biểu đồ (các nút nhỏ vô hạn), mở rộng từng nút trong khi "đẩy" hoặc uốn cong ra khỏi đường (ví dụ: sử dụng spline trong khi thực thi giới hạn về độ gần). Bạn cần phải làm điều này với các cạnh và nút khác cản trở nó, điều này có thể bắt đầu một phản ứng dây chuyền. Nhìn vào cách cân bằng có thể được tính toán một cách hiệu quả (ví dụ cấu trúc phân tử). Nếu bạn không thể có được hình dạng của một nút đến kích thước mong muốn, thì hãy chia tỷ lệ toàn bộ sơ đồ.

Một người dùng có thể tận hưởng kết quả của một thuật toán ngẫu nhiên. Họ có thể sử dụng tính năng của bạn nhiều lần cho đến khi họ có thứ họ thích. Tránh tính toán dư thừa trong trường hợp này (không cần phải tính lại một số chéo).


Tôi đã thêm cấu trúc liên kết vào câu hỏi của tôi một cách cụ thể để tránh các cuộc thảo luận về thẩm mỹ. Điều đó quan trọng, nhưng tôi không nghĩ chúng ảnh hưởng nhiều đến vấn đề cơ bản - Tôi nghĩ rằng chúng có thể được xử lý theo một bước riêng, sau khi điều chỉnh cấu trúc liên kết của các nút (tức là các nút được bao quanh bởi các nút khác).
rebierpost

Lần đầu tiên tôi sử dụng Graphviz hơn 15 năm trước; Tôi sử dụng nó khoảng một lần mỗi tuần cho tất cả các loại biểu đồ. Tôi không quá ấn tượng với kết quả của nó và tôi hiểu rằng thật khó để làm tốt hơn nhiều.
Revierpost

Tôi thường truy cập graphviz.org và tôi đã đọc một số bài báo mà họ đề cập đến. Nhưng tôi chưa gặp câu trả lời cho câu hỏi cụ thể này và nó không nằm trong mô tả công việc của tôi để làm quen với văn học. Đó là lý do tại sao tôi hỏi nó ở đây.
rebierpost

Cảm ơn bạn đã tham khảo mặc dù - Tôi nhận thấy đây vẫn là nghiên cứu hiện tại .
rebierpost

Điều đầu tiên tôi sẽ thử là một thuật toán tầm thường (và do đó không nhất thiết phải hữu ích) đại khái dựa trên ý tưởng của cô Shabbeer. Cảm ơn một lần nữa.
rebierpost
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.