Thuật toán Karger

Trong khoa học máy tính và lý 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. Ý 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 {\displaystyle e} trong đồ thị G = ( V , E ) {\displaystyle 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 {\displaystyle G} xuống ⌈ n / 2 + 1 ⌉ {\displaystyle \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ị đó. Trong mỗi lần thực hiện, phép toán này hợp nhất hai đỉnh x và y của một cung e thành một đỉnh mới v e {\displaystyle v_{e}} kề với tất cả các đỉnh kề của x và y. Định nghĩa cụ thể là như sau. Cho một đồ thị G = ( V , E ) {\displaystyle G=\left(V,E\right)} và e = { x , y } ∈ E {\displaystyle e=\lbrace x,y\rbrace \in E} , kết quả phép hợp nhất hai đỉnh kề với cạnh e {\displaystyle e} (ký hiệu G / e = ( V ′ , E ′ ) {\displaystyle G/e=\left(V',E'\right)} ) là một đa đồ thị định nghĩa như sau: V ′ = ( V ∖ { x , y } ) ∪ { v e } {\displaystyle V'=\left(V\setminus \lbrace x,y\rbrace \right)\cup \lbrace v_{e}\rbrace } và: E ′ = { { v , w } ∈ E ∣ { v , w } ∩ { x , y } = ∅ } ∪ { { v e , w } ∣ { x , w } ∈ E ∖ { e } {\displaystyle 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 { y , w } ∈ E ∖ { e } } {\displaystyle \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. 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 {\displaystyle G} xuống ⌈ n / 2 + 1 ⌉ {\displaystyle \left\lceil n/{\sqrt {2}}+1\right\rceil } đỉnh trong thời gian O ( n 2 ) {\displaystyle O(n^{2})} . Do đó thời gian chạy của thuật toán là T ( n ) = 2 ( n 2 + T ( ⌈ n / 2 + 1 ⌉ ) ) {\displaystyle 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 l o g ( n ) ) {\displaystyle 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à Ω ( 1 / l o g ( n ) ) {\displaystyle \Omega (1/log(n))} . Nếu thực hiện thuật toán O ( l o g 2 ( n ) ) {\displaystyle 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). David R. Karger (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. Karger, David R.; Stein, Clifford (1996), “A New Approach to the Minimum Cut Problem”, Journal of the ACM, 43 (4): 601–640