1. Trang chủ
  2. » Kinh Doanh - Tiếp Thị

Tiểu luận môn thuật toán nâng cao Đệ Quy

65 1,6K 3

Đ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 65
Dung lượng 1,08 MB

Nội dung

Tổng quan về thuật toán Quick Sort A.. phương pháp lặp  Sẽ được trình bày cụ thể ở một số thuật toán Sẽ Sẽ được trình bày cụ thể ở một số thuật toán được Sẽ được trình bày cụ thể ở một

Trang 1

NHÓM THỰC HIỆN: NHÓM 2

ĐỆ QUY

GVHD: TS.NGUYỄN XUÂN HẢI

Trang 3

2 Một số bài toán điển hình

A Dãy số Fibonacci

B Bài toán tháp Hà Nội

C Bài toán 8 con hậu

II – KHỬ ĐỆ QUY (QUICK SORT):

3 Tổng quan về thuật toán Quick Sort

A Giới thiệu thuật toán Quick Sort

B Ý tưởng thuật toán Quick Sort

C Giải thuật Quick Sort

D Cài đặt Quick Sort

E Ví dụ

F Hiệu quả thuật toán Quick Sort

Trang 4

I TỔNG QUAN VỀ ĐỆ QUY

1 Khái niệm về đệ quy

máy tính Một đối tượng được gọi là đệ quy nếu nó hoặc một phần của nó được định nghĩa thông qua khái niệm về chính nó.

gọi lại chính nó.

Trang 5

Ví dụ:

Định nghĩa số tự nhiên:

0 là số tự nhiên.

Nếu k là số tự nhiên thì k+1 cũng là số tự nhiên.

Định nghĩa xâu kí tự (chuỗi kí tự) bằng đệ quy:

Xâu rỗng là xâu kí tự

Một chữ cái bất kì ghép với 1 xâu sẽ tạo thành xâu mới

Định nghĩa hàm giai thừa n!:

Khi n = 0, định nghĩa 0! = 1

Khi n>0, định nghĩa n! = (n-1)! * n

Trang 6

Đặc điểm của chương trình đệ quy:

quyết một vấn đề tương tự nhưng nhỏ hơn.

mức chương trình có thể tự giải quyết mà không cần phải gọi chính nó nữa.

I TỔNG QUAN VỀ ĐỆ QUY

1 Khái niệm về đệ quy

Trang 7

Để xây dựng 1 chương trình đệ quy  1 công thức đệ quy.

Công thức này gồm 2 phần:

Trang 8

Ưu điểm của chương trình đệ quy:

thông qua 1 đoạn chương trình ngắn gọn.

qua 1 số hữu hạn lời phát biểu.

Nhược điểm:

được sử dụng trong hàm này như: biến, hằng, cấu trúc… và các thông số cần cho việc chuyển giao điều khiển sẽ được sinh ra

do tính chất tự động gọi thực hiện thủ tục khi chưa kết thúc đệ quy.

I TỔNG QUAN VỀ ĐỆ QUY

1 Khái niệm về đệ quy

Khi nào nên/không nên sử dụng đệ quy?

Nếu chương trình có thể viết dưới dạng lặp hoặc các cấu trúc

Trang 9

Minh họa: Chương trình tính giai thừa của một số tự nhiên được cho như sau:

int GT (int N) {

if (N==0) GT=1;

else GT=N*GT(N-1);

}

 Tính GT(5)?

Trang 10

CT chính: Chưa xong: answer  GT(5)

Trang 11

CT chính: Chưa xong: answer  GT(5)

Trang 12

Nhận xét: Kỹ thuật đệ quy:

Kết luận:

khác.

phương pháp lặp  Sẽ được trình bày cụ thể ở một số thuật toán Sẽ Sẽ được trình bày cụ thể ở một số thuật toán được Sẽ được trình bày cụ thể ở một số thuật toán trình Sẽ được trình bày cụ thể ở một số thuật toán bày Sẽ được trình bày cụ thể ở một số thuật toán cụ Sẽ được trình bày cụ thể ở một số thuật toán thể Sẽ được trình bày cụ thể ở một số thuật toán ở Sẽ được trình bày cụ thể ở một số thuật toán một Sẽ được trình bày cụ thể ở một số thuật toán số Sẽ được trình bày cụ thể ở một số thuật toán thuật Sẽ được trình bày cụ thể ở một số thuật toán toán Sẽ được trình bày cụ thể ở một số thuật toán

trong Sẽ được trình bày cụ thể ở một số thuật toán những Sẽ được trình bày cụ thể ở một số thuật toán phần Sẽ được trình bày cụ thể ở một số thuật toán sau.

