slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 6 sắp xếp

33 390 0
slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 6 sắp xếp

Đ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

Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 1 Đỗ Bích Diệp - Khoa CNTT Cấutrúcdữ liệuvàGiảithuật Chương VI: Sắpxếp 7 2 ⏐ 9 4 → 2 4 7 9 7 ⏐ 2 → 2 7 9 ⏐ 4 → 4 9 7 → 7 2 → 2 9 → 9 4 → 4 Đỗ Bích Diệp - Khoa CNTT Chương VI: Sắpxếp z Nội dung 1. Bài toán sắpxếp 2. Ba phương pháp sắpxếpcơ bản 1. Lựachọn, thêm dầnvàđổichỗ 2. Phân tích, đánh giá 3. Sắpxếpkiểu hòa nhập 4. Sắpxếp nhanh 5. Sắpxếpkiểuvunđống 6. Mộtsố phương pháp sắpxếp đặcbiệt Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 2 Đỗ Bích Diệp - Khoa CNTT Bài toán Sắpxếp – Sắpxếplạimộttập các phầntử dữ liệu theo chiều tăng dầnhoặcgiảmdần 23 78 45 8 32 56 8 23 32 45 78 56 Đỗ Bích Diệp - Khoa CNTT Bài toán Sắpxếp – Khóa sắpxếp z Mộtbộ phậncủabản ghi biểudiễn đốitượng đượcsắp z Khóa sẽ đượcsử dụng để xác định thứ tự sắpxếpbản ghi trong mộttậpcácbảnghi – Bảng khóa: z Sử dụng trong sắpxếpkhimuốnhạnchế việcdichuyểncác bảnghidữ liệu z Mộttậpcácbản ghi chỉ chứa hai trường – Khóa: chứa khóa sắpxếp – Link: Con trỏ ghi địachỉ củabản ghi đốitượng dữ liệutương ứng z Thứ tự các bản ghi trong bảng khóa cho phép xác định thứ tự củacácbản ghi dữ liệu Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 3 Đỗ Bích Diệp - Khoa CNTT Các loạithuậttoánSắpxếp ExchangeSelectionInsertion Internal External Sorts •Insertion •Shell • Selection •Heap • Bubble •Quick • Natural • Balanced • Polyphase Đỗ Bích Diệp - Khoa CNTT Bài toán Sắpxếp – Các đặctrưng củathuật toán sắpxếp z Tính ổn định củathuật toán sắpxếp – Các phầntử có cùng khóa sẽ giữ nguyên thứ tự tương đốicủa chúng như trướckhisắpxếp z Tính tạichỗ – Thuật toán đòi hỏi không gian nhớ phụ là hằng số (không phụ thuộcvàosố lượng phầntử trong dãy cầnsắp) 78 8 45 8 32 56 8 8 32 45 56 78 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 4 Đỗ Bích Diệp - Khoa CNTT Bài toán Sắpxếp – Trong chương này, bài toán sắpxếp được đơn giảnhóadướidạng như sau z Đầu vào: Một dãy các số nguyên a 1 , a 2 , …, a n z Đầura: Một hoán vị củadãysốđãchotrongđó các giá trịđượcsắpxếp theo chiềutăng dần Đỗ Bích Diệp - Khoa CNTT Ba phương pháp sắpxếpcơ bản 1. Sắpxếpkiểulựachọn (Selection Sort) 2. Sắpxếpkiểu thêm dần (Insertion Sort) 3. Sắpxếpkiểu đổichỗ -Sắpxếpkiểunổibọt (Buble Sort) Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 5 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểulựachọn – Selection Sort – Ý tưởng: z Tạimỗilượt, chọn phầntử nhỏ nhất trong số các phần tử chưa đượcsắp. Đưaphầntửđượcchọnvàovị trí đúng bằng phép đổichỗ. z Sau lượtthứ i (i = 1 n-1) , dãy cầnsắp coi nhưđược chia thành 2 phần – Phần đãsắp: từ vị trí 1 đếni – Phầnchưasắp: từ vị trí i +1 đếnn Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểulựachọn – Ví dụ: Sắpxếp dãy sau theo thứ tự tăng dần: z A = {12, 5, 3, 10, 18, 4, 9, 16} 1816161616161616 161818109999 1212121212544 1010101818181818 999910101010 5555512123 44444455 333333312 Lượt7Lượt6Lượt5Lượt4Lượt3Lượt2Lượt1 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 6 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểulựachọn – Giảithuật Procedure SELECTION-SORT(A,n) 1. for i = 1 to n-1 do begin 2. {Duyệttừđỉnh} min = i; 3. {Chọnphầntử nhỏ nhất} for j = i+1 to n do if A[j] < A[min] then min = j ; 4. {Đổichổ phầntử i và phầntử nhỏ nhất} T = A[i]; A[i] = A[min]; A[min] = T; end; End. Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểulựachọn – Thờigianthựchiệnthuật toán z Trường hợptốtnhất: – Dãy ban đầu đã đượcsắpxếp – 0 phép đổichỗ, chỉ thựchiện n(n-1)/2 phép so sánh z Trường hợpxấunhất – n-1 phép đổichỗ, n(n-1)/2 phép so sánh – Độ phứctạpthời gian trung bình O(n 2 ) Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 7 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểuthêmdần – Insertion sort z Ý tưởng: – Dãy cầnsắp được chia thành 2 phần: mộtlàphần đã sắp, còn lạilàphầnchưasắp – Tạimỗilượt, phầntửđầu tiên trong phầnchưasắpsẽ được “thêm” vào đúng vị trí của nó trong phần đãsắp. Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểuthêmdần – Ví dụ: Sắpxếp dãy sau theo thứ tự tăng dần: z A = {12, 5, 3, 10, 18, 4, 9, 16} 1816161616161616 1618999999 12121844444 1010121818181818 99101212101010 55510101233 444555125 333333512 Lượt7Lượt6Lượt5Lượt4Lượt3Lượt2Lượt1 Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 8 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểuthêmdần – Giảithuật Procedure INSERTION-SORT(A,n) 1. for i := 2 to n do begin 2. {Chọnphầntửđầutiêncủaphầnchưa đượcsắpxếp} val := A[i]; j := i; {Tìm vị trí thích hợp đề chèn phầntử A[i] trong phần đãsắp- chứacácphầntử từ vị trí 1 đếni-1} while ( j > 1) and (A[j-1] > val) do begin A[j] := A[j-1]; j := j -1; end; 4. {Chèn phầntử A[i] vào vị trí thích hợp} A[j] := val; end; 5. End Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểuthêmdần – Sắpxếp thêm dầnlàtạichỗ và ổn định – Thờigianthựchiệngiảithuật z Trường hợptốtnhất: – Dãy ban đầu đã đượcsắpxếp – 0 thựchiệnphépđổichỗ, n-1 phép so sánh z Trường hợpxấunhất – n(n-1)/2 phép đổichỗ và so sánh – Độ phứctạpthời gian trung bình O(n 2 ) Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 9 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểunổibọt – Ví dụ z A = {12, 5, 3, 10, 18, 4, 9, 16} 1818181818161616 16161616161899 121212101010184 10101012991018 9999125410 555551253 444444125 333333312 Lượt7Lượt6Lượt5Lượt4Lượt3Lượt2Lượt1 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểunổibọt z Ý tưởng: – Dãy cầnsắp được chia thành 2 phần: mộtlàphần đã sắp, còn lạilàphầnchưasắp – Thông qua phép đổichỗ, tạimỗilượtphầntử nhỏ nhất trong phầnchưa đượcsắpsẽđược“đẩydần” lên trước và cuốicùngnhậpvàophần đượcsắp . Phầnchưasắp Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 10 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểunổibọt – Giảithuật Procedure BUBBLE-SORT(A,n) 1. for i := 1 to n-1 do 2. {Duyệttừđáy} for j:= n down to i+1 do 3. {Kiểmtra2 phầntử kề cận nhau, nếungượcthứ tự thì đổichỗ } if A[j] < A[j-1] then begin X:= A[j]; A[j] := A[j-1]; A[j-1] := X; end 4. return Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểunổibọt – Thờigianthựchiệngiảithuật z Trường hợptốtnhất: – Dãy ban đầu đã đượcsắpxếp – 0 thựchiệnphépđổichỗ, n(n-1)/2 phép so sánh z Trường hợpxấunhất – n(n-1)/2 phép đổichỗ và so sánh – Độ phứctạpthời gian trung bình O(n 2 ) [...]... khi thực hiện BUILD-HEAP(4,8) Đỗ Bích Diệp - Khoa CNTT Sắp xếp kiểu vun đống 95 95 33 97 54 97 7 10 36 66 36 7 10 33 66 95 54 33 54 97 36 10 7 66 Sau khi thực hiện BUILD-HEAP(3,8) 95 97 54 66 36 10 7 33 Sau khi thực hiện BUILD-HEAP(2,8) Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 29 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu vun đống 97 95 66 54 7 10 36 33 97 95 54 66 36 10 7 33 Sau khi... 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 18 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu hòa nhập - Ví dụ minh họa Lời gọi đệ qui – Trường hợp cơ sở 7 2 9 4⏐3 8 6 1 → 1 2 3 4 6 7 8 9 7 2⏐9 4→ 2 4 7 9 7⏐2→2 7 7→7 2→2 3 8 6 1 → 1 3 8 6 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Sắp xếp kiểu hòa nhập - Ví dụ minh họa... cây có 6 nút, số 95 đã vào đúng vị trí trong dãy Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 30 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu vun đống 54 36 36 33 10 95 66 7 33 7 97 54 10 95 66 54 97 36 10 33 7 66 95 97 Sau khi đổi chỗ lần 3 giữa V[1] và V [6] , vun thành đống cho cây có 5 nút, số 66 đã vào đúng vị trí trong dãy 36 33 10 7 54 66 95 97 Sau khi đổi chỗ lần 4 giữa V[1] và V[5],... BUILD-HEAP(i,n); 2 {Sắp xếp} for i := n-1 down to 1 do begin V[1] ↔ V[i+1]; call BUILD-HEAP(1,i) end; 3 return Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 28 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu vun đống Ví dụ – Giai đoạn tạo đống ban đầu 1 95 95 2 33 4 3 5 66 6 36 7 33 7 10 54 97 7 54 10 36 8 97 66 95 33 7 66 36 10 54 97 Cây và vector lưu trữ ban đầu 95 33 7 97 36 10 54 66 Sau... 6 7 8 9 7 2⏐9 4→ 2 4 7 9 7⏐2→2 7 7→7 2→2 3 8 6 1 → 1 3 8 6 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Sắp xếp kiểu hòa nhập - Ví dụ minh họa Tương tự … 7 2 9 4⏐3 8 6 1 → 1 2 3 4 6 7 8 9 7 2⏐9 4→ 2 4 7 9 7⏐2→2 7 7→7 2→2 3 8 6 1 → 1 3 6 8 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 21 Cấu trúc dữ liệu. .. 87 62 74 85 76 45 84 97 78 21 14 22 87 62 74 85 76 45 84 97 i = 5 và j = 10, đổi chỗ Đỗ Bích Diệp - Khoa CNTT Sắp xếp nhanh 78 21 14 22 45 62 74 85 76 87 84 97 78 21 14 22 45 62 74 85 76 87 84 97 i = 8 và j = 9, đổi chỗ 78 21 14 22 45 62 74 76 85 87 84 97 i = 9 và j = 8 Kết thúc phân đoạn Đưa chốt về vị trí thực Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 14 Cấu trúc dữ liệu và Giải thuật. .. 6 1 → 1 2 3 4 6 7 8 9 7 2⏐9 4→ 2 4 7 9 7⏐2→2 7 7→7 2→2 3 8 6 1 → 1 3 8 6 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 19 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu hòa nhập - Ví dụ minh họa Hòa nhập 7 2 9 4⏐3 8 6 1 → 1 2 3 4 6 7 8 9 7 2⏐9 4→ 2 4 7 9 7⏐2→2 7 7→7 2→2 3 8 6 1 → 1 3 8 6 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6. .. Đỗ Bích Diệp - Khoa CNTT Sắp xếp kiểu hòa nhập - Ví dụ minh họa Lời gọi đệ qui … Trường hợp cơ sở , Hòa nhập 7 2 9 4⏐3 8 6 1 → 1 2 3 4 6 7 8 9 7 2⏐9 4→ 2 4 7 9 7⏐2→2 7 7→7 2→2 3 8 6 1 → 1 3 8 6 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 20 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu hòa nhập - Ví dụ minh họa Hòa nhập 7 2 9 4⏐3 8 6. .. vào đúng vị trí trong dãy Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 31 Cấu trúc dữ liệu và Giải thuật Sắp xếp kiểu vun đống 7 10 36 33 66 54 95 97 7 10 33 36 54 66 95 97 Đổi chỗ lần cuối cùng, bây giờ dãy số đã cho đã được sắp xếp theo thứ tự tăng dần Đỗ Bích Diệp - Khoa CNTT Sắp xếp kiểu vun đống – Nhận xét, đánh giá giải thuật Sắp xếp kiểu vun đống Thời gian thực hiện trung bình Ttb(n)... MERGE-SORT(S1, (n div 2)); 2 MERGE-SORT(S2, (n- (n div 2)); 4 {Tr - Hòa nhập hai dãy được sắp } MERGE(S1,S2, S); 5 Return S; Đỗ Bích Diệp - Khoa CNTT Sắp xếp kiểu hòa nhập – Ví dụ minh họa Chia 7 2 9 4⏐3 8 6 1 → 1 2 3 4 6 7 8 9 7 2 9 4 → 2 4 7 9 7 2 → 2 7 7→7 2→2 3 8 6 1 → 1 3 8 6 9 4 → 4 9 9→9 4→4 3 8 → 3 8 3→3 8→8 6 1 → 1 6 6 6 1→1 Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 17 Cấu trúc . Sắpxếpkiểuvunđống 6. Mộtsố phương pháp sắpxếp đặcbiệt Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 2 Đỗ Bích Diệp - Khoa CNTT Bài toán Sắpxếp – Sắpxếplạimộttập các phầntử dữ. Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 1 Đỗ Bích Diệp - Khoa CNTT Cấutrúcdữ liệuvàGiảithuật Chương VI: Sắpxếp 7 2 ⏐ 9 4 → 2 4 7 9 7 ⏐ 2. đượcsắpsẽđược“đẩydần” lên trước và cuốicùngnhậpvàophần đượcsắp . Phầnchưasắp Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp -Khoa CNTT - ĐHBKHN 10 Đỗ Bích Diệp - Khoa CNTT Sắpxếpkiểunổibọt – Giảithuật Procedure

Ngày đăng: 24/10/2014, 15:02

Từ khóa liên quan

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

Tài liệu liên quan