Thuật toán Karger

Bách khoa toàn thư mở Wikipedia
Bước tới: menu, tìm kiếm

Trong khoa học máy tínhlý thuyết đồ thị, thuật toán Karger là một thuật toán Monte Carlo để tìm lát cắt nhỏ nhất của một đồ thị vô hướng. Bài toán lát cắt nhỏ nhất yêu cầu tìm cách chia đồ thị làm hai phần sao cho số cạnh nối các đỉnh ở hai phần khác nhau là nhỏ nhất. Thuật toán được tìm ra bởi David Karger.

Thuật toán[sửa | sửa mã nguồn]

Ý tưởng chính của thuật toán là sử dụng phép hợp nhất hai đầu của một cạnh e trong đồ thị G = (V, E). Sau mỗi lần hợp nhất, số đỉnh của đồ thị giảm đi 1. Thuật toán sử dụng một chuỗi các phép hợp nhất các cạnh ngẫu nhiên của đồ thị. Xác suất chọn mỗi cạnh tỉ lệ với trọng số của nó. Thuật toán này là một thuật toán đệ quy. Trong mỗi tầng đệ quy, thuật toán hoạt động như sau. Thử hai lần độc lập nhau việc lặp đi lặp lại phép hợp nhất để giảm số đỉnh của G xuống  \left\lceil n / \sqrt{2} + 1 \right\rceil và gọi đệ quy để tính lát cắt nhỏ nhất trong đồ thị thu được. Sau đó, chọn kết quả tốt hơn trong hai lần gọi đệ quy và trả về giá trị đó.

Phép hợp nhất[sửa | sửa mã nguồn]

Trong mỗi lần thực hiện, phép toán này hợp nhất hai đỉnh xy của một cung e thành một đỉnh mới v_e kề với tất cả các đỉnh kề của xy. Định nghĩa cụ thể là như sau.

Cho một đồ thị G = \left (V, E \right)e = \lbrace x, y \rbrace \in E, kết quả phép hợp nhất hai đỉnh kề với cạnh e (kí hiệu G/e = \left (V', E'\right)) là một đa đồ thị định nghĩa như sau:

V' = \left(V \setminus \lbrace x, y \rbrace \right) \cup \lbrace v_e \rbrace

và:

E' = \lbrace \lbrace v, w \rbrace \in E \mid \lbrace v,w \rbrace \cap \lbrace x,y \rbrace = \emptyset \rbrace \cup \lbrace \lbrace v_e,w \rbrace \mid 
\lbrace x,w \rbrace \in E \setminus \lbrace e \rbrace hoặc  \lbrace y,w \rbrace \in E \setminus \lbrace e \rbrace  \rbrace

Có thể chứng minh phép toán này không làm giảm nhưng có thể làm tăng giá trị lát cắt nhỏ nhất.

Thời gian thực hiện[sửa | sửa mã nguồn]

Thuật toán Karger là thuật toán ngẫu nhiên nhanh nhất hiện nay cho việc tìm lát cắt nhỏ nhất, với thời gian chạy O(|V|2 log3|V|). Để chứng minh điều này, tác giả chỉ ra cách thực hiện chuỗi các phép hợp nhất để giảm kích thước G xuống  \left\lceil n / \sqrt{2} + 1 \right\rceil đỉnh trong thời gian O(n^2). Do đó thời gian chạy của thuật toán là  T(n) = 2 \left(n^2 + T\left(\left\lceil n / \sqrt{2} + 1 \right\rceil \right) \right) . Phương trình này cho kết quả T(n)= O(n^2 log(n)) . Sau mỗi lần thực hiện thuật toán, xác suất tìm ra lát cắt nhỏ nhất là \Omega(1/ log(n)). Nếu thực hiện thuật toán O(log^2(n)) lần thì xác suất không tìm ra lát cắt nhỏ nhất giảm xuống O(1/n2).

Tài liệu tham khảo[sửa | sửa mã nguồn]

  1. David R. Karger (tháng một 1993). "Global Min-cuts in RNC and Other Ramifications of a Simple Mincut Algorithm" Proceedings of the 4th Annual ACM-SIAM Symposium on Discrete Algorithms. 
  2. Karger, David R.; Stein, Clifford (1996), “A New Approach to the Minimum Cut Problem”, Journal of the ACM 43 (4): 601–640