Tính chính xác của thuật toán Thành phần được kết nối mạnh mẽ cho đồ thị có hướng


8

Tôi đã đọc về thuật toán để tìm các thành phần được kết nối mạnh trong đồ thị có hướng . Nó xem xét hai DFS Tìm kiếm và bước thứ hai được transposing đồ thị gốc .G=(V,E)GT

Thuật toán như sau:

  1. Thực hiện DFS trên (bắt đầu từ một đỉnh bắt đầu tùy ý), theo dõi thời gian cần thiết của tất cả các đỉnh.G
  2. Tính toán chuyển vị,
  3. Thực hiện DFS trên , bắt đầu từ đỉnh với thời gian cần thiết mới nhất, tạo thành một cây bắt nguồn từ đỉnh đó. Khi một cây hoàn thành, chuyển sang đỉnh không mong muốn với thời gian hoàn thành mới nhất tiếp theo và tạo thành một cây khác bằng DFS và lặp lại cho đến khi tất cả các đỉnh trong được truy cập.GTGT
  4. Xuất các đỉnh trong mỗi cây được hình thành bởi DFS thứ hai như là một thành phần được kết nối mạnh mẽ riêng biệt.

Câu hỏi của tôi là :

  1. Trực giác đằng sau bước giữa của máy tính chuyển vị này là gì?

Câu trả lời:


10

Transposing ma trận adjecency khôngMột

Một[Tôi,j]= =1MộtT[j,Tôi]= =1 .

Về mặt đồ thị, điều đó có nghĩa là

bạnGvvGTbạn .

Nói cách khác, hoán vị đảo ngược hướng của tất cả các cạnh. Lưu ý rằng có các thành phần mạnh mẽ tương tự như . GGTG

Thuật toán bạn đang xem là thuật toán của Kosaraju . Hãy cẩn thận với khái niệm "thời gian hoàn thành" của bạn: đó không phải là thời gian nút được truy cập, nhưng khi tìm kiếm đã đi qua sơ đồ con có thể truy cập từ nó. Wikipedia đề xuất sử dụng một ngăn xếp để quản lý điều này, mà tôi nghĩ là một ý tưởng tốt.

Tại sao nó đúng khi sử dụng , bằng trực giác? Giả sử x là nút đầu tiên của thành phần mạnh được DFS truy cập.GTx

  • DFS trên chuyển ngang qua toàn bộ thành phần mạnh của x sau khi đạt x , cộng với một số khác thông qua các cạnh rời khỏi thành phần.Gxx
  • x
  • GGTxGTxGTxGT

2

Sự hiểu biết của tôi:

Khi bạn thực hiện DFS trên bất kỳ biểu đồ DAG nào theo dõi thời gian hoàn thành, điều duy nhất bạn có thể đảm bảo là nút chìm sẽ không bao giờ có thời gian hoàn thiện cao nhất [1] . Nhưng đồng thời, thời gian hoàn thiện thấp nhất có thể xuất hiện trong bất kỳ thành phần nào của biểu đồ . Do đó, nó làm cho loại thời gian hoàn thành thấp nhất trở nên vô dụng.

Về cơ bản, thực tế [1] cũng vô dụng trong biểu đồ gốc , nhưng nó rất hữu ích trong biểu đồ chuyển vị . Khi bạn chuyển vị, câu lệnh này dẫn đến những điều sau đây:

Trong biểu đồ chuyển vị, nút bị chìm trong biểu đồ không chuyển vị sẽ luôn có thời gian hoàn thiện cao nhất .

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.