phân tích va thiết kế giải thuật dương tuấn anh chương 3 chiến lược giảm để trị(decrease and conquer) sinhvienzone com

47 116 0
phân tích va thiết kế giải thuật dương tuấn anh chương 3 chiến lược giảm để trị(decrease and conquer) sinhvienzone com

Đ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

om nh Vi en Zo ne C Chương Si Chiến lược giảm-để-trị (Decrease-and-conquer) SinhVienZone.com https://fb.com/sinhvienzonevn Nội dung nh Vi en Zo ne C om 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 Si SinhVienZone.com https://fb.com/sinhvienzonevn Chiến lược thiết kế giải thuật giảm-để-trị (Decrease-and-conquer) om 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ỏ toá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) nh Vi en  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ị Si  Zo ne C  SinhVienZone.com https://fb.com/sinhvienzonevn 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 Zo Thí dụ: m = 60 n = 24 1) m = 60 n = 24 2) m = 24 n = 12 3) m = 12 n = Vậy 12 ước số chung lớn Si nh Vi en 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; ne C om  SinhVienZone.com https://fb.com/sinhvienzonevn Chiến lược thiết kế giải thuật giảm-để-trị (tt.) om 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ị nh Vi en Si  Zo ne C  SinhVienZone.com https://fb.com/sinhvienzonevn Sắp thứ tự phương pháp chèn nh Vi en Zo ne C om Ý 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 cho Si đến 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ử SinhVienZone.com https://fb.com/sinhvienzonevn Sắp thứ tự phương pháp chèn (tt.) om Cách thứ hai thường chọn:  182 205 390 45 235 nh Vi en  205 390 182 45 235 Si 390 205 182 45 235 Zo ne C a[0] ≤ … ≤ a[j] < a[j+1] ≤ … ≤ a[i-1] | a[i] … a[n-1] SinhVienZone.com  45 182 205 390 235 45 182  205 235 390 https://fb.com/sinhvienzonevn Giải thuật thứ tự phương pháp chèn Si nh Vi en Zo ne C om 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; SinhVienZone.com https://fb.com/sinhvienzonevn Những lưư ý giải thuật insertion sort om Chúng ta dùng trị khóa “cầm canh” (sentinel) a[0], làm cho nhỏ phần tử nhỏ mảng nh Vi en Zo ne C 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 Si 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) SinhVienZone.com https://fb.com/sinhvienzonevn om Độ phức tạp thứ tự phương pháp chèn Zo ne C 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 nh Vi en 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 hoán vị trường hợp trung bình Si 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ự SinhVienZone.com https://fb.com/sinhvienzonevn 10 Lưu ý cách biểu diễn đồ thị có hướng om Nếu ta biểu diễn đồ thị có hướng tập danh sách kế cận, cạnh đồ thị tương ứng với nút tập danh sách kế cận (mỗi cạnh nối từ x đến y biểu diễn nút có nhãn y đưa vào danh sách kế cận đỉnh x) Nếu ta biểu diễn đồ thị có hướng ma trận kế cận, cạnh đồ thị tương ứng với bit ma trận kế cận (mỗi cạnh nối từ x đến y biểu diễn giá trị true a[x, y]) Si  Số nút tập danh sách kế cận với số cạnh |E| nh Vi en  Zo ne C  SinhVienZone.com https://fb.com/sinhvienzonevn 33 Xếp thứ tự tơpơ Đồ thị có hướng khơng chu trình (Directed Acyclic Graph) C om Đồ thị có hướng mà khơng có chu trình gọi đồ thị có hướng khơng chu trình (dags) ne Tập thứ tự riêng phần xếp thứ tự tôpô nh Vi en Zo Cho G đồ thị có hướng khơng chu trình Xét quan hệ thứ tự < định nghĩa sau: u < v có lối từ u đến v G Si Quan hệ có tính chất: (1) Với đỉnh V[G], not (u < u) (không phản xạ) (2) u < v, not( v < u) (không đối xứng) (3) u < v v < w, u < w (Truyền) Quan hệ < quan hệ thứ tự riêng phần SinhVienZone.com https://fb.com/sinhvienzonevn 34 om Xếp thứ tự tôpô nh Vi en Zo ne C Cho G đồ thị có hướng khơng chu trình Một thứ tự tơpơ (topological sort)T G thứ tự tuyến tính mà bảo toàn thứ tự riêng phần ban đầu tập đỉnh V[G] Si Nghĩa là: u < v V (tức có lối từ u đến v G), u xuất trước v thứ tự tuyến tính T SinhVienZone.com https://fb.com/sinhvienzonevn 35 om A H C G E J K Zo D ne C B I nh Vi en F L M Si Các nút đồ thị hình thứ tự tôpô theo thứ tự sau: J K L M A G H I F E D B C SinhVienZone.com https://fb.com/sinhvienzonevn 36 Phương pháp xếp tôpô nh Vi en Zo ne C om Phương pháp thực theo kiểu tìm kiếm theo chiều sâu trước thêm nút vào danh sách cần thiết lấy nút khỏi stack để tiếp tục Khi gặp nút khơng có nút sau ta lấy (pop) phần tử từ đỉnh stack Lặp lại trình stack rỗng Đảo ngược danh sách ta thứ tự tôpô Si Algorithm: Start with nodes with no predecessor, put them in the stack while the stack is not empty if the node at top of the stack has some successors then push all its successors onto the stack else pop it from the stack and add it to the list SinhVienZone.com https://fb.com/sinhvienzonevn 37 om C ne Zo nh Vi en 10 2 1 7 Si 7 SinhVienZone.com 10 7 Hình 3.5 Sắp thứ tự tôpô 10 10 2 1 1 7 7 7 https://fb.com/sinhvienzonevn 38 Độ phức tạp giải thuật xếp tơ pơ phương pháp Tính chất: Độ phức tạp tính tốn giải thuật xếp tơ pô O(|E|+|V|) đồ thị diễn tả tập danh sách kế cận  Chứng minh: Điều hiển nhiên thân vòng lặp while thực tối đa lần cho cạnh Và tác vụ khởi tạo stack tỉ lệ với số đỉnh đồ thị Si nh Vi en Zo ne C om  SinhVienZone.com https://fb.com/sinhvienzonevn 39 Phương pháp thứ tự tô pô om Ý tưởng: Liên tiếp nhận diện nút nút nguồn (nút khơng có nút sau) tháo gỡ khỏi đồ thị với cạnh từ Q trình lặp dừng lại khơng nút đồ thị Thứ tự nút bị xóa bỏ tạo thành lời giải toán thứ tự tô pô Giải thuật thể rõ chiến lược giảm (một)để-trị Si  nh Vi en Zo ne C  SinhVienZone.com https://fb.com/sinhvienzonevn 40 a d d d gỡ b om gỡ a c b e e nh Vi en Zo ne e b c C c d gỡ c Si e gỡ d gỡ e e Thứ tự tô pô a, b, c, d, e SinhVienZone.com https://fb.com/sinhvienzonevn 41 Giải thuật phương pháp Si nh Vi en Zo ne C om Algorithm: Start with nodes with no predecessor, put them in the queue while the queue is not empty remove the front node N of the queue for each neighbor node M of node N delete the edge from N to M if the node M has no successor then add M to the rear of the queue endfor endwhile Độ phức tạp giải thuật bao nhiêu? SinhVienZone.com https://fb.com/sinhvienzonevn 42 Giải thuật sinh hoán vị  om C Si nh Vi en  ne  Cho tập n phần tử A= {a1,a2,…,an} Ta muốn sinh tất n! hốn vị tập Chiến lược Giảm-để-trị có gợi ý giải thuật sinh tất hoán vị tập n phần tử? Bài toán nhỏ bậc sinh tất (n-1)! hoán vị cho tập n -1 phần tử tập A nói Giả sử tốn giải xong, ta giải tốn ngun thủy cách chèn phần tử lại vào vị trí n vị trí khả hữu phần tử hoán vị tập n -1 phần tử sinh Tất hoán vị đạt cách khác biệt Zo  SinhVienZone.com https://fb.com/sinhvienzonevn 43 21 C 12 right to left 123 132 312 213 231 321 right to left nh Vi en right to left Zo thêm ne khởi đầu thêm om Thí dụ Si Để đơn giản, giả sử tập A tập hợp số nguyên từ đến n Chúng hiểu tập số tập n phần tử {a1,a2,…,an} SinhVienZone.com https://fb.com/sinhvienzonevn 44 Giải thuật PERM Si nh Vi en Zo ne C om Set j:= and write down the permutation set j:= j+1 for each permutation on j-1 elements create and list P:=< a1 a2…aj-1j> for i:= j-1 downto set P:= P with the values assigned to positions i and i+1 switched and list P // end for loop at step if j < n, then go to step else stop SinhVienZone.com https://fb.com/sinhvienzonevn 45 Độ phức tạp giải thuật PERM Si nh Vi en Zo ne C om Tính chất: Độ phức tạp giải thuật PERM sinh tất hoán vị tập n phần tử n! Chứng minh:  Thao tác bản: thao tác chèn phần tử lại vào hốn vị có  Với hốn vị từ tập n-1 phần tử (gồm tất (n-1)! hốn vị này), ta đưa phần tử lại vào n vị trí khả hữu Như tổng cọng có n.(n-1)! thao tác chèn phần tử lại vào hốn vị có  Do đó: C(n) = O(n!)  Nhận xét: Vì n! tăng nhanh nên với n lớn (10 trở lên), giải thuật cho kết chậm SinhVienZone.com https://fb.com/sinhvienzonevn 46 Công thức Stirling C om n! xấp xỉ với hàm Zo ne  n (n/e)n Si nh Vi en với e số logarit tự nhiên (e = 2.71828) SinhVienZone.com https://fb.com/sinhvienzonevn 47 ... giải thuật giảm- để- trị (Decrease -and- conquer) om 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. .. 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 hoán vị từ tập Si SinhVienZone. com https://fb .com/ sinhvienzonevn Chiến lược thiết kế. ..  SinhVienZone. com https://fb .com/ sinhvienzonevn 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

Ngày đăng: 30/01/2020, 22:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan