Phức tạp của thuật toán

Một phần của tài liệu Ứng dụng phương pháp Nhánh cận trong dạy và học chuyên tin tại trường THPT Chuyên Quảng Bình (Trang 65)

6. Tổng quan tài liệu tham khảo

3.1.3 phức tạp của thuật toán

Ta tiến hành tính toán độ phức tạp của bài toán như sau: Thủ tục rút gọn:

i) Khởi tạo : Sum := 0 ; (ii) Rút gọn dòng :

Với mỗi dòng r từ 1 đến n của ma trận C thực hiện : - Tìm phần tử crj = α nhỏ nhất trên dòng.

- Trừ tất cả các phần tử trên dòng đi một lượng α. - Cộng dồn : Sum := Sum + α

(iii) Rút gọn cột :

Với mỗi cột c từ 1 đến n của ma trận C thực hiện : - Tìm phần tử cic = α nhỏ nhất trên cột.

- Trừ tất cả các phần tử trên cột đi một lượng α. - Cộng dồn : Sum := Sum + α

Độ phức tạp tính toán thời gian T1(n): ( ) 2 ( )2 1 1 1 1 1 n n n r j r T n n n O n = = = =∑∑ ∑= = =

Gọi T2(n) là độ phức tạp tính toán thời gian của rút gọn cột. Gọi câu lệnh đặc trưng là tìm phần tử crj = α nhỏ nhất trên cột. Độ phức tạp tính toán thời gian T2(n):

( ) 2 ( )2 1 1 1 1 1 n n n i c i T n n n O n = = = =∑∑ ∑= = =

Gọi T(n) là độ phức tạp tính toán thời gian của Thủ tục rút gọn. Áp dụng công thức Max, ta có:

T(n) = Max(T1(n), T2(n)) = O(n2). Thủ tục chọn cạnh phân nhánh (r,s):

(i) Khởi tạo : α := - ∞;

(ii) Với mỗi cặp (i,j) thoả cij = 0 (i=1,...,k; j=1,...,k) thực hiện - Xác định

minr = min{cih : h ≠ j } mins = min{chj : h ≠ i } - Nếu α < minr + mins , đặt

α := minr + mins; r := i; s := j;

Gọi T(n) là độ phức tạp tính toán thời gian của thủ tục chọn cạnh phân nhánh. Gọi câu lệnh đặc trưng là xác định phần tử nhỏ nhất trên hàng hoặc cột.

Độ phức tạp tính toán thời gian của T(n) là:

( ) 2 3 ( )3 1 1 1 1 1 1 1 n n n n n n i j h i j i T n n n n O n = = = = = = =∑∑∑ ∑∑ ∑= = = =

Thuật toán nhánh cận giải bài toán người du lịch: Edges: Số cạnh trong hành trình bộ phận

A: Ma trận chi phí tương ứng với kích thước N * N Cost: Chi phí hành trình bộ phận

MinCost: chi phí của hành trình tốt nhất đã tìm được Reduce(A, N): Thủ tục rút gọn

BestEdge(A, N, r, c, beta): Thủ tục chọn cạnh phân nhánh Procedure TSP(edges, cost, C)

Begin

Cost := Cost + Reduce(A, N-edges); If Cost < MinCost then

If edges = N – 2 then Begin

<Bổ sung nốt hai cạnh còn lại> MinCost := Cost;

<Ghi nhận hành trình tốt nhất> End

Else Begin

BestEdge(A, N-edges, r, c, beta); LowerBound := Cost + beta;

<Ngăn cấm tạo thành hành trình con> NewA := <A loại bỏ dòng r cột c>

TSP(edges+1, cost, NewA); < Đi theo nhánh trái> <Khôi phục A bằng cách bổ sung lại dòng r cột c> If LowerBound < MinCost then

Begin <Đi theo nhánh phải> A[r, c] := ∞;

End; End;

<Khôi phục ma trận A> End;

Gọi T(n) là độ phức tạp tính toán thời gian của bài toán TSP

Bài toán thực hiện N-2 lệnh gọi TSP. Mỗi TSP có hai thủ tục chính là Reduce và BestEdge.

Vì 2 thủ tục này thực hiện ở nhánh khác nhau. Do vậy, độ phức tạp tính toán thời gian của mỗi TSP là:

Áp dụng công thức max, ta có:

TTSP = Max(TReduce, TBestEdge) = Max(O(n2), O(n3)) = O(n3). Vậy độ phức tạp tính toán thời gian của bài toán TSP là:

O(K * N * N3) K là số lần có thể phân nhánh, 0 <= K <= N2

Một phần của tài liệu Ứng dụng phương pháp Nhánh cận trong dạy và học chuyên tin tại trường THPT Chuyên Quảng Bình (Trang 65)

Tải bản đầy đủ (DOC)

(85 trang)
w