You are on page 1of 113

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

BÀI GIẢNG MÔN

CẤU TRÚC DỮ LIỆU & GT

Giảng viên: TS. Nguyễn Thu Hiên


Điện thoại: 0902002030
Email: cautrucdulieu.nth@gmail.com
Classcode:
TÀI LIỆU HỌC TẬP
 Học liệu bắt buộc

[1] Bài giảng cấu trúc dữ liệu và giải thuật. Học viện CNBCVT
[2] Dr. Clifford A. Shaffer - Data Structures and Algorithm Analysis in C++,
3rd Edition -Dover Publications (2011)
https://people.cs.vt.edu/~shaffer/Book/
 Học liệu tham khảo

[3]. George J. Pothering, Thomas L. Naps - Introduction to Data Structures and


Algorithm Analysis_ With C++-Brooks_Cole (1995)
[4] Weiss M.A. - Data structures and algorithm analysis in C++-Pearson (2014)

 Các kiến thức bổ trợ cho môn học

 Ngôn ngữ lập trình C++


 Phương pháp lập trình hướng đối tượng

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 2
Nội dung chương 4

 Các thuật toán Sắp xếp và tìm kiếm


 Sắp xếp chèn, chọn, nổi bọt,
 Thuật toán sắp xếp nhanh (Quick sort)
 Thuật toán sắp xếp kiểu vun đống (Heap sort)
 Thuật toán sắp xếp kiểu trộn (Merge sort)
 Một số thuật toán tìm kiếm: tuyến tính, nhị phân, dựa trên
bảng băm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 3
SẮP XẾP
 Khái niệm sắp xếp
 Bài toán sắp xếp
 Các thuật toán sắp xếp với thời gian chạy O(n)
 Các thuật toán sắp xếp với thời gian chạy O( )
 Các thuật toán sắp xếp nhanh O(nlogn)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 4
SẮP XẾP
Khái niệm sắp xếp

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 5
SẮP XẾP
Bài toán Sắp xếp:
 Đầu vào:
 Danh sách các đối tượng (mảng, danh sách,…)
 Đầu ra:
 Danh sách các đối tượng được sắp xếp theo 1 điều kiện nào đó
(khoá key)
 Điều kiện khoá key có thể dựa trên một hoặc nhiều thuộc tính của
đối tượng.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 6
SẮP XẾP
Bài toán Sắp xếp:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 7
SẮP XẾP
1.1. Thuật toán Bucket Sort (O(n))
 Bucket Sort rất hữu ích khi đầu vào có phân bố đều trên 1 khoảng.
 scatter-gather approach
 Bài toán:
 Sắp 1 tập gồm nhiều số thực trong khoảng từ 0.0 đến 1.0 và có phân bố
đều.
 Thuật toán Bucket như sau: (bucketsort.cpp)

BucketSort(arr[], n)
1. Tạo n bucket rỗng (list)
2. Với mỗi phần tử arr[i]: bổ sung
(chèn) arr[i] vào bucket[n*arr[i]].
3. Sx mỗi bucket bằng insertion sort
4. Hợp nhất tất cả các bucket đã
được sắp xếp (đọc lần lượt các
bucket)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 8
SẮP XẾP
1.1. Thuật toán Bucket Sort: (chap4/bucketsort.cpp)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 9
SẮP XẾP
1.1. Thuật toán Bucket Sort (chap4/bucketsort.cpp)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 10
SẮP XẾP
Mở rộng: SX với các số có phần nguyên

 1. Tìm phần tử lớn nhất và phần tử nhỏ nhất của mảng


 2. Tính phạm vi (range) của mỗi bucket
range = (max - min) / n
n is the number of buckets

 3. Tạo n bucket của phạm vi trên


 4. Đưa các phần tử mảng vào các bucket này
BucketIndex = ( arr[i] - min ) / range

 5. Sx mỗi bucket bằng insertion sort


 6. Hợp nhất tất cả các bucket đã được sắp xếp

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 11
SẮP XẾP
SX với các số có phần nguyên
 Ví dụ: Mở rộng mảng số nguyên

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 12
SẮP XẾP
SX với các số có phần nguyên
 Ví dụ: (bucketsort_list.cpp)
 Input :
 Unsorted array:
