Đồ thị dư trong lưu lượng tối đa


14

Tôi đang đọc về vấn đề lưu lượng tối đa ở đây . Tôi không thể hiểu được trực giác đằng sau Biểu đồ dư. Tại sao chúng ta xem xét các cạnh trở lại trong khi tính toán dòng chảy?

Bất cứ ai có thể giúp tôi hiểu khái niệm về đồ thị dư?

Làm thế nào để thuật toán thay đổi trong đồ thị vô hướng?

Câu trả lời:


28

Trực giác nhìn thấy biểu đồ dư trong bài toán Lưu lượng cực đại được trình bày rất tốt trong bài giảng này . Giải thích như sau.

Giả sử rằng chúng tôi đang cố gắng giải quyết vấn đề luồng tối đa cho mạng (trong đó mỗi nhãn biểu thị cả luồng đẩy qua một cạnh và dung lượng của cạnh này):Gfe/cefeece

Chạy ví dụ

Một cách tiếp cận tham lam có thể là như sau:

  1. Chọn một đường dẫn tăng thêm tùy ý đi từ đỉnh nguồn đến đỉnh chìm sao cho ); nghĩa là, tất cả các cạnh trong đều có dung lượng khả dụng.s t ePst Pe(ePfe<ceP
  2. Đẩy lưu lượng tối đa có thể qua đường dẫn này. Giá trị của được xác định bởi nút cổ chai của ; đó là, cạnh với công suất tối thiểu có sẵn. Chính thức, .Δ P Δ = phút e P ( c e - f e )ΔΔPΔ=mineP(cefe)
  3. Chuyển đến bước 1 cho đến khi không còn đường dẫn tăng.

Đó là, tìm một đường dẫn có dung lượng khả dụng, gửi luồng dọc theo đường dẫn đó và lặp lại.

Trong , một thực thi có thể của heuristic ở trên tìm thấy ba đường dẫn tăng thêm , và , theo thứ tự này. Các đường dẫn này lần lượt đẩy 2, 2 và 1 đơn vị dòng chảy cho tổng lưu lượng là 5:P 1 P 2 P 3GP1P2P3

Có thể thực hiện phương pháp tham lam cho dòng chảy tối đa

Chọn đường dẫn theo thứ tự này dẫn đến một giải pháp tối ưu; tuy nhiên, điều gì xảy ra nếu chúng ta chọn trước (nghĩa là trước và )?P 1 P 2P3P1P2

Đường dẫn chặn

Chúng ta có được cái được gọi là luồng chặn : không còn đường dẫn tăng thêm nữa. Trong trường hợp này, tổng lưu lượng là 3, không tối ưu. Vấn đề này có thể được giải quyết bằng cách cho phép hoàn tác các thao tác (nghĩa là bằng cách cho phép dòng chảy được gửi ngược lại, hoàn tác công việc của các lần lặp trước): chỉ cần đẩy 2 đơn vị dòng chảy ngược từ đỉnh sang đỉnh như thế này:vwv

Dòng chảy ngược

Mã hóa các hoạt động hoàn tác được phép này là mục tiêu chính của biểu đồ dư .

Một đồ thị còn lại của mạng có cùng tập hợp các đỉnh như và bao gồm, cho mỗi cạnh :G G e = ( u , v ) GRGGe=(u,v)G

  • Cạnh trước có dung lượng , nếu .c e - f e c e - f e > 0e=(u,v)cefecefe>0

  • Cạnh ngược có dung lượng , nếu .f e f e > 0e=(v,u)fefe>0

Ví dụ, hãy xem xét biểu đồ còn lại thu được sau lần lặp đầu tiên của heuristic tham lam khi heuristic chọn trước (nghĩa là khi nó có luồng chặn):P 3RP3

Đồ thị dư

Lưu ý rằng thao tác hoàn tác đẩy 2 đơn vị luồng từ đến được mã hóa thành đường dẫn chuyển tiếp (tăng) từ đến trong :v s t RwvstR

Đường dẫn tăng trong biểu đồ dư

Nói chung:

Khi đường dẫn tăng thêm được chọn trong biểu đồ dư : RPR

  • Mỗi cạnh trong tương ứng với cạnh chuyển tiếp trong tăng lưu lượng bằng cách sử dụng cạnh có dung lượng khả dụng. GPG
  • Mọi cạnh trong tương ứng với một cạnh đi ngược lại trong hoàn tác dòng chảy được đẩy theo hướng thuận trong quá khứ. GPG

Đây là ý tưởng chính đằng sau phương pháp Fordk Fulkerson .

Phương pháp Fordk Fulkerson tiến hành theo cách chính xác giống như phương pháp tham lam được mô tả ở trên, nhưng nó chỉ dừng lại khi không còn đường dẫn tăng thêm trong biểu đồ dư (không phải trong mạng ban đầu). Phương pháp này đúng (nghĩa là luôn tính toán lưu lượng tối đa) vì biểu đồ dư thiết lập điều kiện tối ưu sau :

Cho một mạng , một luồng là tối đa trong nếu không có đường trong biểu đồ dư.f G s - tGfGst


Có một ví dụ trong đó các đường dẫn được thêm vào theo thứ tự độ dài ngắn nhất như được mô tả trong thuật toán Edmonds-Karp không? Trong ví dụ truy cập của bạn, đường dẫn đầu tiên có độ dài 3 trong khi đường dẫn ngắn hơn (tức là 2) có thể được tìm thấy và sẽ được thêm vào trước nếu chúng ta đang thực hiện Edmonds-Karp.
Roy

Bạn có thể chỉ cần làm cho tất cả các đường dẫn trong biểu đồ gốc có độ dài . Để làm như vậy, hãy chia đỉnh thành hai đỉnh và . Sau đó, chia thành và . Thêm hai cạnh và với công suất . Các cạnh ban đầu đã đi từ đến bây giờ sẽ đi từ đến . Chúng ta có thể có được cùng một dòng chặn nếu chúng ta chọn ban đầu đường dẫn chứa cạnh .3 v v 1 v 2 w w 1 w 2 ( v 1 , v 2 ) ( w 1 , w 2 ) 2 v w v 1 w 2 ( v 1 , w 2 )st3vv1v2ww1w2(v1,v2)(w1,w2)2vwv1w2(v1,w2)
Mario Cervera

Ví dụ của bạn có ý nghĩa. Chúng ta luôn có thể mở rộng biểu đồ trên các cạnh khác trong phần cắt để làm cho cạnh được đề cập nằm trên một trong những đường dẫn ngắn nhất.
Roy

3

Trực giác đằng sau mạng dư là nó cho phép chúng ta "hủy" một luồng đã được gán, tức là nếu chúng ta đã gán 2 đơn vị luồng từ đến , thì việc truyền 1 đơn vị luồng từ sang được hiểu là hủy một đơn vị của dòng chảy ban đầu từ đến .B B A A BABBAAB

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.