Thuận lợi cho việc biểu

I TỔNG QUAN VỀ ĐỆ QUY

1 Khái niệm về đệ quy

Trang 13

A Dãy số Fibonacci

B Bài toán tháp Hà Nội

C Bài toán 8 con hậu

Trang 14

I TỔNG QUAN VỀ ĐỆ QUY

2 Một số bài toán điển hình

A Dãy số Fibonacci:

Trang 15

A Dãy số Fibonacci (tt):

Phát biểu bài toán:

Dãy số F(n) được cho bởi công thức truy hồi như sau:

Tính số hạng thứ n của dãy?

Trang 17

B Bài toán tháp Hà Nội

Phát biểu bài toán:

Có 3 chiếc cọc và bộ n đĩa Các đĩa này có kích

thước khác nhau, các đĩa đều có lỗ để xuyên chúng qua đầu cọc.

Ban đầu các đĩa đều nằm trên 1 cọc, trong đó đĩa nhỏ sẽ nằm trên đĩa lớn.

Yêu cầu: chuyển bộ n đĩa từ cọc ban đầu A sang cọc đích C sao cho vẫn đảm bảo nguyên tắc đĩa nhỏ trên đĩa lớn dưới.

Trang 18

A B C

1 đĩa

B Bài toán tháp Hà Nội (tt):

I TỔNG QUAN VÊ ĐỆ QUY

2 Một số bài toán điển hình

Trang 19

A B C

2 đĩa

B Bài toán tháp Hà Nội (tt):

Trang 21

B Bài toán tháp Hà Nội (tt)

Trang 22

Chương trình minh họa bài toán Tháp Hà Nội:

void Sẽ được trình bày cụ thể ở một số thuật toán chuyen(int Sẽ được trình bày cụ thể ở một số thuật toán sodia, Sẽ được trình bày cụ thể ở một số thuật toán char Sẽ được trình bày cụ thể ở một số thuật toán CotNguon, Sẽ được trình bày cụ thể ở một số thuật toán char Sẽ được trình bày cụ thể ở một số thuật toán CotDich, Sẽ được trình bày cụ thể ở một số thuật toán char Sẽ được trình bày cụ thể ở một số thuật toán CotTG)

Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán { Sẽ được trình bày cụ thể ở một số thuật toán

if Sẽ được trình bày cụ thể ở một số thuật toán (sodia>0) Sẽ được trình bày cụ thể ở một số thuật toán {

Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán chuyen( sodia-1 , Sẽ được trình bày cụ thể ở một số thuật toán CotNguon, Sẽ được trình bày cụ thể ở một số thuật toán CotTG , Sẽ được trình bày cụ thể ở một số thuật toán CotDich);

Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán printf(“%c Sẽ được trình bày cụ thể ở một số thuật toán ->%c\n”, Sẽ được trình bày cụ thể ở một số thuật toán CotNguon Sẽ được trình bày cụ thể ở một số thuật toán , Sẽ được trình bày cụ thể ở một số thuật toán CotDich); Sẽ được trình bày cụ thể ở một số thuật toán // Sẽ được trình bày cụ thể ở một số thuật toán Dia Sẽ được trình bày cụ thể ở một số thuật toán lon Sẽ được trình bày cụ thể ở một số thuật toán nhat Sẽ được trình bày cụ thể ở một số thuật toán hien Sẽ được trình bày cụ thể ở một số thuật toán tai Sẽ được trình bày cụ thể ở một số thuật toán

Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán chuyen( sodia-1 , Sẽ được trình bày cụ thể ở một số thuật toán CotTG, Sẽ được trình bày cụ thể ở một số thuật toán CotDich , Sẽ được trình bày cụ thể ở một số thuật toán CotNguon);

Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán }

Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán Sẽ được trình bày cụ thể ở một số thuật toán }

I TỔNG QUAN VỀ ĐỆ QUY

2 Một số bài toán điển hình

B Bài toán tháp Hà Nội (tt):

Trang 23

Phát biểu bài toán: Tìm cách đặt 8 quân hậu trên 1 bàn cờ mà không có 2 quân hậu nào có thể ăn được nhau.

Trang 24

Bài toán 8 quân hậu (mô phỏng)

C Bài toán 8 quân hậu (tt):

I TỔNG QUAN VỀ ĐỆ QUY

2 Một số bài toán điển hình

Trang 25

Bài toán 8 quân hậu (mô phỏng)

Ω4

Trang 26

Bài toán 8 quân hậu (mô phỏng)

Trang 27

Bài toán 8 quân hậu (mô phỏng)

Ω7

Ω6

Ω5

Ω5

Trang 28

Bài toán 8 quân hậu (mô phỏng)

Trang 29

Bài toán 8 quân hậu (mô phỏng)

Trang 30

Ω Ω Ω Ω

Ω Ω

Ω Ω

2 Một số bài toán điển hình

Bài toán 8 quân hậu (mô phỏng): một kết quả

Trang 32

II KHỬ ĐỆ QUY (QUICK SORT) 1.Tổng quan về thuật toán Quick Sort

A - Giới thiệu thuật toán Quick Sort:

Hoare.

sử dụng ít tài nguyên hơn các phương pháp khác.

Trang 33

Để sắp xếp dãy , giải thuật Quicksort dựa vào việc phân hoạch dãy ban đầu thành 2 dãy con:

Dãy con 1: Gồm các phần tử có giá trị không lớn hơn x.

Dãy con 2: Gồm các phần tử có giá trị không nhỏ hơn x.

(x là giá trị của 1 phần tử tùy ý trong dãy ban đầu)

ak ≤ x ak ≥ x

Trang 34

Nhận xét:

dãy ban đầu đã được sắp

chỉ có thứ tự khi các đoạn 1, 3 được sắp  Ta tiếp tục

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

B - Ý tưởng thuật toán Quick Sort (tt):

k ≥ x

ak = x

Trang 35

Bước 1: Nếu left ≥ right //dãy có ít hơn 2 phần tử

Kết thúc; //dãy đã được sắp xếp

Bước 2: Phân hoạch dãy aleft … aright thành các đoạn: aleft aj, ai aright

Đoạn 1: aleft … aj x Đoạn 2: aj+1…ai-1=x Đoạn 3: ai aright ≥ x

Bước 3: Sắp xếp đoạn 1: aleft aj //quay lại bước 1

Bước 4: Sắp xếp đoạn 3: a a //quay lại bước 1

Trang 36

C - Giải thuật Quick Sort (tt):

Giải thuật phân hoạch dãy , thành 2 dãy con (Sử dụng trong bước 2)

left.

x = a[k]; i=left; j=right;

chổ:

Bước 2.2a: Trong khi (a[i] < x) i++;

Bước 2.2b: Trong khi (a[j] >x ) j ;

Bước 2.2c: Nếu i ≤ j //a[i] a[j] mà a[j] đứng sau a[i]

Hoán vị (a[i],a[j]); i++; j ;

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

Trang 37

Về nguyên tắc, có thể chọn giá trị mốc x (a[k]) là một phần tử tùy ý trong dãy, nhưng để đơn giản, dễ diễn đạt giải thuật, phần tử có vị trí giữa thường được chọn, khi

đó k=(left+right)/2.

Giá trị mốc x được chọn sẽ có tác động đến hiệu quả thực hiện thuật toán vì nó quyết định số lần phân hoạch:

Số lần phân hoạch sẽ ít nhất nếu ta chọn được x là phần tử median của dãy Tuy nhiên do chi phí xác định phần tử

median quá cao nên trong thực tế người ta không chọn phần

tử này mà chọn phần tử nằm chính giữa dãy làm mốc với hi

Trang 38

D - Cài đặt Quick Sort

void QuickSort(int a[],int left,int right){

swap(a[i],a[j]); i++; j ;

} }while(i<=j);

if(left<j) QuickSort(a,left,j);

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

Trang 39

5 3 6 7 12 4 10 1

1 2 3 4 5 6 7 8 left

right

Trang 40

5 3 6 7 12 4 10 1

Trang 41

5 3 6 7 12 4 10 1

1 2 3 4 5 6 7 8

1 Phân hoạch đoạn left = 1, right = 8

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[4]=6; i=left=1; j=right=8

6

Trang 42

5 3 4 7 12 6 10 1

1 2 3 4 5 6 7 8

5

1.1 Phân hoạch đoạn left= 1, right= j=4 (left, j của 1)

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[2]=5; i=left=1; j=right=4

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

E - Ví dụ (tt):

Trang 43

4 3 5 7 12 6 10 1

1 2 3 4 5 6 7 8

4

1.1.1 Phân hoạch đoạn left= 1, right= j=3 (left, j của 1.1)

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[2]=4; i=left=1; j=right=3

Trang 44

1.1.1.1 Phân hoạch đoạn left= 1, right= j=2 (left, j của 1.1.1)

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[1]=1; i=left=1; j=right=2

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

Trang 45

E - Ví dụ: (tt)

1.1.1.2 Phân hoạch đoạn left= i= 3, right= 3 (i, right của 1.1.1)