[ 9.8 , 0.6 , 10.1 , 1.9 , 3.07 , 3.04 , 5.0 , 8.0 , 4.8 , 7.68 ]
 No of buckets : 5
 Output :
 Sorted array:
[ 0.6 , 1.9 , 3.04 , 3.07 , 4.8 , 5.0 , 7.68 , 8.0 , 9.8 , 10.1 ]

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 13
SẮP XẾP
SX với các số có phần nguyên
 Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 14
SẮP XẾP
1.2. Các thuật toán sx với thời gian chạy O( )
 Nổi bọt (Bubble sort), Chọn (Selection sort), Chèn (insertion sort)
1.2.1 Sắp xếp Nổi bọt (Bubble sort)
 Là một TT đơn giản được sử dụng để sx 1 tập cho trước gồm n phần
tử được lưu trữ dưới dạng array.
• So sánh hai phần tử liền kề và hoán đổi chúng cho đến khi chúng không theo
thứ tự đã định.
• Cũng giống như sự chuyển động của bọt khí trong nước nổi lên mặt nước, mỗi
phần tử của mảng sẽ di chuyển về phía cuối trong mỗi lần lặp lại. Do đó, nó
được gọi là sắp xếp nổi bọt (bong bóng).
 Đầu vào: mảng n phần tử
 Đầu ra: mảng được sx (theo chiều tăng dần)
 Ý tưởng:
• So sánh tất cả các phần tử từng cặp một
• Sắp xếp dựa trên giá trị của chúng
www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 15
SẮP XẾP
1.2.1 Sắp xếp Nổi bọt (Bubble sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 16
SẮP XẾP
1.2.1 Sắp xếp Nổi bọt (Bubble sort)
 Example:
First Pass:
( 5 1 4 2 8 ) –> ( 1 5 4 2 8 ), Here, algorithm compares the first two elements, and swaps since 5 > 1.
( 1 5 4 2 8 ) –> ( 1 4 5 2 8 ), Swap since 5 > 4
( 1 4 5 2 8 ) –> ( 1 4 2 5 8 ), Swap since 5 > 2
( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ), Now, since these elements are already in order (8 > 5), algorithm does
not swap them.
Second Pass:
( 1 4 2 5 8 ) –> ( 1 4 2 5 8 )
( 1 4 2 5 8 ) –> ( 1 2 4 5 8 ), Swap since 4 > 2
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
→Bây giờ, mảng đã được sắp xếp, nhưng thuật toán không biết liệu nó có hoàn thành hay không →
cần một lần chuyển toàn bộ mà không có bất kỳ sự hoán đổi nào để biết nó được sắp xếp.
Third Pass:
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 17
SẮP XẾP
1.2.1 Sắp xếp Nổi bọt (Bubble sort)
 Trong thuật toán trên, tất cả các so sánh được thực hiện ngay cả khi mảng đã
được sắp xếp. Điều này làm tăng thời gian thực hiện.
 Để giải quyết vấn đề này, biến phụ thể hiện việc hoán đổi (swapped) được đưa
vào.
 Giá trị của biến swapped được đặt là true nếu xảy ra hoán đổi các phần tử. Nếu
không, nó được đặt là false.
 Sau một lần lặp, nếu không có hoán đổi, giá trị của swapped sẽ là false. Điều
này có nghĩa là các phần tử đã được sắp xếp và không cần thực hiện lặp lại nữa
→ giảm thời gian thực hiện và giúp tối ưu hóa việc sắp xếp nổi bọt.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 18
SẮP XẾP
1.2.1 Sắp xếp Nổi bọt (Bubble sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 19
SẮP XẾP
1.2.1 Sắp xếp Nổi bọt (Bubble sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 20
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)
 Là TTsx đơn giản nhất.
 Đầu vào: mảng n phần tử
 Đầu ra: mảng được sx (theo thứ tự tăng dần)
 Ý tưởng:
 Sắp xếp một mảng bằng cách liên tục tìm phần tử nhỏ nhất (xét
theo thứ tự tăng dần) từ phần chưa được sắp xếp và đặt nó ở đầu.
 Thuật toán duy trì hai mảng con trong một mảng nhất định.
• 1) Mảng con đã được sắp xếp.
• 2) Mảng con còn lại chưa được sắp xếp.
Trong mỗi lần lặp lại sắp xếp chọn, phần tử nhỏ nhất (xét theo thứ tự tăng
dần) từ mảng con chưa được sắp xếp sẽ được chọn và chuyển đến mảng con
đã sắp xếp.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 21
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)
Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 22
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)
Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 23
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)
Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 24
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)
Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 25
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)
Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 26
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 27
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 28
SẮP XẾP
1.2.2 Sắp xếp chọn (Selection sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 29
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)
 Sắp xếp chèn là một thuật toán sắp xếp đặt một phần tử chưa
