1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình Thuật toán GV. Hà Đại Dương

17 256 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

Định dạng
Số trang 17
Dung lượng 333,04 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 trình bày về khái niệm, cách biểu diễn thuật toán sắp xếp (sắp xếp chọn, sắp xếp chèn, sắp xếp nổi bọt) và thuật toán tìm kiếm (tìm kiếm tuần tự và tìm kiếm nhị phân). Để biết rõ hơn về nội dung chi tiết của bài giảng, mời các bạn cùng tham khảo.

Trang 1

Tuần 10 - Thuật toán

Giáo viên: Hà Đại Dương

duonghd@mta.edu.vn

Kỹ thuật lập trình

Nội dung

1 Thuật toán (Khái niệm, Biểu diễn)

2 Thuật toán sắp xếp

3 Thuật toán tìm kiếm

4 Bài tập

Thuật toán

Trang 2

• Một thuật toán là một bản liệt kê các chỉ dẫn,

các quy tắc cần thực hiện theo từng bước xác

định nhằm giải quyết một bài toán đã cho

trong một khoảng thời gian hữu hạn

chương trình (ngôn ngữ nào đó) 1 cách dễ

dàng và đúng đắn

• Ví dụ: Mô tả thuật toán giải quyết bài toán tìm

phần tử lớn nhất trong dãy có n số cho trước

Khái niệm

Mô tả thuật toán tìm số lớn nhất

1 Chỉ số phần tử lớn nhất tạm thời (LNTT) = chỉ

số phần tử đầu tiên;

2 So sánh số tiếp theo với giá trị LNTT, nếu lớn

hơn giá trị LNTT thì đặt:

3 Nếu còn phần tử trong dãy -> lặp lại bước 2)

4 Phần tử LNTT ở thời điểm này chính là phần

tử lớn nhất trong dãy (cần tìm)

Dạng giả mã

Trang 3

Tính chất của TT …

toán hay các thao tác mà máy tính thực

hiện được là chính xác

hiện bằng các câu lệnh minh bạch; các

câu lệnh được sắp xếp theo thứ tự nhất

định

Tính chất của TT …

được viết bởi nhiều người trên nhiều máy

tính vẫn phải cho kết quả như nhau

dụng cho một bài toán nhất định mà có

thể áp dụng cho một lớp các bài toán có

đầu vào tương tự nhau

số hữu hạn các bước tính toán

Biểu diễn thuật toán

• Có 3 cách biểu diễn thuật toán:

– Sơ đồ khối và

• Dùng ngôn ngữ tự nhiên: mô tả các bước xử lý

bằng ngôn ngữ viết

Trang 4

Mô tả dữ liệu vào/ra

Dữ liệu đầu vào: Một thuật toán phải mô tả rõ

các giá trị đầu vào từ một tập hợp các dữ liệu

xác định Ví dụ, dãy số nguyên a(1), a(2), ,

a(n), với n<

Dữ liệu đầu ra: Từ một tập các giá trị đầu vào,

thuật toán sẽ tạo ra các giá trị đầu ra Các giá

trị đầu ra chính là nghiệm của bài toán Ví dụ,

iolà chỉ số phần tử lớn nhất trong a(1), ,a(n)

Ví dụ

• Thuật toán tìm số lớn nhất

Sơ đồ khối

• Sử dụng bộ kí hiệu các khối để thể hiện thuật

toán

• Bộ kí hiệu:

– Hộp chữ nhật: Các toán tử gán và phép toán tính

toán;

– Hình thoi: Phép toán so sánh cho kết quả thuộc

tập: {đúng, sai}.

– Đường kẻ + mũi tên: Chỉ thao tác tiếp theo;

– Hình elip: Bắt đầu hoặc Kết thúc thuật toán

Trang 5

10/25/2016 13

YES

NO

YES NO

START input a 1 , a 2 , , a n

k = 1

i = 2

k = i

a i > a k

i ≤ n

i = i + 1

END output ak

Giả mã

• Sử dụng ngôn ngữ tự nhiên kết hợp với một

ngôn ngữ lập trình

• Cần tuân thủ quy tắc của một ngôn ngữ:

– Có các cấu trúc cơ bản: tuần tự, lặp và rẽ nhánh.

– Có hệ thống từ khóa, từ điển (phụ thuộc vào bài

toán).

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

Ví dụ

Trang 6

Chương trình

Ví dụ 2

Tìm phần tử có giá trị b trong dãy có n số cho

trước

Trang 7

Chất lượng biểu diễn thuật toán

1 Đúng với ý tưởng đặt ra của bài toán

2 Đơn giản, dễ hiểu

3 Dễ cài đặt

Tính hiệu quả

1 Thời gian: Chi phí cho thời gian tính toán ít

hơn so với các thuật toán giải quyết cùng bài

toán

2 Bộ nhớ: Chiếm dụng bộ nhớ ít hơn so với các

thuật toán giải quyết cùng bài toán

3 Độ chính xác: Nếu là cung cấp lời giải gần

đúng thì gần với lời giải đúng hơn so với

thuật toán giải quyết cùng bài toán

Tính hiệu quả

• Tùy theo bài toán, mục đích mà xét các tiêu

chí nói trên

• Tùy theo chất lượng của thuật toán mà có thể

xét trên mọi tập dữ liệu thử nghiệm, hoặc trên

một số tập dữ liệu minh họa cho một vài khía

cạnh nào đó

Trang 8

Ví dụ 3

• Bài toán: Đếm số lần xuất hiện giá trị b trong

dãy a

• Biểu diễn thuật toán

1 Dạng mô tả bằng lời

2 Dạng sơ đồ khối

3 Dạng giả mã

• Viết chương trình (10 phút)

Thuật toán sắp xếp

