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

Bài giảng Cấu trúc dữ liệu và giải thuật: Tìm kiếm và sắp xếp - Đậu Ngọc Hà Dương

56 16 0

Đ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 đề Tìm Kiếm & Sắp Xếp
Thể loại Bài Giảng
Định dạng
Số trang 56
Dung lượng 600,51 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật: Tìm kiếm và sắp xếp - Đậu Ngọc Hà Dương có nội dung trình bày về tìm kiếm tuần tự và tìm kiếm nhị phân; sắp xếp bubble sort, selection sort, insert sort, quick sort,... Mời các bạn cùng tham khảo!

Trang 1

TÌM KIẾM & SẮP XẾP

Bài giảng Cấu trúc dữ liệu và Giải thuật

Trang 3

Tìm kiếm

3

… Tìm kiếm: duyệt một danh sách và lấy ra phần tử

… Tìm kiếm: duyệt một danh sách và lấy ra phần tử thoả tiêu chuẩn cho trước

… Là thao tác phổ biến trên máy tính:

… Khảo sát việc tìm kiếm trên mảng/danh sách

Trang 6

„ Giả sử dữ liệu phân bố đều, xác suất bắt gặp x tại mỗi vị trí

đều như nhau.

„ Mỗi vòng lặp thực hiện 2 thao tác so sánh Tại sao?

„ Số thao tác 2*(1 + 2 + + n) n + 1

„ Số thao tác = 2*(1 + 2 + … + n) = n + 1

„ Độ phức tạp: O(n)

Trang 7

… Phần tử lính canh: đặt giá trị x vào cuối mảng ⇒

không cần kiểm tra điều kiện hết mảng

Trang 8

Tìm kiếm nhị phân ị p

8

… Khi mảng gồm các phần tử được sắp tận dụng điều

… Khi mảng gồm các phần tử được sắp, tận dụng điều kiện này để giảm số thao tác

… Ý tưởng:

Trang 10

}

Trang 12

Tìm kiếm nhị phân

Đánh giá

12

… Mỗi lần lặp chiều dài mảng con phải xét được

… Mỗi lần lặp, chiều dài mảng con phải xét được giảm ½ so với mảng trước đó

… Mảng ban đầu được chia tối đa k lần với k =

… Mảng ban đầu được chia tối đa k lần với k

⎣log2n

… Tối đa k vòng lặp được thực hiện trong đó mỗi

… Tối đa k vòng lặp được thực hiện trong đó mỗi

Trang 13

… Là bài toán phổ biến trên máy tính.

… Nhiều giải thuật sắp xếp đã ra đời

… Nhiều giải thuật sắp xếp đã ra đời

… Khảo sát và đánh giá hiệu quả một số giải thuật sắp xếp thông dụng dựa trên mảng

Trang 15

Sắp xếp

Các giải thuật

15

… Các phương pháp sắp xếp thông dụng:… Các phương pháp sắp xếp thông dụng:

Trang 16

Bubble sort

16

… Giải thuật:

… Giải thuật:

cận để đưa phần tử nhỏ hơn về vị trí đúng đầu dãy p g y hiện hành.

† Lần xử lý thứ i sẽ có vị trí đầu dãy là i.

… Ví dụ: sắp xếp dãy A: 15 2 8 7 3 6 9 17

Trang 19

Bubble sort

Chương trình

19

