1. Trang chủ
  2. » Giáo Dục - Đào Tạo

nghiên cứu và cài đặt chương trình thực hiện 6 giải thuật sắp xếp select sort insert sort bubble sort merge sort quick sort heap sort để sắp xếp dãy số theo chiều giảm dần

35 5 0
Tài liệu đã được kiểm tra trùng lặ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

Thông tin cơ bản

Tiêu đề Nghiên cứu và cài đặt chương trình thực hiện 6 giải thuật sắp xếp (Select Sort, Insert Sort, Bubble Sort, Merge Sort, Quick Sort, Heap Sort) để sắp xếp dãy số theo chiều giảm dần
Tác giả Vũ Ngọc Minh, Nguyễn Thị Hòa, Vũ Hải Đăng, Nguyễn Chí Thanh, Kiều Thị Nga, Đặng Duy Đạt
Người hướng dẫn Lê Minh Tuấn
Trường học Trường Đại Học Kinh Tế Quốc Dân
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Bài Tập Lớn
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 35
Dung lượng 1,07 MB

Cấu trúc

  • CHƯƠNG I: GIỚI THIỆU PHÁT BIỂU ĐỀ TÀI (5)
  • CHƯƠNG II: NỘI DUNG ĐỀ TÀI (7)
    • I. GIẢI THUẬT SẮP XẾP CHỌN (SELECT SORT) (7)
    • II. GIẢI THUẬT SẮP XẾP CHÈN (INSERT SORT) (10)
    • III. GIẢI THUẬT SẮP XẾP NỔI BỌT (BUBBLE SORT) (13)
    • IV. GIẢI THUẬT SẮP XÉP TRỘN (MERGE SORT) (17)
    • V. GIẢI THUẬT SẮP XẾP NHANH (QUICK SORT) (24)
    • VI. GIẢI THUẬT SẮP XẾP VUN ĐỐNG ( HEAP SORT ) (27)
  • CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ NGHIÊN CỨU (33)

Nội dung

Phát biểu đề tài:Một trong những vấn đề nền tảng của khoa học máy tính là sắp xếp một tập hợpcác phần tử theo thứ tự cho trước nào đó.Và dữ liệu trong hệ thống thường không đượcsắp xếp t

GIỚI THIỆU PHÁT BIỂU ĐỀ TÀI

Một trong những vấn đề nền tảng của khoa học máy tính là sắp xếp một tập hợp các phần tử theo thứ tự cho trước nào đó.Và dữ liệu trong hệ thống thường không được sắp xếp theo một trật tự nhất định, vì vậy việc khai thác thông tin sẽ gặp khó khăn khi cần thiết.

Quá trình sắp xếp là quá trình bố trí lại các phần tử của một tập đối tượng điển hình như là một dãy số nào đó, một dãy chữ theo thứ tự của từ điển.v.v.nhằm sắp xếp theo một thứ tự nhất định theo thứ tự tăng dần (hoặc giảm dần) đối với một dãy số, thứ tự từ điển đối với một dãy chữ.v.v

Bài toán sắp xếp thường được xuất hiện thường xuyên nhất trong các ứng dụng tin học như trong ngôn ngữ lập trình Pascal , với những yêu cầu, mục đích khác nhau thì sắp xếp dữ liệu lưu trữ trong máy tính theo cách và các bước khác nhau Nói chung, dữ liệu có thể xuất hiện dưới nhiều dạng khác nhau và thường phải lưu trữ một khối lượng dữ liệu đáng kể, nên việc xây dựng các giải thuật sắp xếp sẽ cho phép tìm kiếm nhanh sẽ có ý nghĩa rất lớn Từ các vấn đề nêu trên giúp cho chúng em hiểu rõ mục đích đề tài là: Để sắp xếp các dãy số theo một trật tự, thứ tự tăng dần (hoặc là giảm dần) tùy theo vào yêu cầu của người muốn sắp xếp, sắp xếp theo thự tự để giúp cho việc tìm kiếm được dễ dàng hơn, qua đó có thể giúp chúng em hiểu rõ các ưu khuyết điểm của các phương pháp sắp xếp để so sánh tốc độ sắp xếp, từ đó để vận dụng các phương pháp đó trong việc sắp xếp theo yêu cầu của bài toán đặt ra một cách có hiệu quả và đó cũng là mục đích mà nhóm chúng em chọn đề tài về các thuật toán sắp xếp để nghiên cứu.

