1. Trang chủ
  2. » Luận Văn - Báo Cáo

Áo cáo Đồ án tìm hiểu, cài Đặt và báo cáo về các thuật toán search và sort

42 0 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

Định dạng
Số trang 42
Dung lượng 1,81 MB

Nội dung

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊNKHOA TOÁN – TIN HỌC ----o0o----BÁO CÁO ĐỒ ÁN: TÌM HIỂU, CÀI ĐẶT VÀ BÁO CÁO VỀ CÁC THUẬT TOÁN SEARCH VÀ SORT Giảng viên hướng dẫn: Nguyễn Bảo Long Sinh vê

Trang 1

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA TOÁN – TIN HỌC

o0o BÁO CÁO ĐỒ ÁN:

TÌM HIỂU, CÀI ĐẶT VÀ BÁO CÁO VỀ CÁC THUẬT TOÁN

SEARCH VÀ SORT Giảng viên hướng dẫn: Nguyễn Bảo Long

Sinh vên thực hiện:

Trang 2

Thành phố Hồ Chí Minh, tháng 10 năm 2022

Mục lục

I Phân công công việc: 2

II Thuật toán: 3

1 Linear search 3

2 Binary search 5

3 Selection Sort 6

4 Insertion Sort 7

5 Binary Insertion Sort 8

6 Bubble Sort 10

7 Shaker Sort 12

8 Sell Sort 14

9 Heap Sort 17

10 Merge Sort 19

11 Quick Sort 23

12 Counting Sort 26

13 Radix Sort 27

14 Flash Sort 29

III Nhận xét thời gian thuật toán 38

IV Tài liệu tham khảo: 40

I Phân công công việc:

H2 tên sinh viên Nguy5n Ho6i Linh Hu7nh Thanh H9i

Vi;t b<o c<o, t>m

hi@u thuâ At to<n T>m hi@u thuâ At to<n v6 vi;t b<o c<o vB thuâ At to<n Binary

search, Bubble Sort, Shaker

Sort, Shell

Sort, Merge Sort, Quick Sort,

Flash Sort VC v6 nhâ An xDt

bi@u đF

T>m hi@u thuâ At to<n v6 vi;t b<o c<o vB thuâ At to<n Linear search, Selection Sort, Insertion Sort, Binary Insertion Sort, Heap Sort, Counting Sort, Radix Sort Gom b6i b<o c<o lHi, đInh dHng hJp lK, sLp x;p nô Ai dung b<o c<o

Trang 3

Sort, Merge Sort, Quick Sort,

Flash Sort V6 c<c h6m kh<c

cho to6n bô A chương tr>nh

Insertion Sort, Heap Sort, Counting Sort, Radix Sort.MPc đô ho6nA

Tốt nhất 1 gi< trI x.Phần tử đâu tiên của m9ng có

Trung b>nh N;u x<c suất xuất hiện phầntử x trong m9ng T mỗi vI trí

Vậy thực to<n có độ phPc tHp l6 O(n)

Trang 5

2 Binary search.

 S tưTng:

N;u viê Ac t>m ki;m trên m9ng chưa đưJc sLp x;p th> ta chv cóth@ t>m ki;m tuy;n tính từng phần tử mô At trong m9ng Vâ Ay n;u m9ngđ_ sLp x;p th> có c<ch n6o t>m ki;m nhanh hơn không Thực to<nBinary search sC gi9i quy;t vấn đB n6y

