Tải bản đầy đủ (.pdf) (32 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - Trường ĐH Văn Lang

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.02 MB, 32 trang )

KHOA CÔNG NGHỆ THÔNG TIN

CẤU TRÚC DỮ LIỆU
VÀ GIẢI THUẬT
(Data Structures And Algorithms)

BÀI 4: CÁC GIẢI THUẬT SẮP XẾP NÂNG CAO


01. QUICK SORT

NỘI
DUNG

02. MERGE SORT
03. HEAP SORT


01. QUICK SORT
•Thuật tốn sắp xếp Quick Sort (sắp xếp nhanh) phức tạp
hơn một chút so với các thuật toán sắp xếp khác.
•Cho một danh sách các phần tử, thuật toán quick sort là
thuật toán chia để trị, đệ quy bao gồm 3 phần chính:
1. Chọn một giá trị làm mốc (pivot value)
2. Phân vùng danh sách làm hai: danh sách trái (nhỏ
hơn giá trị mốc), và danh sách phải (lớn hơn hoặc
bằng giá trị mốc)
3. Đệ quy cho danh sách trái, đệ quy cho danh sách phải
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com



KHOA CÔNG NGHỆ THÔNG TIN

3


01. QUICK SORT
1. Lấy một giá trị làm mốc: Lấy giá trị lớn nhất trong hai giá trị bên trái (3)
3

1

4

1

5

9

2

6

5

3

2. Phân vùng danh sách thành hai danh sách: một danh sách chứa các phần tử có
giá trị < mốc, một danh sách chứa các phần tử có giá trị ≥ mốc

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

Danh sách 1 < mốc =

2

1

1

Danh sách 2 ≥ mốc =

4

5

9

3

6

5

3

3. Đệ quy
Danh sách 1 2

1 1
xong

1

1
2
xong

Đây là danh sách được sắp cuối cùng…
KHOA CÔNG NGHỆ THÔNG TIN

Danh sách 2
4

4
3

3 3
xong

5

9

3

3
4
xong


5

6

5

3

9

6

5

6

5 5
xong

5
6
xong

5
9
xong

4



01. QUICK SORT
3

l là biên trái, r là biên phải

l
3 1

pval 3

l
3 1

l từ biên trái tìm ptử ≥ pval, r từ biên
phải tìm ptử < pval
Nếu l != r Hốn vị ptử l với r
Khi l < r, tìm tiếp l và r
Nếu l != r Hoán vị ptử l với r
Khi l < r, tìm tiếp l và r. Dừng khi l ≥
r
Tách làm 2 danh sách dựa vào chỉ mục l
KHOA CÔNG NGHỆ THÔNG TIN

4
4
4

1
1

1

5
5
5

9

2

6

5

3

9

2

6

5

r
3

9

r

2 6

5

3

5

3

l
2 1

4

1

5

9

r
3 6

2

1

l
4


r
1

5

9

3

6

5

3

1

l
1

r
4

5

9

3


6

5

3

2

1

l,r
1 4 5

9

3

6

5

3

2

1

1

9


3

6

5

3

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

1

2

4

5

5


01. QUICK SORT
Giao diện

public int[] sort( int[] list )
{
return (qsort( list, 0, list.Length - 1 ));

} // Sort
private int[] qsort( int[] list, int left, int right )
{
int pval, l = left, r = right, temp;
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

if ( l == r )
return list;
Lấy giá trị lớn nhất
trong hai số bên trái
trong danh sách
KHOA CÔNG NGHỆ THÔNG TIN

if ( list[l] >= list[l+1] )
pval = list[l];
else
pval = list[l+1];
6


01. QUICK SORT
Ở đây ta phân vùng danh sách thành hai danh sách. Đây là hai danh sách ảo
là danh sách được xác định bởi các chỉ số, không phải hai mảng riêng biệt…
while ( l < r )
{
while (( list[l] < pval ) && ( l < r ))
Chụm vào từ bên phải và bên
l ++;

trái cho đến khi tìm thấy các giá
while (( list[r] >= pval ) && ( l < r ))
trị để hoán vị hoặc ta chạy hết
r --;
các phần tử trong danh sách.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

7


01. QUICK SORT
if ( l != r )
{
temp = list[l];
list[l] = list[r];
list[r] = temp;

Nếu chỉ mục trái khác chỉ
mục phải là ta đã tim được
các giá trị để hoán vị, và ở
đây ta thực hiện hoán vị…

} // if
} // while

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!


ibaotu.com

Nếu xảy ra bất kỳ hốn vị
nào thì ta đệ quy; ngược
lại, ta kết thúc…

KHOA CÔNG NGHỆ THÔNG TIN

qsort( list, left, l-1 );
qsort( list, l, right );
return list;
} // qsort

8


01. QUICK SORT
Hiệu năng của Quick Sort bị
tác động bởi phần tử được
chọn làm điểm mốc.
Hiệu xuất của quick sort trong
trường hợp xấu nhất, O(n2).

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

Trường hợp tổng quát, quick
sort có sự thực thi O(n log n)

thời gian biểu thị ở bên phải…
Quick Sort được coi là sắp
xếp nhanh nhất
Ưu điểm:
cực nhanh

KHOA CÔNG NGHỆ THÔNG TIN

Nhược điểm:
rất phức tạp
đệ quy ồ ạt
9


02. MERGE SORT
•Merge Sort (Sắp Xếp Trộn) cũng là thuật tốn đệ quy, chia
để trị
•Các bước của thuật tốn là:
̶ Đệ quy phân vùng danh sách đầu vào thành hai danh
sách, L1 và L2 khoảng n/2 phần tử mỗi danh sách cho
đến khi ta có tập các danh sách với 1 hoặc 2 phần tử
trong mỗi danh sách.
̶ Đến đây, mỗi L1 và L2 được trộn lại thành danh sách
duy nhất S, các phần tử của L1 và L2 được đưa vào
danh sách S theo thứ tự.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN


10


02. MERGE SORT
Merge Sort tương đối đơn giản như sau:

Kết thúc khi danh
sách chỉ có 1
phần tử

void MergeSort(int[] arr, int left, int right)
{
v
if(left < right)
{
v
int mid = (left + right)
/ 2;
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

Xác định phần tử giữa
để chia danh sách

MergeSort(arr, left, mid);
v
MergeSort(arr, mid + 1, right);


Chia thành hai tập
L1, L2 và đệ quy

v right);
Merge(arr, left, mid,

}
}

KHOA CÔNG NGHỆ THÔNG TIN

Trộn L1 và L2 với nhau cho
ra danh sách được sắp xếp
11


02. MERGE SORT
void Merge(int[] arr, int left, int mid, int right)
{
int[] leftarray = new int[mid - left + 1];
int[] rightarray = new int[right - mid];
Array.Copy(arr, left, leftarray, 0, mid - left + 1);
Array.Copy(arr, mid + 1, rightarray, 0, right - mid);
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

Tạo hai mảng con leftarray
(L1), rightarray (L2)


KHOA CÔNG NGHỆ THÔNG TIN

12


02. MERGE SORT
int i = 0;
int j = 0;
for(int k = left; k < right + 1; k++){
if(i == leftarray.Length){
arr[k] = rightarray[j]; j++;
}
else if(j == rightarray.Length){
arr[k] = leftarray[i]; i++;
}
else if(leftarray[i] <= rightarray[j]){
arr[k] = leftarray[i]; i++;
}
else{
arr[k] = rightarray[j]; j++;
}
}

Trộn các phần tử trong
mảng leftarray, mảng
rightarray vào mảng
arr theo thứ tự giá trị
phần tử

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!


ibaotu.com

}
KHOA CÔNG NGHỆ THÔNG TIN

13


02. MERGE SORT
3
3
3
3

1

1

4

1
1

1

5

9


2

6

5

4

1

4

9

1
4

5

5

1

9
9

5

2


3
2

6

5

3
5

6

2

6

3

5

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

3

ibaotu.com

1

3
1


9
2

3
1

3

4
1

1
1

3

4
1

KHOA CÔNG NGHỆ THÔNG TIN

2
9
2

5

6
2


5
1

9

2

3

3

4

5

5

3
3

6

5

6

5

9


9

14


02. MERGE SORT
•Ta có thể thấy rằng thời gian chạy của merge sort cho danh sách có
độ dài n là T(n)
•Vì ta cắt đơi danh sách và sau đó đệ quy, ta có thể kết luận:
2T(n/2)+n
•Lưu ý là ta cộng them n bước để trộn kết quả hai danh sách
•Hiệu năng trung bình của Merger Sort là O(n log n)
•Merge Sort u cầu khơng gian nhớ O(n)
•Merge Sort có thể là một lựa chọn tối ưu vì nó thực thi ngang bằng
với Quick Sort nhưng sử dụng ít bộ nhớ hơn
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

15


03. HEAP SORT
•Heap Sort (Sắp xếp vun đống) là thuật toán sắp xếp dựa trên cấu
trúc dữ liệu Binary Heap (Đống nhị phân). Tìm phần tử lớn nhất và
đặt nó ơ cuối danh sách; lặp lại cho danh sách gồm các phần tử cịn
lại.

•Binary Heap là gì?
▪ Binary Heap là một Complete Binary Tree (cây nhị phân
hoàn chỉnh) với nút cha có giá trị lớn hơn giá trị hai nút con.
▪ Cây nhị phân hoàn chỉnh là cây nhị phân trong đó mọi cấp,
ngoại trừ cấp cuối cùng, được lấp đầy hồn tồn.
• Mảng biểu diễn cho đống nhị phân. Nếu nút cha lưu ở chỉ mục i thì
nút con bên trái là 2*i+1, và nút con bên phải là 2*i+2.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

16


03. HEAP SORT
12 11 13 5 6 7

12

13
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

11

5


11

13

6

7

Cây nhị phân hồn chỉnh
(Complete Binary Tree)

KHOA CƠNG NGHỆ THƠNG TIN

5

12

6

7

Đống nhị phân (Binary Heap)

17


03. HEAP SORT
•Thuật tốn Heap Sort cho sắp xếp tăng dần:
1. Tạo Binary Heap (đống nhị phân) từ danh sách
2. Lúc này, phần tử lớn nhất được lưu ở nút gốc của đống. Hốn vị

nó với phần tử cuối cùng của đống. Giảm kích thước đống đi 1
đơn vị. Cuối cùng, chất đống gốc của cây
3. Lặp lại các bước trên khi kích thước của đống lớn hơn 1
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CƠNG NGHỆ THÔNG TIN

18


03. HEAP SORT
Ví dụ 1:
12 11 13 5 6 7

13 11 12 5 6 7

7

11

12

6

13

7


13

12

5

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

11

5

11

13

6

7

Cây nhị phân hoàn chỉnh
(Complete Binary Tree)

KHOA CÔNG NGHỆ THÔNG TIN

5

11


12

6

7

5

12

6

13

Đống nhị phân
(Binary Heap)
19


03. HEAP SORT
7

11

12

5

6


13

7

11

12

7

5

6

12 11

7 5

7

6

6

11 7

5

12


6

12

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

11

5

11

12

6

13

5

11

12

6

5


11

7

6

5

7

12

Đống nhị phân
(Binary Heap)

KHOA CÔNG NGHỆ THÔNG TIN

20


03. HEAP SORT
6

11 7

5

6


12

11 7

5

6

6

5 6 7 11

11 6 7 5

5

11

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

11

5

11

7


12

5

6

7

5

6

7

7

11

Đống nhị phân
(Binary Heap)

KHOA CÔNG NGHỆ THÔNG TIN

21


03. HEAP SORT
5 6 7 11
5


5 6 7

7 6 5

5 6 7

5

7

5
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

6

7

6

7

6

5

6

7


Đống nhị phân
(Binary Heap)

11

KHOA CÔNG NGHỆ THÔNG TIN

22


03. HEAP SORT
6 5

5 6

5 6 7

6

5

5

5

5 6
5

5


感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

6

7

6

5

6

Đống nhị phân
(Binary Heap)

12 11 13 5 6 7
KHOA CÔNG NGHỆ THÔNG TIN

5 6 7 11 12 13
23


03. HEAP SORT
Ví dụ 2:
4 10 3 5 1

10 4 3 5 1


10 5 3 4 1

1 5 3 4 10

10

10

1

4

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

10

5

4

3

1

5

5


3

1

4

5

3

1

4

3

10

Đống nhị phân
(Binary Heap)

KHOA CÔNG NGHỆ THÔNG TIN

24


03. HEAP SORT
1 5 3 4 10


1 5 3 4

5 1 3 4

1

5

1

5 4 3 1

1 4 3 5

5

1

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

5

4

5

3


10

4

1

3

4

4

3

4

3

1

3

5

Đống nhị phân
(Binary Heap)

KHOA CÔNG NGHỆ THÔNG TIN

25



×