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

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - 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 (874.19 KB, 33 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 3: CÁC GIẢI THUẬT SẮP XẾP


GIỚI THIỆU
▪ Sắp xếp là gì? Trong thực tế chúng ta đã từng thấy những
thứ gì được sắp xếp? Giá trị của việc sắp xếp mang lại là
gì?
- Danh sách học sinh trong lớp
- Danh sách xếp hạng điểm người chơi
- Các sản phẩm trên thương mại điện tử
- Tra cứu từ điển
▪ Trong phần này các thuật toán sắp xếp sẽ dùng các số
nguyên để biểu diễn.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

2


BÀI TỐN SẮP
•XẾP
Cho danh sách có n phần tử a0, a1, a2…, an-1.


• Sắp xếp là q trình xử lý các phần tử trong danh sách
để đặt chúng theo một thứ tự thỏa mãn một số tiêu
chuẩn nào đó dựa trên thông tin lưu tại mỗi phần tử,
như:
- Sắp xếp danh sách lớp học tăng theo điểm trung bình.
- Sắp xếp danh sách sinh viên tăng theo tên.
• Để đơn giản trong việc trình bày giải thuật ta dùng mảng
1 chiều a để lưu danh sách trên trong bộ nhớ chính.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CƠNG NGHỆ THƠNG TIN

3


BÀI TOÁN SẮP XẾP
a:(tt)
là dãy các phần tử dữ liệu
Để sắp xếp dãy a theo thứ tự (giả sử theo thứ tự tăng), ta tiến
hành triệt tiêu tất cả các nghịch thế trong a.
▪Nghịch thế:
•Cho dãy có n phần tử a0, a1,…,an-1
•Nếu i<j và ai >aj
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

34


3

4

8

a[0], a[1] là cặp nghịch thế

Đánh giá độ phức tạp của giải thuật, ta tính
Css: Số lượng phép so sánh cần thực hiện
CHV: Số lượng phép hốn vị cần thực hiện

KHOA CƠNG NGHỆ THƠNG TIN

4


CÁC THUẬT TỐN SẮP XẾP ĐƠN
▪GIẢN
Các thuật tốn sắp xếp được trình bày ở đây gồm:
- Thuật tốn sắp xếp kiểu sủi bọt (Bubble Sort)
- Thuật toán sắp xếp kiểu lựa chọn (Selection Sort)
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

- Thuật toán sắp xếp kiểu chèn (Insertion Sort)

KHOA CÔNG NGHỆ THÔNG TIN


5


01. BUBBLE SORT
▪ Xuất phát từ đầu dãy, đổi chỗ các cặp phần tử kế cận
để đưa phần tử nhỏ hơn trong cặp phần tử đó về vị trí
đứng đầu dãy hiện hành, sau đó sẽ khơng xét đến nó ở
bước tiếp theo, do vậy ở lần xử lý thứ i sẽ có vị trí đầu
dãy là i.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

▪ Lặp lại xử lý trên cho đến khi khơng cịn cặp phần tử
nào để xét.

KHOA CÔNG NGHỆ THÔNG TIN

6


CÁC BƯỚC THUẬT
TOÁN
Bước
1 : i = 0; // lần xử lý đầu tiên
Bước 2 : j = 0;//Duyệt từ đầu dãy về cuối vị trí N-1
Trong khi (j < N-1) thực hiện:
Nếu a[j]>a[j+1]
Doicho(a[j],a[j+1]);

j = j+1;
Bước 3 : i = i+1; // lần xử lý kế tiếp
Nếu i >=N-1: Hết dãy. Dừng
Ngược lại : Lặp lại Bước 2.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

7


MINH HỌA THUẬT
TỐN
• Cho 1 dãy các phần tử như sau: {5, 1, 6, 2, 4, 3}
Lượt 2(i=1)

Lượt 1(i=0)
5

1

6

2

4

3


1

5

2

4

Lượt 3(i=2)
3

6

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

1

2

4

3

5

6

1


2

5

4

3

6

1

2

3

4

5

6

3

1

2

4


5

3

6

1

2

3

4

5

6

6

3

1

2

4

3


5

6

1

2

3

4

5

6

3

6

1

2

4

3

5


6

1

2

3

4

5

6

1

5

6

2

4

3

1

5


2

6

4

1

5

2

4

1

5

2

4

KHOA CÔNG NGHỆ THÔNG TIN

ibaotu.com

8


CÀI ĐẶT THUẬT TOÁN BUBBLE

SORTDãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1].
Input:
Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0],
Arr[1],…,Arr[n-1]
Actions:
void BubbleSort(ref a[],int n)
{
int i, j;
for (i = 0 ; ifor (j =0 ; j < n-1 ; j ++)
if(a[j]> a[j+1])// nếu sai vị trí thì đổi chỗ
Swap(a[j], a[j+1]);
}
End
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

9


#Giải thuật Nổi bọt - Bubble Sort:
B.1: Gán i = 0
B.2: Gán j = 0 //danh sách có n phần
tử a0,a1,a2…,an-1
B.3: Nếu A[j] > A[j + 1] thì Hốn đối chỗ giữa
A[j] và A[j + 1]
B.4: Nếu (j < n – i – 1):

-Đúng thì j = j + 1 và quay lui bước 3
-Sai thì chuyển sang bước 5
B.5: Nếu (i < n – 1):
-Đúng thì i = i + 1 và quay lui bước 2
-Sai thì dừng Kết Thúc.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

10


Bài tập 1: Áp dụng giải thuật sắp xếp Nổi bọt – Bubble Sort.
Cho Mảng A = [19,13,6]
+B.1: i = 0;
B.2: j = 0;
B.3: nếu A[j] > A[j+1] (A[0] > A[1]; 19 > 13) thì Hốn đổi giữa 19 và 13
[13,19,6];
B.4: nếu j < (n-i-1) (0 < (2-0-1)) : Đúng thì j = j+1= 0+1= 1
và quay lui B.3;
+B.3: nếu A[j] > A[j+1] (A[1] > A[2]; 19 > 6) thì Hoán đổi giữa 19 và 6
[13, 6,19];
B.4: nếu j < (n-i-1) (1 < (2-0-1)): Sai thì chuyển sang B.5
B.5: nếu i < (n-1) (0 < 1): Đúng thì i =i+1 = 0 +1 = 1 và quay lại B.2
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com


KHOA CÔNG NGHỆ THÔNG TIN

11


+B.2: j = 0 (i= 1) ;
B.3: nếu A[0] > A[1] (13 > 6) thì Hốn đổi giữa 13 và 6
[6, 13,19] ;
B.4: Nếu (j < n – i – 1) (0 < 0) : Sai thì chuyển sang B.5
B.5: Nếu (i < n – 1) (1 < 1): Sai thì Dừng Kết thúc.
Vậy mảng được sắp xếp là:
[6, 13,19].
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

12


Kiểm tra 30’: Áp dụng giải thuật sắp xếp Nổi bọt – Bubble Sort.
Thực hiện sắp xếp mảng: A = [39, 25, 16, 20]

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

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN


13


ĐÁNH GIÁ THUẬT
TỐN

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

ibaotu.com

KHOA CƠNG NGHỆ THƠNG TIN

14


Đánh giá độ phức tạp - thuật toán Bubble Sort
void BubbleSort()
{
int i, j ;
for (i = 2; i <= n; i++)
for ( j = n; j >= i; j--)
if (a[j-1] > a[j]) //hốn chuyển
swap(&a[j-1], &a[j]);
}

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

ibaotu.com

KHOA CƠNG NGHỆ THƠNG TIN


15


02. SELECTION SORT
• Thuật tốn thực hiện sắp xếp dãy các đối tượng bằng cách lặp
kiểu chọn. Thuật toán thực hiện sắp xếp dãy các đối tượng
bằng cách lặp lại việc tìm kiếm phần tử có giá trị nhỏ nhất từ
thành phần chưa được sắp xếp trong mảng và đặt nó vào vị trí
đầu tiên của dãy. Trên dãy các đối tượng ban đầu, thuật tốn
ln duy trì hai dãy con:
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

- Dãy con đã được sắp xếp: là các phần tử bên trái của dãy.
- Dãy con chưa được sắp xếp là các phần tử bên phải của
dãy.
• Q trình lặp sẽ kết thúc khi dãy con chưa được sắp xếp chỉ
cịn lại đúng một phần tử
KHOA CƠNG NGHỆ THƠNG TIN

16


CÁC BƯỚC CỦA THUẬT
TỐN
Bước
1: i = 0;
Bước 2: Tìm phần tử a[min] nhỏ nhất trong

dãy hiện hành từ a[i] đến a[N]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

Bước 3 : Đổi chỗ a[min] và a[i]
ibaotu.com

Bước 4 : Nếu i < N-1 thì
i = i+1; Lặp lại Bước 2;
Ngược lại: Dừng.

KHOA CÔNG NGHỆ THÔNG TIN

17


MINH HỌA THUẬT
TỐN
• Cho 1 dãy phần tử các giá trị như sau: { 15,2,8,7,3,6,9,17}
I=0

15

2

8

7

3


6

9

17

I=1

2

15

8

7

3

6

9

17

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

ibaotu.com

I=2


2

3

8

7

15

6

9

17

I=3

2

3

6

7

15

8


9

17

I=4

2

3

6

7

15

8

9

17

I=5

2

3

6


7

8

15

9

17

I=6

2

3

6

7

8

9

15

17

KHOA CÔNG NGHỆ THÔNG TIN


18


#minh họa – giải thuật sắp xếp chọn
arr[] = 65 – 27 – 16 – 24 - 3
// Tìm phần tử nhỏ nhất trong trong arr[0...4]
// và đổi chỗ nó với phần tử đầu tiên
[3] – 27 – 16 – 24 – 65
// Tìm phần tử nhỏ nhất trong trong arr[1...4]
// và đổi chỗ nó với phần tử đầu tiên của arr[1...4]
3 - [16] – 27 – 24 - 65
// Tìm phần tử nhỏ nhất trong trong arr[2...4]
// và đổi chỗ nó với phần tử đầu tiên của arr[2...4]
3 – 16 - [24] – 27 – 65
// Tìm phần tử nhỏ nhất trong trong arr[3...4]
// và đổi chỗ nó với phần tử đầu tiên của arr[3...4]
3 – 16 – 24 - [27] – 65.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

19


#Bài tập:
Thực hiện tính tốn từng bước theo giải thuật sắp xếp chọn – Selection
Sort.
Cho mảng: A = [30, 65, 100, 20, 40, 75]

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

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

20


CÀI ĐẶT THUẬT
Input:
Dãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1].
TOÁN
Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0], Arr[1],…,Arr[n-1]
Actions:
void SelectionSort(ref a[],int n )
{
int min,i,j; // chỉ số phần tử nhỏ nhất trong dãy hiện hành
for (i=0; i{
min = i;
for(j = i+1; j if (a[j ] < a[min])
min = j; // lưu vtrí phần tử hiện nhỏ nhất
Swap(a[min],a[i]);
}
}
End
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!


ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

21


ĐÁNH GIÁ GIẢI
THUẬT

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

ibaotu.com

KHOA CÔNG NGHỆ THÔNG TIN

22


03. INSERTION SORT
• Giả sử có một dãy a0 , a1 ,... ,an-1 trong đó i phần tử
đầu tiên a0 , a1 ,... ,ai-1 đã có thứ tự.
• Tìm cách chèn phần tử ai vào vị trí thích hợp của
đoạn đã được sắp để có dãy mới a0 , a1,... ,ai trở
nên có thứ tự. Vị trí này chính là vị trí giữa hai
phần tử ak-1 và ak thỏa ak-1 < ai < ak (1≤k≤i).
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

ibaotu.com


KHOA CÔNG NGHỆ THÔNG TIN

23


CÁC BƯỚC CỦA THUẬT
TỐN
Bước
1: i = 1; //giả sử có đoạn a[0] đã được sắp
Bước 2: x = a[i]; Tìm vị trí pos thích hợp trong đoạn a[0]
đến a[i-1] để chèn a[i] vào
Bước 3: Dời chỗ các phần tử từ a[pos] đến a[i-1]
phải 1 vị trí để dành chổ cho a[i]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!

sang

ibaotu.com

Bước 4: a[pos] = x; //có đoạn a[0]..a[i] đã được sắp
Bước 5: i = i+1;
Nếu i < n: Lặp lại Bước 2
Ngược lại: Dừng
KHOA CÔNG NGHỆ THÔNG TIN

24


MINH HỌA THUẬT
TỐN

• Cho 1 dãy phần tử các giá trị như sau: { 3, 6, 1, 8, 4, 5 }
3

6

1

8

4

5

3

6

1

8

4

5

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

ibaotu.com

1


3

6

8

4

5

1

3

6

8

4

5

1

3

4

6


8

5

1

3

4

5

6

8

KHOA CÔNG NGHỆ THÔNG TIN

25


×