Thuật toán phân tích năng lượng của người dùng trong bộ nhớ

Thuật toán kiểu Ford-Karp là một thực hiện cụ thể phương pháp Ford-Fulkerson để tính dòng chảy tối đa trong một mạng lưới. Trong khi phương pháp Ford-Fulkerson gốc sử dụng một tìm kiếm tùy ý để tăng tốc đường (có thể dẫn đến thời gian cấp số nhân trong trường hợp bệnh), thì ông BAR việc này thực hiện một cuộc tìm kiếm dựa trên BFS, đảm bảo rằng con đường tăng tốc nhanh nhất (theo số cạnh). Bảo đảm này tạo ra một thời gian xác định rõ ràng và làm cho thuật toán chạy theo góc của lý thuyết dòng chảy.

Mô tả và thuộc tính khoá

Cho một đồ thị chỉ đạo G = (V, E) ) ) với một nguồn , chìm [FLT:] , và khả năng : E [FL:] [FLT:] [FLT:], thuật toán bổ sung [FL:7], các thuật toán-Kr] như sau::

  1. Khởi động dòng chảy [FLT: 0]f(e) = 0 [FLT: 1] cho mọi cạnh.
  2. Xây dựng đồ thị còn sót lại G f ) ) (kể cả các cạnh sau với khả năng tương đương với dòng chảy hiện tại).
  3. Chạy BFS trên G ) [FLT: 1] ) ) từ ) để tìm đường dẫn ngắn nhất [FLT:] [FLT: 7) [FLT: 7) [FLT: 7] (được bảo đảm bằng số cạnh).
  4. Nếu không có đường dẫn nào tồn tại, hãy chấm dứt; dòng chảy hiện thời là tối đa.
  5. Nếu không, hãy xác định dung tích cổ chai dọc theo đường đi (phần còn sót lại của tuyến tiền sử).
  6. Lượng oxy chảy theo đó dọc theo con đường và cập nhật các khả năng còn thiếu.
  7. Nhắc lại từ bước 2.

Việc sử dụng BFS đảm bảo rằng mỗi đường tăng tốc tìm thấy là một đường dẫn ngắn nhất trong đồ thị còn thừa. Một tính chất quan trọng xuất hiện: khoảng cách (theo cạnh) từ [FLT: 0] ) [FLT: 1] đến ) t [FLT:] trong đồ thị lỏng] không bao giờ giảm và tăng chặt mỗi [FL:4] [FL:] [FL:] [FL:]] [FL:]] [FL:]]. Điều này dẫn trực tiếp đến sự phức tạp.

Phân tích độ phức tạp

Thời gian chạy của mỗi BFS là cho các đồ thị dạng tách rời điển hình [V + E] ] [vì mỗi cách tăng tốc độ trong trường hợp này tăng tốc độ. Vì mỗi cách tăng lượng mưa ít nhất (một cạnh chai), và mỗi cạnh có thể bão hòa ở mức [FT] [FL] [FT] [FT] [FT] [FL] [FT] [FT] [FT] [FL] [FT] [FL],],] tối thiểu [FL] chi phí tối thiểu [t].

Chính xác hơn, sự phân tích tiêu chuẩn cho thấy rằng số lượng tăng [FLT:] [FLT:], vậy thời gian tổng quát O [V E2) [hoặc [V] [V] [V] * E+E][FT]][FL:5]] [FL:]] để đạt mức độ trọn vẹn. Đối với đồ thị dày đặc [FL: 6] [FL: 2] [FL:] [FT], [V] này [V], [V], [V],], [V],] thường xuyên là] cho các mạng lưới, hoặc nhiều hơn là:], khi mạng lưới thường xuyên hơn.

So sánh với thuật toán luồng tối đa khác

Thuật ngữ ăn uống