được sắp xếp vào vị trí thích hợp của nó trong mỗi lần lặp.
 Sắp xếp chèn hoạt động tương tự như cách sắp xếp các quân bài
(key) trên tay vào bộ bài đã được sắp xếp trong trò chơi bài.

 Ý tưởng của TT:


 Giả định: thẻ đầu tiên đã được sắp xếp, sau đó chọn một thẻ chưa
được sắp xếp. Nếu thẻ chưa được sắp xếp lớn hơn thẻ trên tay, nó
sẽ được đặt ở bên phải, ngược lại là bên trái.
 Tương tự, các thẻ chưa được sắp xếp khác sẽ được lấy và đặt vào
đúng vị trí của chúng như trên.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 30
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)
 Thuật toán chèn:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 31
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)
 Ví dụ

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 32
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)
 Ví dụ

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 33
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)
 Ví dụ

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 34
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)
 Ví dụ

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 35
SẮP XẾP
1.2.3 Sắp xếp chèn (Insertion sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 36
SẮP XẾP
1.2.3 Sắp xếp chèn
Danh sách liên kết (mảng: đã đề cập ở trên)
 1) Tạo danh sách đã sắp xếp trống
 2) Duyệt danh sách đã cho, thực hiện theo các bước sau cho mọi
nút.......
• Chèn nút hiện tại theo cách được sắp xếp trong danh sách đã sắp xếp.
 3) Thay đổi phần đầu của danh sách liên kết đã cho trở thành
phần đầu của danh sách đã sắp xếp.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 37
SẮP XẾP
1.2.3 Sắp xếp chèn
Mở rộng: Sắp xếp chèn nhị phân (Binary Insertion Sort )
 Sử dụng tìm kiếm nhị phân để giảm số lượng so sánh trong sắp
xếp chèn thông thường.
 Binary Insertion Sort sử dụng tìm kiếm nhị phân để tìm vị trí
thích hợp để chèn mục đã chọn ở mỗi lần lặp.
 Trong sắp xếp chèn thông thường: cần O (n) so sánh (ở lần lặp
thứ n) trong trường hợp xấu nhất → có thể giảm nó thành:
O(log n) bằng cách sử dụng tìm kiếm nhị phân.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 38
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
 TT sx chọn và chèn có thời gian chạy trong trường hợp xấu
nhất là O( ).
 Khi kích thước đầu vào tăng → mất nhiều thời gian để thực thi.
 SX trộn sẽ chạy trong thời gian O(nlogn) trog tất cả các trường
hợp.
 Là một trong những thuật toán sắp xếp phổ biến nhất dựa trên
nguyên tắc chia để trị.
 Một bài toán lớn được chia thành nhiều bài toán nhỏ. Mỗi bài
toán nhỏ được giải quyết riêng lẻ (trị). Cuối cùng, các bài toán
nhỏ được kết hợp để có lời giải cho bài toán lớn ban đầu.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 39
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Ví dụ:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 40
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 41
SẮP XẾP
1.2.4 Sắp xếp trộn
 Divide and Conquer Strategy

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 42
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
MergeSort Algorithm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 43
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 44
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 45
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Viết code:
Sự khác biệt đáng chú ý giữa bước trộn mô tả ở trên và bước trộn sử dụng để sắp
xếp trộn là chỉ thực hiện hàm trộn trên các mảng con liên tiếp.
Đây là lý do tại sao chỉ cần mảng, vị trí đầu tiên, chỉ số cuối cùng của mảng con
đầu tiên (có thể tính chỉ số đầu tiên của mảng con thứ hai) và chỉ số cuối cùng
của mảng con thứ hai.
Nhiệm vụ: gộp hai mảng con A [p..q] và A [q + 1..r] để tạo ra một mảng đã sắp
xếp A [p..r]. Vì vậy, các đầu vào cho hàm là A, p, q và r.
Hàm trộn hoạt động như sau:
1. Tạo bản sao của các mảng con L ← A [p..q] và M ← A [q + 1..r].
2. Tạo ba con trỏ i, j và k; i duy trì chỉ số hiện tại của L, bắt đầu từ 1; j duy trì chỉ số
hiện tại của M, bắt đầu từ 1; k duy trì chỉ số hiện tại của A [p..q], bắt đầu từ p.
3. Cho đến khi đạt đến cuối chỉ số cuối cùng của L hoặc M, hãy chọn phần tử lớn hơn
trong số các phần tử từ L và M và đặt chúng vào đúng vị trí tại A [p..q]
4. Khi đã sử dụng hết các phần tử trong L hoặc M, hãy chọn các phần tử còn lại và đưa
vào A [p..q]
www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 46
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Viết code:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 47
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 53
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Bài tập: Đếm số đảo ngược trong mảng sử dụng sx trộn
Với hai phần tử a [i] và a [j] tạo thành 1 đảo ngược nếu a [i]> a [j] và i <j.
Đầu vào: arr[] = {8, 4, 2, 1}
Đầu ra: 6 - (8, 4), (4, 2), (8, 2), (8, 1), (4, 1), (2, 1).
PHƯƠNG PHÁP 1 (Đơn giản)
Phương pháp tiếp cận: Duyệt qua mảng và đối với mọi chỉ mục, tìm số phần tử
nhỏ hơn ở phía bên phải của mảng bằng cách sử dụng một vòng lặp lồng nhau.
Tính số lần cho tất cả chỉ mục trong mảng và in ra.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 54
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Bài tập: Đếm số đảo ngược trong mảng sử dụng sx trộn
Với hai phần tử a [i] và a [j] tạo thành 1 đảo ngược nếu a [i]> a [j] và i <j.
PHƯƠNG PHÁP 2 (sx trộn)
Phương pháp tiếp cận: số lần đảo ngược = số lần đảo ngược trong mảng con bên
trái, mảng con bên phải và merge ().

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 55
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Bài tập: Đếm số đảo ngược trong mảng sử dụng sx trộn
Với hai phần tử a [i] và a [j] tạo thành 1 đảo ngược nếu a [i]> a [j] và i <j.
PHƯƠNG PHÁP 2 (sx trộn)
Trong quá trình trộn, gọi i chỉ mục mảng con trái và j cho
mảng con phải. Tại bất kỳ bước nào trong merge (), nếu a
[i] > a [j], thì có (mid - i) đảo ngược (vì các mảng con trái
và phải đã được sắp xếp, nên tất cả các phần tử còn lại
trong mảng con trái (a [i + 1], a [i + 2]… a [mid]) sẽ lớn
hơn a [j])

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 56
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Bài tập: Đếm số đảo ngược trong mảng sử dụng sx trộn
Với hai phần tử a [i] và a [j] tạo thành 1 đảo ngược nếu a [i]> a [j] và i <j.
PHƯƠNG PHÁP 2 (sx trộn) - Thuật toán:
 Ý tưởng như sắp xếp trộn: chia mảng thành hai nửa bằng nhau hoặc gần
như bằng nhau trong mỗi bước cho đến khi đạt được trường hợp cơ sở.
 1. Tạo hàm trộn đếm số lần đảo ngược khi hai nửa của mảng được trộn
 2. Tạo hai chỉ số i và j, i là chỉ số của nửa đầu và j là chỉ số của nửa
sau. nếu a [i] > a [j] thì có (mid - i) đảo ngược.
 3. Tạo hàm đệ quy để chia mảng thành các nửa và tính số đảo ngược: 2
mảng con, mảng trộn. Trường hợp cơ bản của đệ quy là khi chỉ có một
phần tử trong nửa đã cho.
 4. In câu trả lời
PHƯƠNG PHÁP 3 (Heapsort + Bisection): tự tìm hiểu

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 57
SẮP XẾP
1.2.4 Sắp xếp trộn (Merge sort)
Bài tập: sắp xếp trộn danh sách liên kết

