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

Chap2New 110820045952 phpapp02

40 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 2 SORTING 1 Chương 2 Chiến lược chia để trị (Divide and conquer) 2 Nội dung 1 Chiến lược chia để trị 2 Quicksort 3 Xếp thứ tự bằng phương pháp trộn 4 Xếp thứ tự ngoại 5 Cây tìm kiếm nhị phân 3[.]

Chương Chiến lược chia-để-trị (Divide-and-conquer) Nội dung Chiến lược chia để trị Quicksort Xếp thứ tự phương pháp trộn Xếp thứ tự ngoại Cây tìm kiếm nhị phân Chiến lược chia-để-trị   Là chiến lược thiết kế giải thuật tiếng Các giải thuật chia-để-trị thường tiến hành theo bước sau:      Thể toán chia làm thể nhỏ Những thể nhỏ giải (thường đệ quy, không cần đệ quy) Những lời giải đạt từ thể nhỏ phối hợp lại làm thành lời giải tốn ban đầu Tìm kiếm p.p chia đơi (binary search) thí dụ chiến lược chia-để-trị Sơ đồ sau mô tả chiến lược chia-để-trị mà chia tốn thành hai tốn nhỏ Đây trường hợp phổ biến chiến lược Chiến lược chia-để-trị tốn kích thước n tốn kích thước n/2 tốn kích thước n/2 lời giải cho toán lời giải cho toán lời giải cho toán ban đầu Giải thuật Quick sort Giải thuật Quick sort phát minh năm 1960 C A R Hoare Quicksort thể tinh thần thiết kế giải thuật theo lối “Chia để trị” (divide-and-conquer) Quicksort ưa chuộng khơng q khó để thực hóa Quicksort đòi hỏi khoảng chừng NlgN thao tác để thứ tự N phần tử Nhược điểm Quick sort gồm: - Nó giải thuật đệ quy - Nó cần khoảng N2 thao tác trường hợp xấu - Nó dễ bị lỗi lập trình (fragile) Giải thuật Quicksort Quicksort phương pháp xếp thứ tự theo kiểu “chia để trị” Nó thực cách phân hoạch tập tin thành hai phần thứ tự phần cách độc lập với Giải thuật có cấu trúc sau: procedure quicksort1(left,right:integer); var i: integer; begin if right > left then begin i:= partition(left,right); quicksort(left,i-1); quicksort(i+1,right); end; end; Phân hoạch Phần then chốt Quicksort thủ tục phân hoạch (partition), mà xếp lại mảng cho thỏa mãn điều kiện sau: i) phần tử a[i] đưa vị trí đắn nó, với giá trị i đó, ii) tất phần tử nhóm a[left], , a[i-1] nhỏ hay a[i] iii) tất phần tử nhóm a[i+1], , a[right] lớn hay a[i] Example: 59 56 52 51 53 52 56 55 55 58 58 51 59 57 57 54 54 Thí dụ phân hoạch Giả sử chọn phần tử thứ hay phần tử tận trái (leftmost ) phần tử đưa vị trí ( Phần tử gọi phần tử chốt - pivot) 40 15 30 25 60 10 75 45 65 35 50 20 70 55 40 15 30 25 20 10 75 45 65 35 50 60 70 55 40 15 30 25 20 10 35 45 65 75 50 60 70 55 35 15 30 25 20 10 40 45 65 75 50 60 70 55 nhỏ 40 sorted lớn 40 Giải thuật Quicksort procedure quicksort2(left, right: integer); var j, k: integer; begin if right > left then begin j:=left; k:=right+1; //start partitioning repeat repeat j:=j+1 until a[j] >= a[left]; repeat k:=k-1 until a[k]k; swap(a[left],a[k]); //finish partitioning quicksort2(left,k-1); quicksort2(k+1,right) end; end; Phân tích độ phức tạp: trường hợp tốt Trường hợp tốt xảy với Quicksort lần phân hoạch chia tập tin làm hai phần điều làm cho số lần so sánh Quicksort thỏa mãn hệ thức truy hồi: CN = 2CN/2 + N Số hạnh 2CN/2 chi phí việc thứ tự hai nửa tập tin N chi phí việc xét phần tử phân hoạch lần đầu Từ chương 1, việc giải hệ thức truy hồi đưa đến lời giải: CN ≈ N lgN 10

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