Tài liệu tham khảo cho thuật toán kiểm tra chu kỳ hỗn hợp đồ thị?


16

Biểu đồ hỗn hợp là một biểu đồ có thể có cả hai cạnh có hướng và không có hướng. Đồ thị vô hướng nằm bên dưới của nó có được bằng cách quên các hướng của các cạnh được định hướng và theo hướng khác, một hướng của đồ thị hỗn hợp có được bằng cách gán một hướng cho mỗi cạnh không được định hướng. Một tập hợp các cạnh tạo thành một chu kỳ trong một biểu đồ hỗn hợp nếu nó có thể được định hướng để tạo thành một chu trình có hướng. Một đồ thị hỗn hợp là chu kỳ khi và chỉ khi nó không có chu kỳ.

Đây là tất cả các tiêu chuẩn và có nhiều bài báo được công bố đề cập đến đồ thị hỗn hợp theo chu kỳ. Vì vậy, phải biết thuật toán sau đây để kiểm tra tính linh hoạt của đồ thị hỗn hợp:

Lặp lại các bước sau:

  • Loại bỏ bất kỳ đỉnh nào không có cạnh hướng đến và không có cạnh vô hướng nào, vì nó không thể là một phần của bất kỳ chu kỳ nào.
  • Nếu bất kỳ đỉnh nào không có cạnh được định hướng đến nhưng nó có chính xác một sự cố không có cạnh, thì bất kỳ chu kỳ nào sử dụng cạnh không bị chặn phải xuất hiện ở cạnh đó. Thay thế cạnh vô hướng bằng cạnh hướng đến.

Dừng lại khi không thể thực hiện thêm các bước. Nếu kết quả là một biểu đồ trống, thì biểu đồ ban đầu nhất thiết phải có tính chu kỳ. Mặt khác, bắt đầu từ bất kỳ đỉnh nào còn lại, người ta có thể quay lại qua biểu đồ, ở mỗi bước tiếp theo lùi qua một cạnh đến hoặc theo một cạnh không được xác định không phải là đỉnh được sử dụng để đạt đến đỉnh hiện tại, cho đến khi nhìn thấy một đỉnh lặp lại. Chuỗi các cạnh theo sau giữa lần lặp thứ nhất và lần thứ hai của đỉnh này (theo thứ tự ngược lại) tạo thành một chu kỳ trong biểu đồ hỗn hợp.

Bài viết Wikipedia về các biểu đồ hỗn hợp đề cập đến các biểu đồ hỗn hợp theo chu kỳ nhưng không đề cập đến cách kiểm tra chúng, vì vậy tôi muốn thêm vào đó một vài điều về thuật toán này, nhưng tôi cần một tài liệu tham khảo được xuất bản. Ai đó có thể cho tôi biết nó (hoặc bất kỳ thuật toán nào khác để kiểm tra tính linh hoạt) xuất hiện trong tài liệu không?


Điều gì xảy ra khi một đỉnh có hai cạnh không xác định và không có cạnh nào khác? Ví dụ trong một tam giác vô hướng. Tôi có nghĩa là làm các quy tắc trên bao gồm trường hợp này?
Mateus de Oliveira Oliveira

Bạn không thể làm bất cứ điều gì về một đỉnh như vậy cho đến khi một đỉnh khác áp dụng quy tắc định hướng một trong các cạnh. Nếu bạn gặp khó khăn với tình huống tồn tại các đỉnh như vậy và bạn không thể áp dụng bất kỳ quy tắc nào nữa, thì biểu đồ của bạn chứa một chu kỳ.
David Eppstein

Có lẽ nó sẽ làm cho nó rõ ràng hơn để xem xét những gì xảy ra trong trường hợp đồ thị của bạn không bị ảnh hưởng. Một cách để kiểm tra xem đó có phải là một khu rừng hay không là loại bỏ các lá (các đỉnh một độ) và các đỉnh bị cô lập cho đến khi bạn có được một đồ thị trống (đó là một khu rừng) hoặc một lõi 2 không cần thiết (một sơ đồ con trong đó tất cả các đỉnh có độ 2, trong đó nhất thiết phải chứa một chu kỳ). Thuật toán đồ thị hỗn hợp suy biến thành điều này trong trường hợp không xác định (ngoại trừ việc nó định hướng các lá thay vì loại bỏ chúng ngay lập tức), giống như nó suy biến thành thuật toán sắp xếp tôpô tiêu chuẩn trong trường hợp được định hướng.
David Eppstein

Không chắc chắn nếu bạn đã nhìn thấy: có một bài đăng trên cs.stackexchange mà hỏi một câu hỏi tương tự ref . Người trả lời đưa ra một thuật toán để tìm một chu kỳ trong một biểu đồ hỗn hợp bằng cách định hướng các cạnh vô hướng, từ chối biểu đồ nếu nó không tồn tại. Ngoài ra còn có giấy (s) về việc xác định liệu một đồ thị hỗn hợp là mạnh orientable ref nhưng kỳ lạ, không thể tìm thấy bất cứ điều gì trên thực tế việc tìm kiếm các thành phần kết nối trong đồ thị hỗn hợp.
Tuyền Lưu

Cảm ơn - không, tôi đã không nhìn thấy điều đó. Câu hỏi "tìm hướng để làm cho biểu đồ chứa chu trình có hướng" chắc chắn là cùng một câu hỏi và thuật toán trong câu trả lời có vẻ đúng. Nhưng không giống như những gì tôi mô tả, đó không phải là thời gian tuyến tính.
David Eppstein

Câu trả lời:


1

Tìm chu trình hỗn hợp trong đồ thị hỗn hợp tương đương với tìm chu trình có hướng cơ bản (có độ dài> = 3) trong đồ thị có hướng tương ứng. Biểu đồ có hướng tương ứng được lấy từ biểu đồ hỗn hợp bằng cách thay thế mỗi cạnh không được định hướng bằng hai cạnh được chỉ theo hướng ngược nhau. Chứng minh: (1) Mỗi ​​chu kỳ định hướng cơ bản (có độ dài> = 3) trong sơ đồ tương ứng trực tiếp với một chu trình hỗn hợp trong biểu đồ hỗn hợp. (2) Mỗi ​​chu kỳ hỗn hợp trong biểu đồ hỗn hợp chứa một chu trình hỗn hợp cơ bản có chiều dài> = 3 và mỗi chu kỳ như vậy tương ứng trực tiếp một chu kỳ định hướng cơ bản (có độ dài> = 3) trong biểu đồ có hướng. (1) và (2) cùng nhau chứng minh cả hai hướng của tuyên bố, qed. Vì vậy, chúng tôi đang tìm kiếm tài liệu tham khảo cách tính (tất cả?) Chu kỳ cơ bản (có độ dài> = 3) trong biểu đồ có hướng.

Các ý kiến ​​chỉ ra rằng cs.stackexchange chứa một số câu trả lời cho câu hỏi này, nhưng không rõ làm thế nào để sắp xếp các kết quả thành một câu trả lời súc tích. Bài đăng trên blog này dường như tóm tắt độc đáo các tài liệu tham khảo quan trọng nhất (nhất?):

Thuật toán của R. Tarjan

Thuật toán đầu tiên mà tôi đưa vào đã được R. Tarjan xuất bản năm 1973.

Enumeration of the elementary circuits of a directed graph
R. Tarjan, SIAM Journal on Computing, 2 (1973), pp. 211-216
http://dx.doi.org/10.1137/0202017

Thuật toán của DB Johnson

Thuật toán của DB Johnson từ năm 1975 cải thiện thuật toán của Tarjan bởi độ phức tạp của nó.

Finding all the elementary circuits of a directed graph.
D. B. Johnson, SIAM Journal on Computing 4, no. 1, 77-84, 1975.
http://dx.doi.org/10.1137/0204007

Trong trường hợp xấu nhất, thuật toán của Tarjan có độ phức tạp thời gian là O (n⋅e (c + 1)) trong khi thuật toán của Johnson được cho là giữ ở O ((n + e) ​​(c + 1)) trong đó n là số các đỉnh, e là số cạnh và c là số chu kỳ trong đồ thị.

Thuật toán của KA Hawick và HA James