Thuật toán của Dinic cũng dùng BFS để xây dựng một biểu đồ cấp độ, nhưng sau đó cho phép nhiều đường đi tăng tốc trong một giai đoạn bằng đồ thị DFS. Tính năng này giảm [FLT: 0] V [FLT:] ) [từ mức độ tăng tốc độ] [FLT] [từ khi mức độ tăng trưởng]. Tính phức tạp tổng quát là [FLT2] [V] [V2] [V] [FLT] [FLT:], [FLT],], [T],], bản dịch sát nhất là], vì nó truyền nhiều đường đi cùng một lúc, vì nó chạy ra nhiều đường dẫn đến các đường dẫn thực tiễn, vì nó chạy ra cùng một lúc.

Thuật toán đẩy- nhãn

Các phương pháp đẩy, như thuật toán chung hay biến thể cao nhất, đạt được O [V2 V2] hoặc [FLT:]] O [FLT: 2]] [FLT - T - T - x ] giới hạn. Họ làm việc bằng cách đẩy dòng dọc theo các cạnh thích hợp và nhãn hiệu để duy trì một nhãn hợp lệ. Những thuật toán này thường phức tạp hơn để thực hiện nhanh hơn, đặc biệt là chạy trong đồ thị lớn, đặc biệt cho đồ thị. Thuật toán thúc đẩy- nhãn cao nhất được dùng trong việc cạnh tranh và giải quyết các thuật toán thực tế.

Một biến thể quan trọng khác là thuật toán [FLT:] co dãn , nơi [FLT:] [FLT:] [FLT:] [FLT] [FLT:] [FLT:]] [FLT:] [FLT:] [FLT:]] [FLT:] [FLT:]] khả năng tối đa [FL:5], tính năng này cũng đơn giản hơn áp dụng hiệu lực, nhưng cũng đơn giản hơn nhãn.

Tại sao người máy-Karp vẫn quan trọng

Mặc dù chậm hơn Dinic và đẩy nhãn, nhưng phần lớn máy tính nằm trong danh sách các công cụ truyền tải khoa học có giá trị trước khi di chuyển sang phương pháp nâng cao hơn. Hơn nữa, để đơn giản hóa và chứng minh thời gian chạy đa thức trung bình (phụ thuộc vào sự đơn điệu và cạnh ngắn nhất), sự khác biệt thực tế có thể không đáng kể, đặc biệt nếu đồ thị có lợi và lợi nhuận thấp.

Những trường hợp thực tế

Trong các ứng dụng thế giới thực, sự lựa chọn thuật toán phụ thuộc rất nhiều vào hạn chế vấn đề.

  • tương ứng với ): tắt cho thuật toán Hopcroft–Karp khi khả năng là đơn vị và mạng lưới là lưỡng đảng? [FT] Thực ra không – Hopcroft–Krp là một thuật toán tận tụy [FLT2] O [EFL:] [FLT: thời gian [FT:]; tuy nhiên, phần lớn các dữ liệu trong đồ thị bi-ater] có giá trị [FT] [FT].
  • Kỹ thuật xổ số ): trong giao thông và mạng đường, dòng chảy thường lớn và nhỏ.
  • Thuật toán phân đoạn ): đồ thị cắt các thuật toán cho tầm nhìn máy tính thường dựa trên các tính toán tối đa/ cắt cắt cắt. Thuật toán Boykov-Kolmorov, một phương pháp tăng cường ngoại cảm, thường vượt quá các thuật toán chung cho các đồ thị kiểu lưới, nhưng các phần tử khác có thể được sử dụng cho các vấn đề nhỏ hơn.
  • Khi tính đơn giản và sự sửa đổi là quan trọng nhất trên tốc độ sống, thì phần mềm-Karp là một sự lựa chọn an toàn.

Hiệu quả thực hiện thực tế

Benchmarks trên đồ thị ngẫu nhiên cho thấy rằng các bộ tăng tốc thường bị hạn chế bởi giá trị dòng tối đa, có thể nhỏ. Tuy nhiên, đối với mạng độ bền cao, thuật toán có thể giảm. Lấy thí dụ, hãy xem một mạng có khả năng lớn; dòng chảy có thể rất lớn, dẫn đến nhiều sự tăng cường. Trong trường hợp như vậy, ăn hoặc tăng cường.

Suy xét