Ta bi;t m9ng sLp x;p tăng th> phần tử bên tr<i nhx hơn phần tửbên ph9i Vâ Ay đ@ t>m ki;m 1 phần tử ta chv cyn ki@m tra phần tử gizam9ng lớn hơn, nhx hơn hay bằng phần tử đó N;u nhx hơn th> ta ti;ptục l6m viê Ac đó đối với nửa m9ng bên tr<i, lớn hơn th> với nửa m9ngbên tr<i c{n bằng th> chính l6 vI trí cần tim

 M_ gi_:

int left //giới hHn tr<i của m9ng

int right //giới hHn ph9i của m9ng

do

mid = (left + right) / 2

if (x = mid) return mid

if x < a[mid]

right = mid – 1else left = mid + 1

while left <= right

 Nhâ An xDt:

Trường hJp Số lần so s<nh bằng Gi9i thích

x

Xấu nhất Gi9 sử x<c suất c<c phần tử trongm9ng nhâ An gi< trI x l6 như nhau

 Ví dụ:

Cho d_y số a:

Cho x = 8

Trang 6

tử D_y ban đầu có N phần tử, thực hiện N-1 lưJt việc đưa phần tử nhx nhấttrong d_y hiện h6nh vB vI trí đPng đầu d_y.

Trang 7

tăng dần nhưng muốnsLp gi9m dần hoặcngưJc lHi th> trườnghJp xấu nhất sC x9y ra

Ví dụ:

Cho d_y số a, n = 7:

12 2 8 5 1 6 4

B1: THi i = 1, a1 = 12, t>m min từ ai đ;n an ta đưJc mIn l6 a4 = 4

B2: Sau đó cho i + 1 v6 ti;p tục thực hiện như bước 1 Thực hiện c<c bước đ;n i

2 phần tử a_k-1 v6 a_k thxa a_k-1<=a_i<=a_k (1<=k<=i)

 M_ gi9:

B1: i = 1; // gi9 sử có đoHn a[1] đ_ đưJc sLp

Trang 8

B2: x = a[i]; t>m vI trí pos thích hJp trong đoHn a[1] đ;n a[i-1] đ@ chèn v6oa[i]

B3: Dời chỗ c<c phần tử từ a[pos] đ;n a[i-1] sang ph9i 1 vI trí đ@ d6nh chỗcho a[i]

B4: a[pos] = x; // có đoHn a[1] a[i] đ_ đưJc sLp

xộn không ph9i trườnghJp tốt nhất hay xấunhất

x;p theo thP tự tăngdần hay gi9m dầnnhưng ngưJc với yêucầu

- Ví dụ:

Cho d_y số a, n = 7:

12 2 8 5 1 6 4

Trang 9

5 Binary Insertion Sort.

 S tưTng: Binary Insertion Sort l6 một dHng đặc biệt của Insertion Sort sử dụngthuật t>m ki;m nhI phân đ@ t>m ra vI trí chính x<c của phần tử chèn trong m9ng.Thay v> sử dụng phương ph<p t>m ki;m tuy;n tính th> phương ph<p n6y sCdùng t>m ki;m nhI phân đ@ thay th;

 M_ gi9: Sử dụng t>m ki;m nhI phân đ@ t>m vI trí cần chèn sao đó thực hiệntương tự như insertion sort

 Nhận xDt:

Trường hJp Độ phPc tHp Gi9i thích

to<n binarysearch đHtk;t qu9 tốtnhất

Trung b>nh O(nlog(n)) Khi thuật

to<n binarysearch đHtk;t qu9 trungb>nh

to<n binarysearch đHtk;t qu9 tệ

Trang 10

nhất

Trang 12

†ng với mỗi lần so s<nh th> sC ho<n vI mô At lần (do m9ng gi9m)nên số lần ho<n vI l6:

Nh>n chung thuâ At to<n không phân biê At m9ng đ_ sLp x;p haychưa L6 thuâ At to<n có hiê Au suất châ Am v6 không thích hJp với c<c dzliê Au lớn Đô A phPc tHp của thuâ At to<n l6: Không gian chí;m dụng: Tính „n đInh: có

Trang 13

Thấy 5 < 4 (đúng) thực hiê An ho<n vI J sC dời tới phần tử ti;p theo.Thực hiê An đ;n khi j = i th> dừng T>m đưJc phần tử tương Png tHi i.Ti;p tục so s<nh v6 ho<n vI T c<c vI trí tương Png Ta lần lưJct>m đưJc c<c gi< trI tHi i = 3, 4, … đ;n i = n K;t thúc.

7 Shaker Sort

 S tưTng:

L6 thuâ At to<n c9i ti;n của Bubble Sort

Thuâ At to<n duyê At m9ng theo 2 lưJt từ 2 phía kh<c nhau:

- LưJt đi: đˆy phần tử nhx vB đầu m9ng

- LưJt vB: đˆy phần tử lớn vB cuối m9ng

Có sự ghI nhâ An lHi nhzng đoHn đ_ đưJc sLp x;p nhằm ti;t kiê Amnhzng phDp so s<nh

 M_ gi9:

left = 1; right = n; //left, right l6 đoHn cần xDt

k = n; //vI trí x9y ra ho<n vI sau cùng

while left < right

for j = right downto left

if a[j] < a[j-1] swap(a[i], a[j-1])

k = j;

left = k;

for j = left in right

if a[j] > a[j-1] swap(a[i], a[j-1])

k = j;

right = k

Trang 14

L6 dHng nâng cấp của Bubble Sort nhưng chv nhanh hơn khi

gă Ap m9ng đ_ sLp x;p mô At phần c{n đối với m9ng chưa đưJc sLp x;p,hoă Ac sLp x;p ngưJc th> tốc đô A như Bubble Sort

Đô A phPc tHp của thuâ At to<n l6: Không gian chi;m dụng: Tính

Trang 15

Ti;p tục duyê At ngưJc lHi như Bubble Sort.

Thấy sao khi ho<n vI tHi vI trí j = 4 th> xDt j = 3 không có ho<n

vI v6 không c{n ho<n vI n6o nza trong lần duyê At n6y Nên k = 4

Vâ Ay đ@ K ta thấy n;u như b>nh thường sC duyê At ti;p tHi j = 3nhưng bây giờ lHi duyê At tHi j = 4 Đây l6 đi@m kh<c biê At so với BubbleSort chương tr>nh sC nhanh hơn trong trường hJp n6y Duyê At tới right

= 6 Quay chiBu lHi duyê At ti;p

Xong lần duyê At n6y left = right k;t thúc chương tr>nh M9ng đưJc sLpx;p

8 Sell Sort

 S tưTng:

SellSort l6 mô At phương ph<p nâng cấp của phương ph<p chèntrực ti;p Thay g> mỗi lần ho<n vI ta gi9m mô At nghIch th;, th> vớiSellSort mỗi lần ho<n vI ta có th@ gi9m nhiBu nghIch th; Bằng c<cht<ch d_y đầu th6nh nhiBu d_y con gFm c<c phần tử T c<ch nhau h vItrí

SLp x;p c<c phần tử của d_y con sC đưa c<c phần tử vB vI tríđúng tương đối mô At c<ch nhanh chóng, sau đó gi9m h đ@ tHo th6nh c<c

Trang 16

d_y con mới v6 ti;p tục sLp x;p Thuâ At to<n dừng khi h = 1, khi đó c<cphần tử đ_ đă At đúng vI trí ho6n th6nh viê Ac so s<nh.

Câu hxi T đât l6 ch2n h bao nhiêu th> hJp lK Hiê An nay vyn chưa

có tiêu chuˆn r‰ r6ng trong viê Ac lựa ch2n d_y gi< trI kho9ng c<ch tốtnhất Nhưng ph9i điBu kiê An: v6

Đối với trường hJp tốt nhất, m9ng đưJc sLp x;p l6: t„ng số phDp

so s<nh cho mỗi kho9ng (hoặc kho9ng tăng) bằng kích thước của m9ng.Đối với trường hJp trung b>nh Đô A phúc tHp nằm kho9ng c{n phụthuô Ac v6o kho9ng đưJc ch2n, tr>nh tự gia tăng V6 hiê An tHi vyn có tiêuchuˆn tốt nhất

Đối với trường hJp xấu nhất Đô A phPc tHp nhx hơn hoă Ac bằng Với

đô A phPc tHp c<c phDp so s<nh l6 v6 Đô A phPc tHp số lần ho<n vI

Trang 17

Với h = 7: Ta xDt d_y con sau

Nhâ An thấy 12 > 4 => ho<n vI 2 phần tử n6y cho nhau

Ta xDt ti;p với h = 3: Th> c<c d_y con l6

So s<nh v6 ho<n vI lần lưJc từng m9ng con b‹ng thuâ At to<n insertionsort ta đưJc:

Trang 18

XDt ti;p h = 1: Ta thực hiê An sLp x;p như insertion sort thu đưJc m9ngđ_ đưJc sLp x;p.

9 Heap Sort

 S tưTng: SLp x;p vun đống - heapsort l6 một thuật to<n nhanh sử dụng kỹ thuậtphân loHi dựa trên cấu trúc cây nhI phân đặc biệt g2i l6 đống nhI phân (binaryheap) Thuật to<n dựa v6o sự đặc biệt của cây nhI phân đ@ lựa ch2n ra phần tửlớn nhất rFi lần lưJt chèn phần tử n6y v6o vùng sLp x;p

- ĐInh nghĩa heap: gi9 sử trường hJp sLp x;p tăng dần, khi đó Heap đưJc đInhnghĩa l6 một d_y c<c phần tử a_1, a_2,…, a_r thxa c<c quan hệ với m2i I thuộc[l,r]:

Tính chất 3: M2i d_y a_1, a_l+1,…,a_r với 2l>r l6 một heap

 M_ gi9: Gi9i thuật Heapsort tr9i qua hai giai đoHn:

Giai đoHn 1: Hiệu chvnh d_y số ban đầu th6nh heap;

Giai đoHn 2: SLp x;p d_y số dựa trên heap:

Bước 1: Đưa phần tử lớn nhất vB vI trí đừng T cuối d_y:

r = n; ho<n vI(a_1,a_r);

Bước 2: LoHi bx phần tử ra khxi heap: r=r-1; hiệu chvnh phần c{n lHi của d_y

từ a_1, a_2, …, a_r th6nh một heap

Bước 3: N;u r>l (heap c{n phần tử): Lặp lHi Bước 2 NgưJc lHi: Dừng

- Nhận xDt:

Trường hJp Độ phPc tHp thuật to<n Gi9i thích

Trang 19

cần liên tục so s<nhphần tử với phần tửcon bên tr<i v6 bênph9i của nó v6 đˆy nóxuống đưới cho đ;nkhi nó đHt đ;n đi@m m6c9 2 phần tử của conđBu nhx hơn nó.

Trang 21

Vâ Ay mấu chốt của vấn đB l6 phân hoHch d_y ban đầu th6nh c<cd_y con Thấy d_y luôn gi9m khi chv có 1 phần tử TPc l6 viê Ac phânhHch n6y sC t<ch m9ng th6nh 2 d_y con cho tới khi chv c{n 1 phần tử.Trô An từng că Ap d_y con của hai d_y phụ th6nh mô At d_y con của gi9iban đầu, ta sC nhâ An lHi d_y ban đầu nhưng với số lưJng d_y con ít nhấtgi9m đi mô At nửa Ti;p tục lâ Ap lHi quy tr>nh trên sau mô At số bước, ta sCnhâ An đưJc mô At d_y chv gFm 1 d_y con không gi9m.

Viê Ac phân hoHch n6y chv đơn gi9n l6 t<ch d_y gFm n phần tửth6nh n d_y con Thuâ At to<n n6y đFi hxi tính có thP tự của d_y conluôn đưJc thxa trong c<ch phân hoHch

aux[k]=a[k] // sao chDp dz liê Au d_y chính sang d_y phụ

i = l //vI trí khxi đầu của d_y con 1

j = m + 1 //vI trí khxi đầu của d_y con 2

k = l //vI trí hiê An tHi của d_y mới sau gô Ap

while i <= m and j <= r //dừng khi 1 trong 2 d_y h;t phần tử

Trang 22

if aux[i] <= aux[j] a[k++] = aux[i++] //so s<nh phần tửđầu tiên của 2 d_y

else a[k++] = a[j++]

Trang 23

ThP tự trô An sC bLt đầu từ 2 phần tử 12, 2 trước Ti;p đ;n l6 phần tử 8,

5 Ta đưJc

Bây giờ ta gô Ap d_y (2, 12) v6 (5, 8) với i = 1, j = 3, k = 2, l = 1, r = 4

Ta so s<nh aux[i] v6 aux[j] thấy 2 < 5 nên a[k]=a[i]

i = 2, k = 2, so s<nh aux[i] v6 aux[j] thấy 5 < 12 nên a[k] = aux[j]

i = 2, k = 3, j = 4 ti;p tục như trên ta đưJc

j = 5 không thxa điBu kiê An, k;t thúc v{ng lă Ap while

Thấy i = 2 vyn thxa điBu kiê An a[k] = aux[i]

Trang 24

i = 3 không thxa K;t thúc v{ng lâ Ap K;t thúc h6m.

Theo thP tự đê A quy ta có lần lưJc gô Ap c<c d_y (1), (6) sau đó l6 (1, 6),(4) Tương tự như c<ch l6m trên

Cuối cùng l6 gô Ap d_y (2, 5, 8, 12) v6 (1, 4, 6)

Ta thu đưJc d_y cuối cùng l6 m9ng đ_ sLp x;p

11 Quick Sort

 S tưTng:

Đ@ sLp x;p mô At m9ng với n phần tử Ta có th@ phân hoHchm9ng th6nh nhiBu d_y con như merge sort, nhưng kh<c nhau củaquick sort l6 sC ch2n mô At phần tử x bất k7 l6m chốt sau đó ho<n vI c<cphần tử đ@ trước x l6 c<c phần tử nhx hơn x v6 sau x l6 c<c phần tửlớn hơn x

Sau đó thực hiê An phân hoHch ti;p d_y nhx hơn x v6 d_y lớn hơn

x với mô At gi< trI x kh<c Ti;p tục như vâ Ay cho đ;n khi có mô At d_y n6o

đó số lưJng phần tử l6 mô At th> không phân hoHch d_y đó nza Chươngtr>nh sC k;t thúc khi phân hoHch h;t to6n bô A c<c d_y con th6nh mô Atphần tử Hoă Ac mô At d_y c<c phần tử giống nhau

Trang 25

while a[i] < x //duyê At từ tr<i sang ph9i khi t>m đưJc phần

tử lớn hơn x th> dừng lHi

i ++ // vI trí của phần tử đówhile a[j] > x //duyê At từ ph9i sang tr<i khi t>m thấy phần

Phân đoHn ho6n h9o

Phân đoHn cân bằng

Phân đoHn cân bằng: Mô At b6i to<n con có kích thước n -–k v6 b6i to<nkia có kich thước l6 k Với k l6 vI trí m6 ta xDt phần tử l6m chốt.Phân đoHn ho6n h9o: phân đoHn luôn thực hiê An dưới dHng phân đôi,mỗi b6i to<n con có kích thước l6 n / 2

Phân đoHn không cân bằng: Mô At b6i to<n đưJc phân ra có kích thước

n - 1 v6 b6i to<n kia có kích thước l6 0 X_y ra khi ch2n phần tử lớnnhất hoă Ac nhx nhất l6m chốt

Trang 26

Ho<n vI a[i], a[j]

Ta đưJc 2 d_y con l6

Trang 27

Tương tự thực hiê An c<c bước như trên với d_y mô At.

 M_ gi9:

B1: T>m ra phần tử lớn nhất (gi9 sử l6 max) từ m9ng đ_ cho

B2: KhTi tHo m9ng count có độ d6i l6 max+1 với tất c9 c<c phần tử bằng 0.B3: Lưu trz số lưJng của từng phần tử tHi chv mục tương Png của chúngtrong m9ng count

Ví dụ: N;u số phần tử của 3 l6 2 th> 2 đưJc lưu T vI trí thP 3 của m9ngcount N;u phần tử 5 không xuất hiện trong m9ng, th> 0 đưJc lưu T vI trí thP 5.B4: Lưu trz t„ng số lưJng của c<c phần tử trong m9ng count Nó sC giúp tađặt chính x<c c<c phần tử v6o chv mục của m9ng đ_ sLp x;p

B5: T>m chv số của từng phần tử của m9ng ban đầu trong m9ng count ĐiBun6y sC cho bi;t số đ;m tích l•y Đặt phần tử tHi chv số đưJc tính

B6: Sau khi đặt mỗi phần tử v6o đúng vI trí của nó, ta sC gi9m số đ;m của nó

đi 1 đơn vI

 Nhận xDt:

Trường hJp Độ phPc tHp thuật Gi9i thích

Trang 28

bằng 1Trung b>nh O(n+k) (k l6 phHm

vi của c<c phần tử:

phần tử lớn nhất –phần tử nhx nhất)

Phụ thuộc v6ophHm vi k phần tử

Xấu nhất O(n + k), k = n^2 PhHm vi k của

phần tử lớn hơnđ<ng k@ so với c<cphần tử kh<c

 Ví dụ:

Cho d_y số a, n = 7:

12 2 8 5 1 6 4

B1: t>m ra phần tử max trong m9ng, max = 12

B2: khTi tHo m9ng phụ count bằng 0 có độ d6i bằng max+1

B3: đ;m số lưJng từng phần tử bằng m9ng phụ count [j] với j l6 a tHi vI trí thP i

Ta đ;m đưJc:

12: 1, 12 lưu T vI trí 7

2: 1, phần tử xuất hiện 2 lần nên đưJc lưu T vI trí 2

8: 1, 8 lưu T vI trí 6

5: 1, tương tự 5 sC đưJc lưu T vI trí 4

1: 1, phần tử xuất hiện 1 lần nên đưJc lưu T vI trí 1

6: 1, 6 đưJc lưu T vI trí 5

4: 1, phần tử 3 không xuất hiện nên 4 sC đưJc lưu T vI trí 3

SLp x;p xong ta đưJc m9ng tăng dần:

1 2 4 5 6 8 12

13 Radix Sort

Trang 29

sort Nó không hB quan tâm đ;n việc so s<nh gi< trI của phần tử v6 b9n thânviệc phân loHi tr>nh tự phân loHi sC tHo ra thP tự cho c<c phần tử Trước tiên, ta

có th@ gi9 sử mỗi phần tử a_i trong d_y a_1, a_2,…,a_n l6 một số nguyên có tối

đa m chz số Ta phân loHi c<c phần tử lần lưJt theo c<c chz số h6ng đơn vI,h6ng chục, h6ng trăm,… tương tự việc phân loHi thư theo tvnh th6nh, quậnhuyện, phường x_,…

 M_ gi9:

C<c bước thực hiện thuật to<n:

B1: //k cho bi;t chz số dùng đ@ phân loHi hiện h6nh k=0; //k=0: h6ng đơnvI; k=1: h6ng chục;…

B2: //THo c<c lô chPa c<c loHi phần tử kh<c nhau

KhTi tHo 10 lô B_0,B_1,…,B_9 rỗng;

B3: For i=1 n do

Đặt a_i v6o lô B_t với t = chz số thP k của a_i;

B3: Nối B_0, B_1,…,B_9 lHi (theo đúng tr>nh tự) th6nh a

Trang 30

L6 thuâ At to<n sLp x;p nâng cấp từ Bucket sort Cho mô At m9ng

có n phần tử th> số lưJng bucket (c<i xô) l6 0.45*n lấy phần nguyên.C<c xô sC đưJc đ<nh số theo thP tự từ 1, 2, 3,

Bây giờ viê Ac cần l6m l6 t>m xem phần tử n6o sC thuô Ac xô thPmấy bằng c<ch lấy gi< trI phần tử đó trừ cho gi< trI nhx nhất chia chokho9ng c<ch giza gi< trI lớn nhất v6 nhx nhất, rFi nhân cho số xô (lấyphần nguyên) t>m đưJc phần tử đó nằm T xô thP mấy V6 số lưJngphần tử của từng xô Index cuối cung của từng xô

Việc n6y sC h>nh th6nh c<c chu tr>nh ho<n vI: mỗi khi ta đemmột phˆn tử T đâu đó đ;n một vI trí n6o đó th> ta ph9i nhấc phần tửhiện tHi đang chi;m chỗ ra, v6 ti;p tục với phần tử bI nhấc ra v6 đưađ;n chỗ kh<c cho đ;n khi quay lHi vI trí ban đầu th> ho6n tất v{ng lặp N;u phần tử đ_ đúng bucket th> xDt đ;n phần tử ti;p theo chođ;n h;t m9ng

Ngày đăng: 11/12/2024, 10:19

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

TÀI LIỆU LIÊN QUAN