Tìm hiểu và vận dụng các lý thuyết cơ bản về một số phương pháp sắp xếp như phương pháp chọn trực tiếp (Selectsort), chèn trực tiếp (Insertsort), sắp xếp nổi bọt (Bubblesort), sắp xếp kiểu vun đống (Heapsort), sắp xếp nhanh (Quicksort), sắp xếp trộn (Mergesort) để cài đặt chương trình các giải thuật , cho phép sắp xếp một dãy số đã cho tuỳ ý thành một dãy số có thứ tự theo các thuật toán sắp xếp vừa nêu trên.

Giải thuật và chương trình cài đặt các thuật toán giải thuật sắp xếp ã Select sort ã Insert sort ã Bubble sort ã Merge sort ã Quick sort ã Heap sort

4 Mục đích nghiên cứu Để sắp xếp các dãy số theo một trật tự, thứ tự tăng dần (hoặc là giảm dần) tùy theo vào yêu cầu của người muốn sắp xếp, sắp xếp theo thự tự để giúp cho việc tìm kiếm được dễ dàng hơn, qua đó có thể giúp chúng em hiểu rõ các ưu khuyết điểm của các phương pháp sắp xếp để so sánh tốc độ sắp xếp, từ đó để vận dụng các phương pháp đó trong việc sắp xếp theo yêu cầu của bài toán đặt ra một cách có hiệu quả.

NỘI DUNG ĐỀ TÀI

GIẢI THUẬT SẮP XẾP CHỌN (SELECT SORT)

1 Lý thuyết thuật toán a Khái niệm

Thuật toán sắp xếp chọn (Select Sort) là sắp xếp một mảng bằng cách đi tìm phần tử có giá trị lớn nhất (giả sử với sắp xếp mảng giảm dần) trong dãy số chưa được sắp xếp và đổi chỗ cho phần tử nhỏ nhất đó với phần tử ở đầu dãy chưa được sắp xếp (không phải đầu mảng) Thuật toán sẽ chia mảng ra làm 2 mảng con:

- Mảng con đã được sắp xếp

- Mảng con chưa được sắp xếp

Tại mỗi bước lặp của thuật toán, phần tử nhỏ nhất ở mảng con chưa được sắp xếp sẽ được di chuyển về đoạn đã được sắp xếp. b Ý tưởng

Giả sử cần sắp xếp tăng dần một danh sách có n phần tử: a0, a1, a2,…, an-1 Chọn phần tử lớn nhất trong n phần tử của danh sách ban đầu Tìm và đổi vị trí phần tử lớn nhất với phần tử đầu tiên trong danh sách Lúc này, phần tử a0 sẽ có giá trị lớn nhất trong danh sách.

Sau đó, xem danh sách cần sắp xếp hiện tạo chỉ gồm n-1 phần tử, bắt đầu từ phần tử thứ 2 trong danh sách ban đầu, tức là danh sách hiện tại chỉ gồm a1, a2,

…, an-1 Lặp lại quá trình trên cho danh sách hiện tại đến khi danh sách chỉ còn 1 phần tử. c Các bước thực hiện

- Bước 2: Tìm phần tử a[max] trong dãy từ a[i] đến a[n-1]

- Bước 3: Đổi chỗ a[max] và a[i]

- Bước 4: Nếu i < n-1 thì gán i = i + 1, rồi lặp lại bước 2, ngược lại thì dừng d Ví dụ minh họa

- Dãy số ban đầu là

- Chọn phần tử lớn nhất và hoán đổi vị trí với phần tử đầu dãy

- Vị trí đầu tiên đã được sắp xếp, dãy 22, 25, 12, 11 là dãy chưa được sắp xếp

- Chọn tiếp phần tử lớn nhất và phần tử đầu tiên ở mảng chưa được sắp xếp

- Đổi vị trí phần tử lớn nhất và phần tử đầu dãy chưa được sắp xếp

- Chọn tiếp phần tử lớn nhất ở dãy 22, 12, 11

- Ta thấy 22 là số lớn nhất và trùng vị trí đầu tiên nên không hoán đổi

- Tiếp tục thực hiện với hai phần tử cuối, thu được dãy số cuối cùng:

2 Code (Bài làm sử dụng ngôn ngữ C++) a Code

- Hàm main: a Ví dụ chạy thử:

3 Tổng kết a Thời gian tính toán và độ phức tạp

- Độ phức tạp của thuật toán Select Sort là O(n 2 ) bởi có hai vòng lặp lồng nhau: + Một vòng lặp để chọn từng phần tử của mảng: O(n)

+ Một vòng lặp khác để so sánh phần tử đó với các phần tử khác của mảng: O(n)

 Vì vậy, độ phức tạp tính toán là: O(n) * O(n) = O(n*n) = O(n 2 )

- Không gian nhớ hỗ trợ: O(1) – là bộ nhớ bổ sung duy nhất được sử dụng cho các biến tạm thời trong khi hoán đổi hai giá trị trong mảng. b Ưu điểm, nhược điểm của thuật toán

+ Thực hiện tốt với dãy dữ liệu nhỏ.

+ Không hiệu quả khi làm việc với dãy dữ liệu lớn

+ Không bảo toàn thứ tự tương đối của các mục có khóa bằng nhau, nó không ổn định. c Ứng dụng:

Thuật toán sắp xếp chọn thường được ứng dụng trong thực tế, nhất là các trường hợp ưu tiên sự đơn giản trong triển khai hoặc đối với dãy dữ liệu nhỏ Ví dụ:

+ Sắp xếp một dãy học sinh theo lớp học hoặc tên trong một lớp học nhỏ.

+ Tổ chức các tệp trong một thư mục theo này tạo hoặc kích thước của chúng.+ Sắp xếp một bộ bài theo thứ tự tăng dần hoặc giảm dần.

GIẢI THUẬT SẮP XẾP CHÈN (INSERT SORT)

1 Lý thuyết thuật toán a Khái niệm

Insertion sort là một thuật toán sắp xếp, ta hiểu thuật toán này như sắp xếp những lá bài Ta sẽ chia bộ bài ra 2 phần là phần đã được sắp xếp (sorted list) và phần chưa được sắp xếp (unsorted list) Bắt đầu, phần đã được sắp xếp chỉ chứa giá trị đầu tiên của mảng, phần chưa được sắp xếp chứa tất cả các giá trị còn lại Việc sau đó là chuyển từng phần tử từ phần chưa được sắp xếp vào vị trí đúng trong phần đã được sắp xếp. b Ý tưởng sử dụng insert sort để sắp xếp dãy khóa theo chiều giảm dần

-Bước 1: Chọn bắt đầu từ khóa thứ 2, (vì khóa thứ nhất đã nằm trong phần đã được sắp xếp) Ta so sánh khóa hiện tại với các khóa trong phần đã sắp xếp.

-Bước 2: Nếu khóa chọn lớn hơn khóa đang so sánh, dịch chuyển khóa đang so sánh về phía sau một vị trí (sang phải) Tiếp tục quá trình này cho đến khi tìm được vị trí mà khóa chọn không còn lớn hơn khóa tại vị trí đó hoặc đã duyệt hết phần đã sắp xếp.

-Bước 3: Chèn khóa hiện tại vào vị trí trống.

-Bước 4: Lặp lại quá trình cho tất cả các khóa trong phần chưa sắp xếp. c Ví dụ minh họa:

Giả sử chúng ta có dãy khóa sau: 32,19,26,36,44,41 khóa đã được sắp xếp khóa chưa được sắp xếp

Minh họa bởi bảng sau:

Với bảng trên ta đã thực hiện:

- Coi dãy khóa được sắp xếp ban đầu là 32 Dãy chưa được sắp xếp là 19, 26, 36,

- Chọn khóa mang giá trị 19 và so sánh với dãy khóa được sắp xếp và chèn vào vị trí thích hợp (ở trường hợp này ta giữ nguyên vị trí) Ta được kết quả là:

- Chọn khóa mang giá trị là 26 và so sánh với dãy khóa đã được sắp xếp Ta thấy 19 6 khụng thực hiện đổi vớ trớ ã Tiếp theo lấy 6 so sỏnh với 34 ta thấy 6 < 34 ta thực hiện đổi vị trớ 2 số này. ã Tiếp theo so sỏnh 22 và 6 , 6 < 22 thực hiện đổi vị trị 2 số này. ã Cuối cựng là so sỏnh 6 và 11 ta thấy 6 < 11 thực hiện đổi vị trớ 2 số này , ta thu được kết quả cuối cùng như sau :

Thực hiện 4 bước lặp liên tiếp ta thu được bảng như sau :

Sau 4 bước lặp ta thu được mảng đã được sắp xếp theo thứ tự giảm dần như sau : A=[34,22,11,8,6]

2 Code (sử dụng ngôn ngữ C++ ) và chạy thử giải thuật bubble sort a Code

- Hàm main b Ví dụ chạy thử

4 Tổng kết a Thời gian tính toán và độ phức tạp

Thấy ngay số phép so sánh là luôn không đổi, tức không phụ thuộc vào tình trạng ban đầu của dãy Với i bất kỳ, ta luôn phải so sánh A[j] với A[j-1], mà j chạy từ n đến i+1, tức ta tốn n-i phép so sánh Thêm nữa, i chạy từ 1 đến n-1 Vậy ta tính được số phép so sánh tổng cộng: ∑(n-i) với i chạy từ 1 đến n-1 = (n-1) + (n-2) + … + 1 = n(n-1)/2.Do đó ta có độ phức tạp tính toán : O(n 2 ).

 Tổng kết lại, ta có độ phức tạp của Bubble Sort thuộc O(n 2 ) trong mọi trường hợp. b Ưu nhược điểm của thuật toán ã Ưu điểm:

+ Là thuật toán cơ bản, dễ hiểu, phù hợp cho người bắt đầu học về sắp xếp. + Đoạn code ngắn gọn, dễ nhớ. ã Nhược điểm:

+ Hiệu suất chậm nhất trong các thuật toán sắp xếp.

Sắp xếp nổi bọt thường được dùng để giới thiệu thuật toán sắp xếp vì tính đơn giản Mặc dù chậm nhưng Bubble Sort vẫn có giá trị trong thực tế, chẳng hạn như phát hiện lỗi hoán đổi phần tử trong mảng gần như được sắp xếp và sửa lỗi với độ phức tạp tuyến tính (2n) trong đồ họa máy tính.

GIẢI THUẬT SẮP XÉP TRỘN (MERGE SORT)

1 Lý thuyết thuật toán a Khái niệm:

- Là một giải thuật có độ phức tạp tính toán ở mức trung bình.

- Giải thuật sử dụng phương pháp chia để trị (Divide and Conquer) giống với giải thuật sắp xếp nhanh (Quick Sort). b Ý tưởng:

- Cho một mảng các dãy số không theo trật tự, giải thuật chia mảng cần sắp xếp thành 2 nửa.

- Tiếp tục lặp lại việc chia các nửa mảng đã chia ở trên cho đến khi không thể chia nữa (mảng giờ đang rỗng hoặc chỉ có một phần tử).

- Sau cùng, khi các nửa đã được sắp xếp, việc ‘trộn’ (kết hợp) sẽ được thực hiện Quá trình trộn là quá trình lấy 2 mảng nhỏ hơn đã được sắp xếp và kết hợp chúng với nhau và tạo ra một mảng lớn hơn. c Các bước thực hiện:

- Bước 1: Khai báo mảng (array), vị trí đầu tiên (left), vị trí cuối cùng (right), vị trí giữa (mid).

- Bước 2: Thực hiện quá trình “trộn” – kết hợp

Nếu left > right return o Tìm chỉ số nằm giữa mảng để chia mảng thành 2 nửa: mid = (left+right)/2 o Gọi đệ quy hàm mergeSort cho nửa đầu tiên mergesort(array, left, mid) o Gọi đệ quy hàm mergeSort cho nửa thứ hai mergesort(array, mid+1, right) o Gộp 2 nửa mảng đã sắp xếp ở 2 câu lệnh trên merge(array, left, mid, right) d Ví dụ minh họa:

Mảng gồm 7 phần tử arr[7] = {39, 28, 40, 5, 11, 81, 13} l r ¯ ¯

Giá trị 39 28 40 5 11 81 13 ã Bước 1: Kiểm tra nếu vị trớ bờn trỏi (chỉ số trỏi) nhỏ hơn vị trớ bờn phải (chỉ số phải) mà mình đang xét, nếu đúng, tính chỉ số phần tử giữa mảng. m = (0 + 6) / 2 = 3 ã Bước 2: Chia mảng ban đầu gồm 7 phần tử ban đầu thành 2 mảng lần lượt gồm

4 phần tử đầu tiên (từ vị trí đầu đến giữa mảng cha) và 3 phần tử cuối (từ vị trí sau giữa đến cuối mảng cha)

39 28 40 5 11 81 13 ã Bước 3: Lần lượt kiểm tra vị trớ phần tử đầu tiờn so với vị trớ phần tử cuối cựng của hai mảng vửa nhận được, nếu nhỏ hơn, tìm vị trí phần tử giữa của hai mảng con vừa nhận được. ã Bước 4: Lặp lại cỏc bước ở bước 2 với 2 mảng con ta vừa chia ở trờn, ta được 4 mảng con mới

39 28 40 5 11 81 13 ã Bước 5: Lặp lại bước 3 với 4 mảng con ta vừa nhận được, ta lần lượt tỡm được 4 vị trí giữa tương ứng với 4 mảng con trên. ã Bước 6: Lặp lại việc chia với cỏc mảng trờn, ta nhận được 7 mảng con

39 28 40 5 11 81 13 ã Bước 7: Lần lượt so sỏnh vị trớ đầu tiờn và vị trớ phần tử cuối của 7 mảng trờn, lúc này, vị trí đầu tiên không nhỏ hơn vị trí phần tử cuối của mảng, ta kết thúc quá trình chia. ã Bước 8: So sỏnh cỏc phần tử cho từng mảng con, và kết hợp chỳng thành một mảng lớn hơn theo thứ tự mình mong muốn

39 28 40 5 81 11 13 ã Bước 9: Lặp lại thao tỏc so sỏnh và “trộn” như bước trờn cho đến như được một mảng mới có số phần tử như ban đầu (gồm 7 phần từ)

Sau khi thực hiện giải thuật sắp xếp trộn (Merge sort), từ mảng các dãy số ban đầu arr[7] = {39 28, 40, 5, 11, 81, 13}, ta thu được một mảng được sắp xếp theo thứ tự giảm dần arr[7] = {81 40, 39, 28, 13, 11, 5}.

2 Code (Bài làm sử dụng ngôn ngữ C++) a Code

- Hàm main b Ví dụ chạy thử

- Đánh giá độ phức tạp thuật toán ã Độ phức tạp thuật toỏn o Trường hợp tốt: O(nlog(n)) o Trung bình: O(nlog(n)) o Trường hợp xấu: O(nlog(n)) ã Khụng gian bộ nhớ sử dụng: O(n)

- Ưu điểm và nhược điểm của thuật toán ã Ưu điểm: Sắp sếp nhanh hơn so với cỏc thuật toỏn cơ bản (Insertion Sort, Selection Sort, Interchage Sort), và đôi khi nhanh hơn Quick Sort trong một số trường hợp. ã Nhược điểm: thuật toỏn khú cài đặt, khụng nhận dạng được mảng đó được sắp, nhìn chung khó hơn các thuật toán khác.

- Ứng dụng ã Merge Sort rất hữu ớch để sắp xếp cỏc danh sỏch được liờn kết trong thời gian O (nLogn). ã Vấn đề đảo ngược số lượng ã Được sử dụng trong sắp xếp bờn ngoài

GIẢI THUẬT SẮP XẾP NHANH (QUICK SORT)

1 Lý thuyết giải thuật sắp xếp nhanh a Khái niệm

Quick Sort là thuật toán sắp xếp hiệu quả chia mảng dữ liệu thành các nhóm phân tử nhỏ hơn bằng cách so sánh mỗi phần tử với phần tử chốt Thuật toán chia mảng thành hai phần: mảng chứa các phần tử nhỏ hơn hoặc bằng phần tử chốt và mảng chứa các phần tử lớn hơn phần tử chốt.

Quá trình phân chia này diễn ra cho đến khi độ dài của các mảng con đều bằng

1 Với phương pháp đệ quy ta có thể sắp xếp nhanh các mảng con sau khi kết thúc chương trình ta được một mảng đã sắp xếp hoàn chỉnh Giải thuật sắp xếp nhanh tỏ ra khá hiệu quả với các tập dữ liệu lớn khi mà độ phức tạp là O(nlogn).

Kỹ thuật lựa chọn phần tử chốt đóng vai trò quan trọng trong khả năng tránh vòng lặp vô hạn khi hợp nhất mảng theo phương thức chia đôi lặp đi lặp lại Phần tử chốt được chọn tốt nhất là phần tử trung vị của danh sách Quy則 này đảm bảo rằng sau log2(n) lần chia, kích thước mảng con thu được bằng 1.

Dưới đây là một số cách chọn phần tử chốt: ã Chọn phần tử đứng đầu hoặc đứng cuối làm phần tử chốt. ã Chọn phần tử đứng giữa danh sỏch làm phần tử chốt. ã Chọn phần tử trung vị trong ba phần tử đứng đầu, đứng giữa và đứng cuối làm phần tử chốt. ã Chọn phần tử ngẫu nhiờn làm phần tử chốt Tuy nhiờn cỏch này rất dễ dẫn đến khả năng rơi vào các trường hợp đặc biệt. b Ý tưởng thuật toán QuickSort theo chiều giảm dần

Chọn một điểm làm chốt (gọi là pivot), sắp xếp mọi phần tử bên trái chốt đều lớn hơn chốt và mọi phần tử bên phải đều nhỏ hơn chốt, sau khi xong ta được 2 dãy con bên trái và bên phải, áp dụng tương tự cách sắp xếp này cho 2 dãy con vừa tìm được cho đến khi dãy con chỉ còn 1 phần tử c Các bước thực hiện :

- Bước 1: Chọn phần tử chốt.

- Bước 2: Khai báo 2 biến con trỏ để trỏ để duyệt 2 phía của phần tử chốt.

- Bước 3: Biến bên trái trỏ đến từng phần tử mảng con bên trái của phần tử chốt.

- Bước 4: Biến bên phải trỏ đến từng phần tử mảng con bên phải của phần tử chốt.

- Bước 5: Khi biến bên trái nhỏ hơn phần tử chốt thì di chuyển sang phải.

- Bước 6: Khi biến bên phải lớn hơn phần tử chốt thì di chuyển sang trái.

- Bước 7: Nếu không xảy ra trưởng hợp 5 và 6 thì tráo đổi giá trị 2 biến trái và phải.

- Bước 8: Nếu trái lớn hơn phải thì đây là giá trị chốt mới. d Ví dụ minh họa thuật toán QuickSort theo chiều giảm dần

2 Code (Bài làm sử dụng ngôn ngữ C++) a Phần code:

- Hàm QuickSort – hàm sắp xếp

- Hàm main b Ví dụ chạy thử:

3 Tổng kết a Thời gian tính toán và độ phức tạp

- Trường hợp xấu: O(n^2) b Ưu, nhược điểm:

- Ưu điểm: ã Tốc độ sắp xếp nhanh. ã Được sử dụng trong nhiều thư viện của cỏc ngụn ngữ như C++, Java,

- Nhược điểm: ã Phụ thuộc vào cỏch chọn phần tử chốt. ã Khụng ổn định. c Ứng dụng

GIẢI THUẬT SẮP XẾP VUN ĐỐNG ( HEAP SORT )

1 Lý thuyết thuật toán a Khái niệm

- Sắp xếp vun đống hay Heap Sort là một thuật toán sắp xếp phổ biến và hiệu quả trong lập trình Sắp xếp vun đống hoạt động bằng cách coi các phần tử của mảng như một loại cây nhị phân hoàn chỉnh đặc biệt được gọi là Heap Điều kiện tiên quyết là bạn phải biết về cấu trúc dữ liệu Heap và cây nhị phân hoàn chỉnh.

Đống là một cấu trúc dữ liệu đặc biệt dựa trên cấu trúc cây, trong đó:* Cây là cây nhị phân hoàn chỉnh.* Phần tử lớn nhất nằm ở nút gốc và các phần tử con của nó nhỏ hơn nút gốc.

… Một Heap như vậy được gọi là Max heap Nếu thay vào đó, tất cả các nút đều nhỏ hơn nút con của chúng, nó được gọi là Min Heap. b Ý tưởng và các bước thực hiện (sắp xếp theo thứ tự giảm dần)

Sắp xếp thực hiện trên 1 cây nhị phân hoàn chỉnh (NFHC) biểu diễn dãy khóa ban đầu, cây được lưu trữ kế tiếp Gồm 2 giai đoạn:

Giai đoạn 1 của xây dựng đống bao gồm 2 bước Đầu tiên, dựng cây NFHC thể hiện các khóa cho, theo quy ước xét khóa từ trái sang phải Cây NFHC được xây dựng theo nguyên tắc: gốc là khóa đầu dãy, tuần tự từ trên xuống dưới, từ trái sang phải, hết mức này đến mức khác Sau đó, biến đổi cây NFHC này thành một "đống" (heap) - một cây NFHC có mỗi nút được định danh bởi một giá trị khóa, sao cho khóa ở nút cha luôn nhỏ hơn khóa ở nút con Cây NFHC được lưu trữ trong máy, tại một vị trí chỉ số (i) là vị trí của nút cha.

Hai con có chỉ số là 2*i và 2*i+1 và ngược lại, chỉ số của nút cha là j/2 Theo định nghĩa đống, chỉ số của các nút con luôn nhỏ hơn chỉ số của nút cha, tức là k j /2

Ngày đăng: 16/08/2024, 14:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w