Thuật toán của KA Hawick và HA James từ năm 2008 cải thiện hơn nữa về thuật toán của Johnson và loại bỏ những hạn chế của nó.

Enumerating Circuits and Loops in Graphs with Self-Arcs and Multiple-Arcs.
Hawick and H.A. James, In Proceedings of FCS. 2008, 14-20
www.massey.ac.nz/~kahawick/cstn/013/cstn-013.pdf
http://complexity.massey.ac.nz/cstn/013/cstn-013.pdf

Trái ngược với thuật toán của Johnson, thuật toán của KA Hawick và HA James có thể xử lý các biểu đồ chứa các cạnh bắt đầu và kết thúc tại cùng một đỉnh cũng như nhiều cạnh nối cùng hai đỉnh.

Bản thân việc kiểm tra tính chu kỳ dường như rất dễ dàng: Tính toán các thành phần được kết nối mạnh mẽ của biểu đồ. Bất kỳ chu kỳ (cơ bản) nào được chứa hoàn toàn trong một thành phần được kết nối mạnh mẽ. Một thành phần được kết nối mạnh mẽ chứa một chu trình cơ bản nếu nó không phải là một cây không bị ảnh hưởng.

Thuật toán đề xuất của David Eppstein cũng tính toán thêm một chu kỳ cơ bản làm bằng chứng và các thuật toán trên liệt kê tất cả các chu kỳ cơ bản. Bất kỳ đỉnh hoặc cạnh không có trong một chu kỳ cơ bản có thể bị xóa như một bước tiền xử lý để cải thiện tốc độ của các thuật toán trên. Thuật toán của David Eppstein có thể được sử dụng cho mục đích đó, nhưng ngay cả khi chỉ được sử dụng trên các thành phần được kết nối mạnh, nó sẽ không xóa mọi đỉnh hoặc cạnh có thể bị xóa. Nhưng ngay cả khi nó có thể được mở rộng để làm như vậy (tính toán cây cắt khối ít nhất cho phép xóa mọi đỉnh có thể bị xóa), không rõ liệu điều này có thực sự cải thiện tốc độ của các thuật toán trên hay không.


Có bất kỳ tài liệu tham khảo nào thậm chí đề cập đến đồ thị hỗn hợp? Tôi biết về việc tìm chu kỳ trong đồ thị có hướng. Câu hỏi của tôi là về việc mở rộng các thuật toán đó thành các biểu đồ hỗn hợp.
David Eppstein

@DavidEppstein Tìm chu trình hỗn hợp trong đồ thị hỗn hợp tương đương với tìm chu kỳ cơ bản (có độ dài> = 3) trong biểu đồ có hướng tương ứng. Tìm một tài liệu tham khảo cho tuyên bố đó có thể là thách thức, nhưng việc chứng minh tuyên bố này là đơn giản. Bây giờ tôi đã thêm tuyên bố và bằng chứng của nó vào câu trả lời. (Cũng đã thêm một nhận xét mà không cần chứng minh rằng tính toán cây cắt khối cho phép xóa mọi đỉnh có thể có thể bị xóa mà không ảnh hưởng đến các chu kỳ cơ bản.)
Thomas Klimpel

Ok, nhưng họ vẫn không theo thời gian tuyến tính.
David Eppstein

@DavidEppstein Bản thân việc kiểm tra tính chu kỳ được thực hiện trong thời gian tuyến tính. Nhưng bạn đã đúng, thời gian bất kỳ thuật toán nào trong số những thuật toán đó cần tìm mạch sơ cấp đầu tiên (có độ dài> = 3) không phải là tuyến tính (trong trường hợp xấu nhất). Tồi tệ hơn, hầu hết các triển khai thuật toán của Johnson dường như sử dụng nhiều hơn thời gian O ((n + e) ​​(c + 1)), khi áp dụng cho một vòng tròn có hướng duy nhất (với n đỉnh, cạnh e = n và c = 1 sơ cấp chu kỳ). Tuy nhiên, đây được dự định là một câu trả lời đúng, bởi vì bài báo của Johnson dường như là tài liệu tham khảo được trích dẫn nhiều nhất cho "tìm mạch cơ bản".
Thomas Klimpel
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.