2011-11-16 44 views
7

Chúng tôi có biểu đồ tuần hoàn yếu.Thuật toán thời gian tuyến tính để làm cho biểu đồ được kết nối mạnh mẽ

Ngoài ra, chúng tôi có một bộ A giữ các đỉnh của G có độ bằng 0 và bộ B giữ các đỉnh có độ lệch bằng 0. (kích thước của A nhỏ hơn kích thước của B).

Trên hết, chúng tôi cũng biết rằng nếu các mục trong A và B có thứ tự cụ thể (ví dụ: A = a1, a2, ..., am và B = b1, b2, ..., bn) a DFS bắt đầu tại ai thăm bi (1≤ i ≤ m).

Có thể thiết kế một thuật toán thời gian tuyến tính giúp G được kết nối mạnh mẽ bằng cách thêm vào ít cạnh nhất có thể không?

+0

-> math.stackexchange.com? – Vlad

+0

"DFS bắt đầu tại ai thăm bi (1≤ i ≤ m)" Không hiểu. Có (1) các phần tử lặp lại trong A và rỗng trong B OR (2) đồ thị của bạn có một thuộc tính đặc biệt, bắt đầu từ đỉnh bằng không, chúng ta có thể đạt được một đỉnh của một số không (3) (đưa ra lời giải thích của bạn trong trường hợp đó). –

Trả lời

4

Thêm arcs b j -> một j + 1 cho j = 1, ..., m-1 và vòng cung b j -> một cho j = m, ... , n.

Đồ thị kết quả được kết nối mạnh mẽ vì và của b của một kết nối mạnh mẽ bởi các vòng cung gia tăng và các đường dẫn từ một i để b i và, đối với mỗi nút x, có tồn tại i, j mà có tồn tại đường dẫn trong đồ thị ban đầu từ một số i đến x và đường dẫn trong đồ thị ban đầu từ x đến b j.

Chúng tôi không thể sử dụng vòng cung ít hơn, bởi vì một vòng cung đi phải được thêm vào mỗi b , ..., b n.

+0

Rất đơn giản. Nhưng có câu hỏi. Có sự mơ hồ trong bản gốc ** Tôi hỏi về **. Nếu bạn đã định hướng biểu đồ tuần hoàn trong đó phiên bản không được chiếu của nó là biểu đồ kết nối VÀ số đỉnh với số không bằng (A) nhỏ hơn hoặc bằng số đỉnh với số không ở mức độ (B) không có nghĩa là bạn có kết hợp giữa A và B. ** Nếu bạn có thể chứng minh điều đó - DO IT. Với thực tế này, nó không phải là một câu trả lời **. –

+0

@ Wisdom's Wind Tại sao tôi phải chứng minh rõ ràng một giả thuyết trong từ ngữ câu hỏi hiện tại là gì? – Per

+0

Có thể có vấn đề với giải pháp này. Hãy xem xét một đồ thị gồm có hai vòng, X và Y, và một điểm bị cô lập.Có một liên kết từ X đến Y và từ Y đến điểm cô lập. Điểm bị cô lập là thành viên duy nhất của tập B. Nó được kết nối như một đồ thị tuần hoàn, nhưng không được kết nối chặt chẽ, bởi vì bạn không thể lấy từ Y đến X, hoặc từ nút bị cô lập thành Y. Vì A không có phần tử, đề xuất của bạn sẽ không thêm bất kỳ liên kết nào. – mcdowella

1

Edited - Sau không tạo ra giải pháp với ít nhất liên kết:

Bạn có thể chạy http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm trong thời gian tuyến tính. Tôi đề nghị bạn làm điều này và lưu ý rằng "không có thành phần được kết nối chặt chẽ nào sẽ được xác định trước bất kỳ người kế nhiệm nào". Do đó thành phần mạnh đầu tiên trong biểu đồ không được là người kế thừa của bất kỳ thành phần nào khác. Tôi đề nghị rằng mỗi khi bạn phát ra một thành phần kết nối mạnh mẽ mà không có người kế nhiệm, thì bạn thêm một liên kết kết nối nó với thành phần đầu tiên này. Tôi đề nghị bạn cũng nên thêm một liên kết mỗi lần bạn khởi động lại thuật toán Tarjan với một lời gọi không đệ quy tới strongconnect(), kết nối thành phần đầu tiên với đỉnh bạn đang khởi động lại.

Với các liên kết này, bạn có thể lấy từ thành phần mạnh đầu tiên đến mọi thành phần khác và từ mọi thành phần khác đến thành phần mạnh đầu tiên. - tiếc là điều này không nhất thiết phải là giải pháp với các liên kết ít nhất - xem bình luận thứ hai của Per bên dưới.

+0

Làm thế nào để bạn xử lý nhiều hơn một thành phần mà không có người tiền nhiệm? – Per

+0

Ý định của tôi là các thành phần phụ không có người tiền nhiệm là các thành phần mà thuật toán Tarjan khởi động lại với các cuộc gọi không đệ quy, để chúng có được các liên kết từ thành phần đầu tiên và có thể truy cập được từ nó. Những người kế vị của họ, hoặc chính họ, có được liên kết đến thành phần đầu tiên, hoàn thành chu kỳ. Tuy nhiên kể từ khi tôi nêu ra câu trả lời của bạn là sai, có lẽ tôi cũng sai ở đây? – mcdowella

+0

Nếu tôi hiểu thuật toán của bạn một cách chính xác, thì trên biểu đồ {a1-> b1, a1-> b2, a2-> b2}, thành phần mạnh {a1} có thể là thành phần đầu tiên, tiếp theo là {b1} và {b2}, vì vậy b1 và b2 nhận được liên kết quay lại a1. Việc kết nối a1 và a2 yêu cầu thêm một liên kết với tổng số là 3, so với 2 yêu cầu để kết nối b1-> a2, b2-> a1. – Per

Các vấn đề liên quan