1. Trang chủ
  2. » Công Nghệ Thông Tin

Chap3New 110820045955 phpapp01

47 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Chapter 4 Graph Algorithms 1 Chương 3 Chiến lược giảm để trị (Decrease and conquer) 2 Nội dung 1 Chiến lược giảm để trị 2 Sắp thứ tự bằng phương pháp chèn 3 Các giải thuật duyệt đồ thị 4 Sắp xếp tôpô[.]

Chương Chiến lược giảm-để-trị (Decrease-and-conquer) Nội dung Chiến lược giảm-để-trị Sắp thứ tự phương pháp chèn Các giải thuật duyệt đồ thị Sắp xếp tơpơ Giải thuật sinh hốn vị từ tập Chiến lược thiết kế giải thuật giảm-để-trị (Decrease-and-conquer)   Kỹ thuật thiết kế giải thuật giảm-để-trị lợi dụng mối liên hệ lời giải cho thể toán lời giải cho thể nhỏ tốn Có ba biến thể chiến lược     Giảm số (decrease by a constant) Giảm hệ số (decrease by a factor) Giảm kích thước biến (variable size decrease) Sắp thứ tự phương pháp chèn (insertion sort) thí dụ điển hình chiến lược giảm-để-trị Chiến lược thiết kế giải thuật giảm-để-trị (tt.)  Giải thuật tìm ước số chung lớn số theo công thức gcd(m,n) = gcd(n, m mod n) thí dụ chiến lược giảm-để-trị theo lối giảm kích thước biến Algorithm Euclid(m,n) /* m,n : two nonnegative integers m and n */ while n0 r := m mod n; m:= n; n:= r endwhile return m; Thí dụ: m = 60 n = 24 2) m = 60 n = 24 3) m = 24 n = 12 4) m = 12 n = Vậy 12 ước số chung lớn Chiến lược thiết kế giải thuật giảm-để-trị (tt.)   Tại bước giải thuật duyệt đồ thị theo chiều sâu trước (DFS) hay duyệt theo bề rộng trước (BFS), giải thuật đánh dấu đỉnh viếng tiến sang xét đỉnh kế cận đỉnh Hai giải thuật duyệt đồ thị áp dụng kỹ thuật giảm-bớt-một (decrease-by-one), dạng chiến lược Giảm-để-trị Sắp thứ tự phương pháp chèn Ý tưởng : • Xét ứng dụng kỹ thuật “giảm để trị” vào việc thứ tự mảng a[0 n-1] Theo tinh thần kỹ thuật, ta giả sử toán nhỏ hơn: thứ tự mảng a[0 n-2] thực Vấn đề phải chèn phần tử a[n-1] vào mảng có thứ tự a[0 n-2] • Có hai cách để thực điều - Một ta duyệt mảng có thứ tự từ trái sang phải tìm thấy phần tử lớn hay với phần tử a[n-1] chèn phần tử a[n-1] vào bên trái phần tử - Hai ta duyệt mảng có thứ tự từ phải sang trái tìm thấy phần tử nhỏ hay với phần tử a[n-1] chèn phần tử a[n-1] vào bên phải phần tử Sắp thứ tự phương pháp chèn (tt.) Cách thứ hai thường chọn: a[0] ≤ … ≤ a[j] < a[j+1] ≤ … ≤ a[i-1] | a[i] … a[n-1] 390 45 205 182 45 235 → 205 390 182 45 235 → 182 205 390 45 235 → 45 182 205 390 235 182 → 205 235 390 Giải thuật thứ tự phương pháp chèn procedure insertion; var i; j; v:integer; begin for i:=2 to N begin v:=a[i]; j:= i; while a[j-1]> v begin a[j] := a[j-1]; // pull down j:= j-1 end; a[j]:=v; end; end; Những lưư ý giải thuật insertion sort • Chúng ta dùng trị khóa “cầm canh” (sentinel) a[0], làm cho nhỏ phần tử nhỏ mảng Vịng lặp ngồi giải thuật thực thi N-1 lần Trường hợp xấu xảy mảng có thứ tự đảo ngược Khi đó, vịng lặp thực thi với tổng số lần sau đây: (N-1) + (N-2) + + =N(N-1)/2 =O(N2) Số bước chuyển = N(N-1)/2 Số so sánh = N(N-1)/2 Trung bình có khoảng chừng (i-1)/2 so sánh thực thi vịng lặp Do đó, trường hợp trung bình, tổng số lần so sánh là: (N-1)/2 + (N-2)/2 + + 1/2 =N(N-1)/4 =O(N2) Độ phức tạp thứ tự phương pháp chèn Tính chất 1.2: Sắp thứ tự phương pháp chèn thực thi khoảng N2/2 so sánh N2/4 hoán vị trường hợp xấu Tính chất 1.3: Sắp thứ tự phương pháp chèn thực thi khoảng N2/4 so sánh N2/8 hốn vị trường hợp trung bình Tính chất 1.4: Sắp thứ tự phương pháp chèn có độ phức tạp tuyến tính mảng gần có thứ tự 10

Ngày đăng: 11/04/2023, 20:11

w