Bài tập: sắp xếp trộn danh sách liên kết kép

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 60
SẮP XẾP
1.3. Sắp xếp nhanh (Quick sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 61
SẮP XẾP
1.3. Sắp xếp nhanh (Quick sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 62
SẮP XẾP
1.3. Sắp xếp nhanh (Quick sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 63
SẮP XẾP
1.3. Sắp xếp nhanh (Quick sort)

Trường hợp TQ

Xét thêm TH cơ sở
để hoàn thiện

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 67
SẮP XẾP
1.3. Sắp xếp nhanh (Quick sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 70
SẮP XẾP
1.3. Sắp xếp nhanh (Quick sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 71
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 72
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 73
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 74
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)
Tổng kết:
Heap là 1 CTDL cây đặc biệt, thoả mãn các thuộc tính sau:
 Thuộc tính hình dạng: Heap là cây nhị phân
 Mọi nút trong có đúng 2 nút con, trừ nút trong cuối cùng có thể
có 1 nút con.
 Nếu cây có độ cao h thì tất cả lá sẽ có bậc h hoặc h-1.
 Thuộc tính giá trị Heap:
 Giá trị nút cha ≥ hoặc ≤ giá trị nút con.
• Nếu cha ≥ con → Max-Heap
• Nếu cha ≤ con → Min-Heap

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 75
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)
Tổng kết:
 Sử dụng mảng a gồm n phần tử ,…, để biểu diễn
heap có n nút.
 a[i] là nút có con trái là a[2i+1] và con phải là a[2i+2].
→ Mảng a là mảng biểu diễn Max-Heap nếu:
a[i] a[2i+1] và a[i] ≥ a[2i+2] với i=1,…,n/2.
→ Mảng a là mảng biểu diễn Min-Heap nếu:
a[i] ≤a[2i+1] và a[i] ≤ a[2i+2] với i=1,…,n/2.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 76
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 77
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 78
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 79
SẮP XẾP
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 80
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 83
1.4 Sắp xếp vun đống (Heap sort)
Tổng kết: Thuật toán Heap sort

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 86
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 88
1.4. Sắp xếp vun đống (Heap sort)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 89
2. Tìm kiếm
 Bài toán tìm kiếm
 Tìm kiếm tuần tự (Linear Search)
 Tìm kiếm nhị phân trên mảng (Binary Search)
 Tìm kiếm cây nhị phân (Binary Tree Search)
 Cài đặt cây tìm kiếm nhị phân: Hướng thủ tục, Hướng đối
tượng)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 90
2. Tìm kiếm
2.1 Bài toán tìm kiếm
 Khi người dùng yêu cầu dữ liệu nào đó, MT phải tìm kiếm dữ
liệu trong bộ nhớ và hiển thị cho người dùng xem.
 MT cần có TT tìm kiếm để tìm kiếm nhanh dữ liệu trong BN.
 Bài toán tìm kiếm:
 Đầu vào: mảng/danh sách gồm n phần tử
• k: phần tử cần tìm kiếm
 Đầu ra: vị trí phần tử k trong mảng/danh sách
 Thuật toán tìm kiếm:
 1. Tìm kiếm tuần tự
 2. Tìm kiếm nhị phân

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 91
2. Tìm kiếm
2.2 Tìm kiếm tuần tự
 Đầu vào: a={56,34,72,3,29,31,47,10,70,15,83,40}
• k=20 (ko có: trả về -1)
 Đầu ra: vị trí phần tử k trong mảng a.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 92
2. Tìm kiếm
2.3 Tìm kiếm nhị phân
 Được sử dụng cho 1 mảng hoặc danh sách đã được sắp xếp với
kích thước lớn.
 Đặc điểm:
 Hiệu quả để tìm kiếm với dữ liệu lớn
 Độ phức tạp thời gian O(logn) (rất tốt)
 Cài đặt dễ dàng
 Hạn chế: mảng hoặc danh sách các phần tử phải được sắp xếp.
 Hoạt động của thuật toán tìm kiếm nhị phân: 2 cách
 Phương pháp lặp
 Phương pháp đệ qui: tiếp cận chia để trị

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 93
2. Tìm kiếm
2.3 Tìm kiếm nhị phân
Ví dụ: Cho mảng sau, thực hiện tìm kiếm x=4.

1. Thiết lập 2 con trỏ: low, high ở các vị trí thấp nhất và cao nhất tương ứng.
2. Tìm phần tử ở giữa mảng (mid):

3. Nếu x==mid, trả về mid, nếu không: so sánh phần tử cần tìm với mid.
4. Nếu x>mid: so sánh x với phần tử ở giữa của các phần tử bên phải của mid.
Điều này được thực hiện qua việc thiết lập low → low=mid+1.
5. Nếu x<mid: so sánh x với phần tử ở giữa của các phần tử bên trái của mid.
Điều này được thực hiện qua việc thiết lập high → high=mid-1.
6. Lặp lại các bước 1 → bước 5 cho đến khi low==high.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 94
2. Tìm kiếm
2.3 Tìm kiếm nhị phân

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 95
2. Tìm kiếm
2.3 Tìm kiếm nhị phân

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 96
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm (cây tìm kiếm nhị phân: BST)
2.4.1 Cây nhị phân tìm kiếm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 97
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm (cây tìm kiếm nhị phân: BST)
2.4.1 Cây nhị phân tìm kiếm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 98
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm (cây tìm kiếm nhị phân: BST)
2.4.1 Cây nhị phân tìm kiếm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang 99
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm
2.4.1 Cây nhị phân tìm kiếm

 Giá trị khoá (key-data) của nút trong (43):


 Lớn hơn giá trị khoá của tất cả các nút ở cây con trái.
 Nhỏ hơn giá trị khoá của tất cả các nút ở cây con phải.
www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
100
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm
2.4.1 Cây nhị phân tìm kiếm

 Các nút con trái và phải cũng là cây nhị phân tìm kiếm.
 Lá cực trái là giá trị nhỏ nhất (3), lá cực phải là giá trị lớn nhất (35)
 Biểu diễn nút:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
101
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm
2.4.1 Cây nhị phân tìm kiếm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
102
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm
2.4.2 Tìm kiếm trên BST

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
103
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm
2.4.2 Tìm kiếm trên BST

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
104
2. Tìm kiếm
2.4 Tìm kiếm trên cây nhị phân tìm kiếm
2.4.2 Tìm kiếm trên BST
Xét bài toán: Tạo cây BST với
- Đầu vào: mảng dữ liệu a (tên các môn học: mathematics, physics,
geography, zoology, meteorology, geology, psychology,
chemistry.
- Đầu ra: cây BST biểu diễn mảng a (sắp xếp theo abc)

- Cách làm:
- Tạo mỗi nút ứng với 1 phần tử của mảng
- Lần lượt bổ sung từng nút vào cây BST.
www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
105
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Thuật toán: Bổ sung 1 nút (15) vào
cây BST
So sánh giá trị nút gốc với giá trị nút k:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
106
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Thuật toán: Bổ sung 1 nút (15) vào
cây BST
So sánh giá trị nút gốc với giá trị nút k:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
107
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
108
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
109
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
110
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Tình huống 4:
Các bước thực hiện:
1.Tìm 1 giá trị nhỏ nhất/lớn nhất
(min/max) trong cây con phải/trái;
2.Thay nút x bằng nút min/max.
3.Xoá nút min/max trên cây con
phải/trái.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
111
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
112
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Tổng kết cách thức cài đặt cây bằng
mảng (Hướng thủ tục: XD các hàm)
1. Tạo 1 cấu trúc node
2. Tìm kiếm giá trị k trên cây T
3. Bổ sung giá trị k vào cây T
4. Loại bỏ nút trên cây T
5. Duyệt cây (trước, giữa, sau)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
113
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Tổng kết cách thức cài đặt cây
bằng mảng
5. Duyệt cây (trước, giữa, sau):
 PreOrder: Node -> Left -> Right
 InOrder: Left -> Node -> Right
 PostOrder: Left -> Right -> Node

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
114
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Tổng kết cách thức cài đặt cây
bằng mảng
1. Tạo 1 cấu trúc node
2. Tìm kiếm giá trị k trên cây T
3. Bổ sung giá trị k vào cây T
4. Loại bỏ nút trên cây T
5. Duyệt cây (trước, giữa, sau)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
115
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Tổng kết cách thức cài đặt cây
bằng mảng (Hướng đối tượng)
1. Tạo 1 cấu trúc node
2. Cài đặt lớp BST: nút gốc, các pt
private (insert, tìm kiếm, duyệt), các
pt public (hàm tạo, đặt nút=null, nạp
chồng để bảo vệ dữ liệu)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
116
2. Tìm kiếm
2.4.2 Tìm kiếm trên BST
Bài tập:
Xây dựng lớp cây BST, sau đó thực hiện xây dựng 1 CT tra
cứu từ điển có các chức năng sau:
1. Đọc dữ liệu từ điền nạp vào cây từ tệp
2. Bổ sung từ mới vào cây
3. Xoá bỏ 1 từ khỏi cây
4. Tìm kiếm từ
5. Lưu cây vào tệp

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
117
2. Tìm kiếm
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
 Bảng băm
 Tìm kiếm trên bảng băm
 Hàm băm
 Quản lý xung đột
 Cấu trúc dữ liệu bảng băm
 Bảng băm trong C++
 Ứng dụng của bảng băm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
118
2. Tìm kiếm
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Bảng băm:
 Là một cấu trúc dựa trên mảng kết hợp để lưu trữ các phần tử. Mỗi
phần tử là một cặp: Khoá-Giá trị (key-value).
 Một bảng băm sử dụng một hàm băm, h(k) →index(hash code, mã
băm)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
119
2. Tìm kiếm
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Bảng băm:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
120
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Tìm kiếm trên bảng băm
Các thuật toán tìm kiếm sử dụng bảng băm bao gồm 2 bước:
1. Sử dụng 1 hàm băm h(k), biến khoá (key) →index(hash code)
2. Từ chỉ mục index sẽ tìm ra giá trị (value).
Lý tưởng: mỗi khoá key ↔ 1 chỉ mục index khác nhau (khó khả
thi)
Thực tế: nhiều khoá khác nhau ↔ 1 chỉ mục index →giải quyết
xung đột

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
121
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Hàm băm
 Là 1 hàm bất kỳ, được sử dụng để ánh xạ 1 tập dữ liệu có kích thước
tuỳ ý thành 1 tập dữ liệu có kích thước cố định, nó sẽ phụ thuộc vào
bảng băm.
 Giá trị được trả về bởi 1 hàm băm được gọi là giá trị băm (hash
value)
 Các yêu cầu đối với hàm băm:

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
122
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Hàm băm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
123
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Hàm băm

Cách làm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
124
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Hàm băm

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
125
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Quản lý xung đột
 Xung đột xảy ra khi các cặp phần tử được ánh xạ vào cùng 1 giá trị
băm
 Giải quyết xung đột:
1.Separate Chaining: biến mỗi ô trong bảng băm thành 1 danh sách liên
kết chứa các giá trị băm giống nhau.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
126
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Quản lý xung đột
2. Open Addressing: tất cả các phần tử được lưu trong bảng băm→kích thước
bảng băm ≥tổng số key. Kích thước bảng băm vẫn có thể phải tăng.
Các kỹ thuật mở rộng địa chỉ:
• Thăm dò tuyến tính (linear probing): tìm ô kế tiếp
• Thăm dò bình phương (quadratic probing): tìm ô trong lần lặp thứ i.
• Hai hàm băm: sử dụng hàm băm hash2(x) tìm ô i*hash2(x) cho lần lặp thứ i.
Các phương thức:
• Insert(k): tìm kiếm cho đến khi thấy 1 ô trống, sau đó bổ sung k.
• Search(k): tìm kiếm cho đến kh key của ô bằng k hoặc ô trống được tìm thấy.
• Delete(k): key bị xoá được đánh dấu “deleted”.
Chú ý:
Insert có thể bổ sung 1 phần tử vào ô đánh dấu “deleted”.
Search không dừng lại ở ô đánh dấu “deleted”.
www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
127
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Quản lý xung đột

Sử dụng phương pháp thăm dò tuyến tính: xung đột, thêm vào ô kế tiếp (85, 92)

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
128
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Cấu trúc dữ liệu bảng băm:
Mỗi bảng băm = 1 mảng (mỗi phần tử mảng lưu 1 danh sách các phần tử,
N: kích thước mảng)
Các phương thức:

Bảng băm trong C++


Trong C++ không xây dựng cấu trúc bảng băm, tuy nhiên cấu trúc Map
và set chính là bảng băm.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
129
2.4.3 Tìm kiếm theo chỉ mục (địa chỉ) sử dụng bảng băm
Bảng băm trong C++
Trong C++ không xây dựng cấu trúc bảng băm, tuy nhiên cấu trúc Map
và set chính là bảng băm.

www.ptit.edu.vn Nghiêm cấm quay video bài giảng này để đưa lên các trang mạng Trang
130

You might also like