Bước 1: Kiểm tra (left≥ right) => Dừng 1.1.2 Phân hoạch đoạn left= i= 4, right= 4 (i, right của 1.1)

Bước 1: Kiểm tra (left≥ right) => Dừng

Trang 46

E - Ví dụ: (tt)

1.2 Phân hoạch đoạn left= i= 5, right= 8 (i, right của 1)

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[6]=12; i=left=5; j=right=8

1

1 2 3 4 5 6 7 8

12

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

Trang 47

E - Ví dụ: (tt)

1.2.1 Phân hoạch đoạn left= 5, right= j= 7 (left, j của 1.2)

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[6]=12; i=left=5; j=right=8

1

1 2 3 4 5 6 7 8

10

Trang 48

E - Ví dụ: (tt)

1.2.1.1 Phân hoạch đoạn left= 5, right= j= 6 (left, j của 1.2.1)

Bước 1: Kiểm tra (left≥ right)?

Bước 2: x=a[(left+right)/2]=a[5]=7; i=left=5; j=right=6

1

1 2 3 4 5 6 7 8

7

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

Trang 49

Hiệu quả thực hiện của giải thuật Quick Sort phụ thuộc vào việc chọn giá trị mốc.

được phần tử median làm mốc Khi đó dãy được phân chia thành 2 phần bằng nhau và cần lần phân hoạch thì sắp xếp thành công.

cực đại (hoặc cực tiểu) là mốc, dãy sẽ bị phân chia thành 2 phần không đều:

Trang 50

Thuật toán Tốt nhất Trung bình Xấu nhất

Quick Sort O(nlog 2 (n)) O(nlog 2 (n)) O(n 2 )

Selection Sort O(n 2 ) O(n 2 ) O(n 2 )

Bubble Sort O(n 2 ) O(n 2 ) O(n 2 )

Insertion Sort O(n) O(n 2 ) O(n 2 )

So sánh độ phức tạp của thuật toán Quick Sort với một số

thuật toán sắp xếp phổ biến khác

II KHỬ ĐỆ QUY (QUICK SORT)

1 Tổng quan về thuật toán Quick Sort

F - Hiệu quả thuật toán Quick Sort (tt):

Trang 52

Ý tưởng:

quy vào một ngăn xếp ẩn (implicit stack) để lần lượt lấy ra xử

lý Như vậy nếu gặp dữ liệu lớn sẽ dễ gây tràn stack.

hàm Quick Sort trong đệ quy ta thay bằng cách lưu lại các giá trị bên trái và bên phải của 2 dãy con vào 2 stack Sl và Sr, khi

nào cần sẽ gọi ra (chúng Sẽ được trình bày cụ thể ở một số thuật toán ta Sẽ được trình bày cụ thể ở một số thuật toán cũng Sẽ được trình bày cụ thể ở một số thuật toán có Sẽ được trình bày cụ thể ở một số thuật toán thể Sẽ được trình bày cụ thể ở một số thuật toán lưu Sẽ được trình bày cụ thể ở một số thuật toán chung Sẽ được trình bày cụ thể ở một số thuật toán các Sẽ được trình bày cụ thể ở một số thuật toán giá Sẽ được trình bày cụ thể ở một số thuật toán trị Sẽ được trình bày cụ thể ở một số thuật toán

bên Sẽ được trình bày cụ thể ở một số thuật toán trái Sẽ được trình bày cụ thể ở một số thuật toán và Sẽ được trình bày cụ thể ở một số thuật toán bên Sẽ được trình bày cụ thể ở một số thuật toán phải Sẽ được trình bày cụ thể ở một số thuật toán vào Sẽ được trình bày cụ thể ở một số thuật toán 1 Sẽ được trình bày cụ thể ở một số thuật toán Stack, Sẽ được trình bày cụ thể ở một số thuật toán khi Sẽ được trình bày cụ thể ở một số thuật toán lấy Sẽ được trình bày cụ thể ở một số thuật toán ra Sẽ được trình bày cụ thể ở một số thuật toán sẽ Sẽ được trình bày cụ thể ở một số thuật toán lấy Sẽ được trình bày cụ thể ở một số thuật toán 2 Sẽ được trình bày cụ thể ở một số thuật toán phần Sẽ được trình bày cụ thể ở một số thuật toán tử Sẽ được trình bày cụ thể ở một số thuật toán liên Sẽ được trình bày cụ thể ở một số thuật toán tiếp).

II KHỬ ĐỆ QUY (QUICK SORT)

2 Khử đệ quy thuật toán Quick Sort

Ngày đăng: 13/08/2015, 00:32

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w