Khi thực hiện khả năng quản lý đồ thị kiểu Karp, cần thiết phải cẩn thận. Hiển thị cả hai cạnh trước lẫn sau cho phép tăng tốc và quay lại dễ dàng. Dùng danh sách độ phức tạp với con trỏ để đảo ngược (hoặc lưu lại cạnh bị indices) đơn giản hóa bản cập nhật. BFS cũng phải ghi lại những người tiền nhiệm để tái tạo lại đường dẫn tăng tốc. Dùng bộ nhớ [FT: 0] (V) [FL: 0] [FL: 1], tương tự các thuật toán khác.

Cách tối thiệu bao gồm:

  • Sớm kết thúc nếu BFS không thể đạt .
  • Sử dụng các số nguyên khả năng và dòng chảy để tránh các vấn đề điểm nổi.
  • Phân tách nhiều phần nếu đồ thị có nhiều cạnh song song (mặc dù ít phổ biến hơn).

Đối với mạng lưới rất lớn, hãy xem xét sử dụng một BFS năng động để cập nhật các khoảng cách tăng dần, nhưng điều này thường làm tăng sự phức tạp mà không cần những lợi ích đáng kể cho người khác.

Trở lại phương pháp Ford-Fulkerson nguyên thủy

Jack chăm sóc con tin và Richard Karp đã công bố thuật toán của họ vào năm 1972, chứng minh rằng sử dụng BFS cung cấp một thuật toán dòng thời gian tối đa. Trước đó, phương pháp Ford-Fulkerson (1956) đã không chỉ định quy tắc chọn đường, và nó được biết rằng những sự lựa chọn sai có thể dẫn đến thời gian tăng gấp hai lần. Công việc của ông chăm sóc của ông ấy là một bước cơ bản trong việc phát triển các thuật toán đa thức mạnh mẽ cho mạng. Giấy [FL: 0] cải thiện định hướng theo định hướng trong Agoticicency Egiency" [FL: một tài liệu tham khảo cổ điển điển hình.

Mở rộng và biến thể

Nhiều người trong nhóm của nhà xác, bao gồm:

  • Phiên bản co dãn ): Thay vì luôn luôn tăng cường theo đường ngắn nhất, thuật toán này hoạt động với tham số ) ) [FLT:] và chỉ xem xét các cạnh với khả năng không hạn chế BAR . Điều này tạo ra một bản ghi [FL:4] [N] [NT] [NLT] [NT] thuật toán UL: 5.
  • Không có khả năng tối ưu hóa ): khi tất cả các khả năng là 1, thuật toán đường dẫn BFS tăng cường chuyên gia để thuật toán Hopcroft–Karp, mặc dù các thứ sau sử dụng cẩn thận một BFS/DFS để đạt được [E] [FLT:].
  • Thuật toán giữ luồng tích phân khi khả năng là tích phân, làm cho nó phù hợp với các vấn đề tổ hợp.

Kết luận

Thuật toán kiểu máy ảnh (FLT:1) là một phương pháp đáng tin cậy và có khả năng giải quyết vấn đề lưu thông tối đa. Nó [FLT: 0] [V E2) [Các phương pháp đẩy hoặc nhãn thời gian xấu nhất thường được ưa thích. Tuy nhiên, đối với các thiết lập nhỏ, vấn đề nhỏ, hoặc đường dây đơn giản hóa đa thức và bằng chứng rõ ràng của thời gian đa thức đã được củng cố vị trí của nó trong sách giáo khoa thuật thuật. Đối với hệ thống thực cần thiết hiệu suất cao, thuật toán của Dinic hoặc nhãn áp dụng cho các mục đích riêng của công cụ đẩy hoặc nhãn. Tuy nhiên, đối với các vấn đề giáo dục, như một đường cong cơ sở để xác định chính xác, một công cụ cho phép tính chất của hệ thống K.

Có thể tìm thấy thêm về thuật toán dòng chảy tiên tiến bài Wikipedia ) ) và trong sách giáo khoa cổ điển Introding to Algrim . Để phân tích kỹ thuật toán truyền mạnh hơn, xem Ghi chú thực hiện [FLT] [FLT:].