Bài toán

• Cho một mảng a (giá trị của nó so sánh được),

hãy sắp xếp mảng a tăng (hoặc giảm) dần

• Một số bài toán thực tế:

– Danh sách lớp: Sắp xếp theo họ tên (tiếng Việt)

điểm tổng kết

– Bảng điểm kết quả thi đại học: sắp xếp theo SBD

• Ví dụ: Sắp xếp dãy 8, 6, 9, 7, 5 giảm dần

Trang 9

Sắp xếp chọn(Selection sort)

Sắp xếp chọn

• Thuật toán:

1 Phần tử đang xem xét là i = 0

2 Chọn phần tử lớn nhất trong đoạn [i N-1] và

đổi chỗ cho phần tử đang xét i;

3 Nếu chưa hết dãy: Đặt i = i + 1, lặp lại bước 2

Nếu hết dãy chuyển đến bước 4.

4 Kết thúc: Mảng đã sắp xếp giảm dần

• Ý tưởng trên đã đề cập đến trong tuần 6

Ví dụ 4

• Biểu diễn thuật toán sắp xếp chọn (10 phút):

• Viết chương trình (10 phút)

Trang 10

10/25/2016 28

Sắp xếp chèn (Insertion sort)

Ý tưởng

• Với 1 dãy đã sắp xếp, ví dụ: 9, 5,2

• Việc thêm vào được thực hiện bằng cách

duyệt từ cuối lại để tìm vị trí đúng của nó và

chèn vào Ví dụ thêm và 7 ở dãy trên

• Dãy có 1 phần tử được hiểu là đã sắp xếp

9,5,2, 7

9,5, 7 ,2

9, 7 ,5,2

9,7,5,2

Trang 11

Ví dụ 5

• Sắp xếp dãy 8, 6, 9, 7, 5 giảm dần

8

6 -> 8,6

9 -> 8,6,9 -> 8,9,6 -> 9,8,6

7 -> 9,8,6,7 -> 9,8,7,6

5 -> 9,8,7,6,5

Giả mã

• Input: A[0 N-1] phần từ

• Ouput: A[0 N-1] đã được sắp xếp không tăng

• for i=1 -> N-1

1 x=A[i];

2 vt=i;

3 while (vt>0 && A[vt-1]<x)

–A[vt]=A[vt-1];

–vt ;

4 A[vt]=x;

Ví dụ 5

• Viết hàm sắp xếp 1 mảng giảm dần (10 phút)

Trang 12

Sắp xếp nổi bọt (Bubble sort)

Ý tưởng

• Xét hai phần tử ở đầu tiên của dãy, nếu không

đúng thứ tự đổi chỗ cho nhau

• Tiếp tục xét các cặp đến cuối dãy

• Lặp lại quá trình với cặp đầu dãy đến lúc

không có cặp nào bị thay đổi

Giả mã

• Input: A[0 N-1] phần tử

• Output: A[0 N-1] phần tử sắp xếp không tăng

• for i= N-1 -> 1

1 solandoi=0

2 for j=0->i-1

if(a[j]>a[j+1])

- DoiCho(a[j],a[j+1]);

- solandoi = solandoi +1;

3 if (solandoi ==0) break;

Trang 13

Ví dụ 6

• Sắp xếp giảm dần sử dụng thuật toán Bubble

sort

• Hàm DoiCho(x,y) dùng để đổi giá trị của x và y

cho nhau đã viết ở bài trước

• Viết hàm (10 phút)

Thuật toán tìm kiếm

Tìm kiếm tuần tự

• Tìm phần tử có giá trị b trong mảng a gồm n

phần tử

• Với mảng a và b là số ta đã làm ở ví dụ 2

Trang 14

Xem lại ví dụ 2

• Giả mã

Xem lại ví dụ 2

Ví dụ 7

• Viết chương trình tìm kiếm (tuần tự) Họ tên 1

sinh viên trong danh sách sinh viên của lớp

• Viết chương trình (10 phút)

Trang 15

Tìm kiếm nhị phân

• Xét bài toán tìm b trong dãy a có n phần tử

• Nếu a đã được sắp xếp (tăng dần) -> có thể

tìm kiếm nhanh hơn theo ý tưởng sau:

1 So sánh b với phần tử ở “giữa” của a, phần tử k

2 Nếu bằng nhau -> Kết thúc

3 Nếu b<a[k], chỉ cần tìm b trong đoạn [0,k-1]

4 Nếu b>a[k], chỉ cần tìm b trong đoạn [k+1,n-1]

Thực hiện tương tự cho bước 3/bước 4 (với đoạn

ngắn hơn)

Giả mã

• Viết thuật toán dạng giả mã (15 phút)

Input: a[0 N-1], x

1 vt = -1;

2 l = 0;

3 r = N-1;

2 while(l<=r)

a k=(l+r)/2;

b if (a[k]=x)

vt=k;

break;

else if(a[k]<x)

i = k + 1;

else r=k-1;

Ví dụ 8

• Viết hàm tìm kiếm nhị phân (10 phút)

Trang 16

Bài tập

Bài tập

1 Mô tả thuật toán sắp xếp chọn

2 Mô tả thuật toán sắp xếp chèn

Bài tập về nhà

1 Mô tả thuật toán sắp xếp nổi bọt

2 Mô tả thuật toán tìm kiếm tuần tự

3 Mô tả thuật toán tìm kiếm nhị phân

Trang 17

Bài tập về nhà

4 Tìm hiểu và thử ngiệm thuật toán sắp xếp

nhanh (Quick sort)

5 Tìm hiểu và thử ngiệm thuật toán sắp xếp

trộn (Merge sort)

Ngày đăng: 16/05/2017, 16:13

TỪ KHÓA LIÊN QUAN

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