Sắp xếp vun đống

67 30 0
Sắp xếp vun đống

Đ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

Sắp xếp vun đống - Heap sort • Khi tìm phần tử nhỏ nhất ở bước i, phương pháp sắp xếp chọn trực tiếp không tận dụng được các thông tin đã có được do các phép so sánh ở bước i-1. Vì lý do trên người ta tìm cách xây dựng một thuật toán sắp xếp có thể khắc phục nhược điểm này.

Sắp xếp vun đống Heap sort Sắp xếp vun đống - Heap sort • • • Khi tìm phần tử nhỏ bước i, phương pháp xếp chọn trực tiếp không tận dụng thông tin có phép so sánh bước i-1 Vì lý người ta tìm cách xây dựng thuật tốn xếp khắc phục nhược điểm Mấu chôt để giải vấn đề vừa nêu phải tìm cấu trúc liệu cho phép tích lũy thơng tin so sánh giá trị phần tử qua trình xếp Giả sử liệu cần xếp bố trí theo quan hệ so sánh tạo thành sơ đồ dạng sau : heap Các phần tử tốt (xấu nhất) dời lên Cấu trúc heap • • • • Heap cấu trúc liệu dạng hình có tính chất sau: Mổi phần tử có nhiều phần tử (phần tử liên đới) Bất kỳ Phần tử (cha) có giá trị lớn giá trị phần tử Phần tử đầu (phần tử gốc) phần tử có giá trị lớn heap Cấu trúc heap gốc cha Con (phần tử liên đới) 16 12 14 11 Con (phần tử liên đới) 12 >là11, 16 giá 12 trị lớn > 4nhất heap 13 10 • • • • Heap có tính chất sau : Tính chất : Nếu al , al+1 ,al+2 , ar heap cắt bỏ số phần tử hai đầu heap, dãy cịn lại heap Tính chất : Nếu a1 , a2 , , an heap phần tử a1 (đầu heap) ln phần tử lớn heap Tính chất : Mọi dãy al , al+1 ,al+2 , ar với 2l > r  heap Cấu trúc heap • Cài đặt cấu trúc heap mảng a0, a1 , , ar thoả quan hệ sau với i 0] ‫ﻴ‬, r]: - ai  > = a2i+1 - ai  >= a2i+2 (a2i+1, a2i+2) cặp phần tử liên đới • • • phần tử a0 (đầu heap) phần tử lớn heap Vậy ak có phần tử liên đới a2k+1, a2k+2 Phần tử cha la a(k-1)/2 gốc cha 16 12 14 11 13 10 16 12 14 11 10 11 12 13 13 10 a0= 16  gốc a1=12 có phần tử liên đới a 2x1+1=a3 =11 a2x1+2=a4=4 14 15 Cấu trúc heap • Vấn đề cần quan tâm – Làm xây dựng heap – Thêm phần tử – Xóa phần tử  phải đảm bảo tính chất heap Cấu trúc heap • Thêm phần tử – Thêm vào cuối mảng  tính chất heap Cập nhật lại heap (upheap) Bước 1:tại k kiểm tra so với cha (k1-1)/2 Nếu ak a(k-1)/2 đổi vị trí  bước C# • • • • • • • • • • • • • • • • • • • • • • • void downheap(int l, int r) { int x, i, j; int vtconmax; int Flag = 1; i = l; j = * i + 1; // (aj , aj+1) la cac phan tu lien doi cua i x = tappt[i]; while ((j 0) { Shift(a,l,N); l = l -1; } } Cách viết khác vơi C# • • • • • • • public void createheap() { for (int i = (N - 1) / 2; i >= 0; i ) { downheap(i, N - 1); } } heapsort 16 12 14 11 13 10 5 12 14 11 13 10 16 14 12 13 11 10 5 10 11 12 13 14 15 heapsort 14 12 13 11 10 12 13 11 10 14 16 13 12 10 11 8 10 11 12 13 16 14 15 heapsort 13 12 10 11 12 10 11 13 14 16 12 11 10 8 10 11 12 3 14 16 13 14 15 heapsort 12 11 10 11 10 12 13 14 16 11 10 1 10 11 13 14 16 12 13 14 15 heapsort 11 10 12 13 14 16 10 11 12 13 14 16 10 2 10 11 12 13 14 15 heapsort 10 1 10 11 12 13 14 16 2 10 11 12 13 14 16 11 12 13 14 15 heapsort 10 11 12 13 14 16 10 11 12 13 14 16 2 10 11 12 13 14 15 heapsort 10 11 12 13 14 16 10 11 12 13 14 16 2 10 11 12 13 14 15 Heapsort (c) • • • Khi hàm Heapsort có dạng sau : void { HeapSort (int a[], int N) int r; CreateHeap(a,N) r = N-1; // r vị trí cho phần tử nhỏ while(r >= 0) { Hoanvi(a[0],a[r]); r = r -1; Shift(a,0,r); } } Heapsort (c#) • • • Khi hàm Heapsort có dạng sau : void { HeapSort () int r; CreateHeap(0,spt-1) r = spt-1; // r vị trí cho phần tử nhỏ while(r >= 0) { Hoanvi(a[0],a[r]); r = r -1; Shift(a,0,r); } } • • Ðánh giá giải thuật Việc đánh giá giải thuật Heapsort phức tạp, chứng minh trường hợp xấu độ phức tạp O(Nlog2N) .. .Sắp xếp vun đống - Heap sort • • • Khi tìm phần tử nhỏ bước i, phương pháp xếp chọn trực tiếp không tận dụng thơng tin có phép so sánh bước i-1 Vì lý người ta tìm cách xây dựng thuật tốn xếp. .. heap tự cập nhật) Lấy tuần tự mảng xếp heapsort • • • Giải thuật Heapsort trải qua giai đoạn : Giai đoạn :Hiệu chỉnh dãy số ban đầu thành heap; Giai đoạn 2: Sắp xếp dãy số dựa heap: – Bước 1:Ðưa... phải tìm cấu trúc liệu cho phép tích lũy thông tin so sánh giá trị phần tử qua trình xếp Giả sử liệu cần xếp bố trí theo quan hệ so sánh tạo thành sơ đồ dạng sau : heap Các phần tử tốt (xấu nhất)

Ngày đăng: 21/05/2021, 13:41

Mục lục

  • Sắp xếp vun đống

  • Sắp xếp vun đống - Heap sort

  • Cấu trúc heap (C)

  • Cấu trúc heap (C#)

  • Heapsort- hiểu chỉnh heap

  • Cách viết khác vơi C#

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

Tài liệu liên quan