void BubbleSort(int a[], int n){

for(int i=0; i<n-1 ; i++){

}

Trang 20

Bubble sort

Bài tập

20

… Mô tả tình trạng dãy A sau mỗi bước chạy với thuật

… Mô tả tình trạng dãy A sau mỗi bước chạy với thuật toán Bubble sort

A = {2 9 5 12 20 15 -8 10}

Trang 21

Bubble sort

Đánh giá

21

… Các giải thuật sắp xếp thường có độ phức tạp tương

… Các giải thuật sắp xếp thường có độ phức tạp tương

tự nhau

… Cần một đánh giá chi tiết:

… Cần một đánh giá chi tiết:

Trang 22

Bubble sort

Chương trình

22

void BubbleSort(int a[], int n){

for(int i=0; i<n-1 ; i++){

for(int j = n-1; j>i; j ){

if( [j]< [j 1])

HoanVi(a[j],a[j-1]);

} }

thực hiện?

thực hiện?

Trang 23

Bubble sort

Đánh giá

23

… Số phép so sánh: không phụ thuộc vào tình trạng

… Số phép so sánh: không phụ thuộc vào tình trạng dãy số ban đầu

Trang 24

Shaker sort

Cải tiến Bubble sort

24

… Nhận xét: Bubble sort có các khuyết điểm:

… Nhận xét: Bubble sort có các khuyết điểm:

không có thứ tự từng phần g g p

nhanh, thì các phần tử lớn lại được đưa về vị trí đúng

ấ h rất chậm.

Giải thuật Shaker sort cải tiến các khuyết điểm này.

Trang 25

„ Lượt đi: đẩy phần tử nhỏ về đầu mảng ợ y p g

„ Lượt về: đẩy phần tử lớn về cuối mảng.

Trang 28

{ if( [j]< [j 1]) { if(a[j]<a[j-1])

l=k; //loại các phần tử đã có thứ tự ở đầu dãy

Trang 29

Shaker sort

Chương trình (tt)

29

j=l; //đẩy phần tử lớn về cuối while(j<r)

} r=k; //loại các phần tử đã có thứ tự ở cuối dãy }

Trang 30

Selection Sort

30

… Mô phỏng cách sắp xếp tự nhiên nhất trong thực tế

… Mô phỏng cách sắp xếp tự nhiên nhất trong thực tế

hiện hành.

Trang 31

Selection Sort

Giải thuật

31

… Các bước của giải thuật:

… Các bước của giải thuật:

1 i = 0.

2 Tìm a[min] nhỏ nhất trong dãy từ a[i] đến a[n-1] [ ] g y [ ] [ ]

3 Hoán vị a[min] và a[i]

4 Nếu i ≤ n thì tăng i và lặp lại bước 2

Ngược lại: Dừng thuật toán

Trang 33

Selection Sort

Chương trình

33

void SelectionSort(int a[], int n){

int min; //chỉ số của phần tử nhỏ nhất

for(int i=0; i<n-1; i++)

{

min = i;

for(int j = i+1; j<n; j++) {

Trang 34

min = i;

for(int j = i+1; j<n; j++) {

if(a[j] < a[min])

min = j;

} HoanVi(a[min], a[i]);

}

} Nhận xét số phép so

sánh trong vòng for

Trang 35

( )

1 (

n

i

n

n i

( )

1 4

(

i n

i

Trang 36

Insertion Sort

36

… Cách xếp các quân bài dùng thuật toán Insertion Các ếp các quâ bà dù g t uật toá se t o

Sort:

quân bài mới lên thì tìm vị trí đúng của nó và chèn vào

bài trong dãy ban đầu.

Trang 37

† Thêm vào a1 sẽ có a0, a1 được sắp, tiếp tục thêm a2, a3

Trang 39

Insertion Sort

Giải thuật

39

… Các bước của giải thuật:

… Các bước của giải thuật:

Trang 40

int x = a[i], pos = i-1;

while(pos>=0 && a[pos] > x) //tìm pos {

a[pos+1]=a[pos]; //dời về sau 1 vị trí pos ;

} a[pos+1] = x;

}

}

Trang 41

Insertion Sort

Bài tập

41

… Cho biết các giá trị i pos tương ứng khi dùng thuật

… Cho biết các giá trị i, pos tương ứng khi dùng thuật toán Insertion Sort để sắp xếp mảng A giảm dần

A = {2 9 5 12 20 15 -8 10}

Trang 42

„ Việc tìm vị trí chèn có thể dùng giải thuật tìm kiếm nhị ệ ị g g ậ ị phân.

„ Nếu dùng giải thuật tìm kiếm nhị phân thì vẫn phải trả giá cho thao tác dời các phần tử sau x

cho thao tác dời các phần tử sau x.

Trang 43

int x = a[i], pos = i-1;

while(pos>=0 && a[pos] > x)

a[pos+1]=a[pos] ; pos ;

} a[pos+1] = x;

}

}

Trang 45

Quick sort

45

… Các giải thuật Bubble sort Selection sort Insertion

… Các giải thuật Bubble sort, Selection sort, Insertion sort:

† Dễ hiểu, dễ cài đặt , ặ

† Hiệu quả thấp: O(n 2 )

… Các giải thuật sắp xếp dựa trên so sánh: độ phức

… Các giải thuật sắp xếp dựa trên so sánh: độ phức tạp ≥ n × log2n

… Quick sort (C A R Hoare, 1962) có thể đạt được Qu c so (C o e, 96 ) có ể đạ được

độ phức tạp trên

Trang 46

Quick Sort

Ý tưởng

46

… Dựa trên việc phân hoạch dãy ban đầu thành 2

… Dựa trên việc phân hoạch dãy ban đầu thành 2 phần:

† Dãy con 1: a y 00, a , 11, …, a , , ii có giá trị nhỏ hơn x g ị

† Dãy con 2: aj, …, an-1 có giá trị lớn hơn x.

Dãy ban đầu được phân thành 3 phần: y ợ p p

Trang 47

Quick Sort

Giải thuật

47

… Giải thuật phân hoạch thành 2 dãy con:G ả t uật p â oạc t à dãy co :

1 Chọn phần tử a[k] trong dãy làm giá trị mốc , 0 ≤ k ≤ r-1

x=a[k], i = 0, j = r-1.

Thường chọn phần tử ở giữa dãy: k = ( l+r)/2

2 Phát hiện và hiệu chỉnh cặp phần tử a[i], a[j] sai vị trí

2 1 T khi ( [i] < ) tă i

2.1 Trong khi (a[i] < x), tăng i.

2.2 Trong khi (a[j] >x), giảm j.

2.3 Nếu i<=j thì hoán vị a[i], a[j], tăng i, giảm j

2.3 Nếu i j thì hoán vị a[i], a[j], tăng i, giảm j

3 Nếu i<j: lặp lại bước 2

Ngược lại: dừng.

Trang 48

Phân hoạch đoạn l = 1, r = 3, x = a[2]

Trang 50

hil ( [i] < ) i++

while (a[i] < x) i++;

Trang 51

Quick Sort

Bài tập

51

… Chạy tay thuật toán Quick Sort để sắp xếp mảng A

… Chạy tay thuật toán Quick Sort để sắp xếp mảng A trong 2 trường hợp tăng dần và giảm dần

A = {2 9 5 12 20 15 -8 10}

Trang 52

Quick Sort

Đánh giá

52

… Đánh giá giải thuật:

… Đánh giá giải thuật:

† Hiệu quả phụ thuộc vào việc chọn giá trị mốc

Trang 53

Quick Sort

Danh sách liên kết

… Với danh sách liên kết:

53

… Với danh sách liên kết:

† Quick sort sắp xếp hiệu quả nhất trên danh sách liên kết.

† Lưu ý: khi cài đặt trên danh sách liên kết, phần tử m ố c duy nh ấ t h ợ p lý là phần tử đầu xâu.

Trang 56

Nối L21, X2 và L22 thành L2

Nối L1, X và L2 thành L

19 12

9

Ngày đăng: 11/09/2021, 13:43

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm