YOMEDIA
ADSENSE
chương 5: Một số thuật toán thông dụng
143
lượt xem 25
download
lượt xem 25
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
các bước được thực hiện thoe 1 trình tự tuyến tính, hết bước này đến bước khác...
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: chương 5: Một số thuật toán thông dụng
- TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƢƠNG Bài 5. Một số thuật toán thông dụng Đỗ Bá Lâm lamdb-fit@mail.hut.edu.vn Nội dung 5.1. Các cấu trúc cơ bản trong lập trình 5.2. Giả mã (pseudocode) 5.3. Thuật toán số học 5.4. Thuật toán về dãy 5.5. Thuật toán đệ quy 2 1
- 5.1. Các cấu trúc cơ bản trong lập trình • Cấu trúc tuần tự • Cấu trúc rẽ nhánh • Cấu trúc lặp 3 5.1.1. Cấu trúc tuần tự • Các bƣớc đƣợc thực hiện theo 1 trình tự tuyến tính, hết bƣớc này đến bƣớc khác Bước 1 Bước 2 … Bước n 4 2
- 5.1.2. Cấu trúc rẽ nhánh • Việc thực hiện bƣớc nào phụ thuộc vào điều kiện xác định. • Ví dụ: Tìm max của 2 số a, b. – Nếu a > b thì max là a, ngƣợc lại max sẽ là b. – Diễn giải: • Nhập 2 số a, b. B1: • Nếu a > b thì Max = a và đi đến bƣớc kết thúc (B4). B2: • (a b Max a Max b 5 5.1.3. Cấu trúc lặp • Một tác động/ nhiệm vụ có thể đƣợc thực hiện lặp nhiều lần. Điều kiện • Số lần lặp có thể biết trƣớc hoặc không biết trƣớc.Tuy nhiên số lần lặp phải hữu hạn. Thực hiện công việc trong vòng lặp Thực hiện công việc khi thoát khỏi vòng lặp 6 3
- 5.1.3. Cấu trúc lặp (2) Nhập N và Ví dụ: Tìm số lớn nhất của dãy số a1, a2,…,aN một dãy có n số Lần lượt phải so sánh số Max Max a1; i=2 tạm thời (lúc đầu Max được gán bằng phần tử thứ nhất, a1) với ai, với i từ 2, 3,…, n. Đ Hiển thị i>N “Max là số lớn nhất” Việc so sánh này được thực hiện lặp nhiều lần giữa Max S và ai. Đ Max ai Khi kết thúc quá trình lặp, ta ai > Max sẽ thu được Max là số lớn S nhất của dãy n số. ii+1 7 Nội dung 5.1. Các cấu trúc cơ bản trong lập trình 5.2. Giả mã (pseudocode) 5.3. Thuật toán số học 5.4. Thuật toán về dãy 5.5. Thuật toán đệ quy 8 4
- 5.2. Mã giả (pseudocode) • Gán: ; := –ii+1 – a := b + c • Cấu trúc chọn if(điều kiện) then (hành động) hoặc if(điều kiện) then (hành động) else (hành động) • Cấu trúc nhảy goto: – goto nhãn x; 9 5.2. Giả mã (2) • Cấu trúc lặp: while điều_kiện do hành_động hoặc repeat hành_động until điều_kiện hoặc for biến:= gtrị_đầu to gtrị_cuối do hành_động hoặc for biến:= gtrị_đầu downto gtrị_cuối do hành_động 10 5
- Nội dung 5.1. Các cấu trúc cơ bản trong lập trình 5.2. Giả mã (pseudocode) 5.3. Thuật toán số học 5.4. Thuật toán về dãy 5.5. Thuật toán đệ quy 11 5.3. Thuật toán số học • Các bài toán về số học – Xác định một số nguyên có phải là số nguyên tố/hợp số hay không – Tìm USCLN, BSCNN của 2 số nguyên – .. 12 6
- Bài toán số nguyên tố • Cho một số nguyên dƣơng p. Làm thế nào để biết đƣợc p có phải số nguyên tố hay không? – Input: p nguyên dƣơng – Output: kết luận về tính nguyên tố của p • Ý tƣởng? – p = 1? Không phải số nguyên tố – p > 1? • Kiểm tra từ 2 đến p-1 có phải là ƣớc số của p không • Nếu có thì kết luận p không là số nguyên tố, ngƣợc lại không có số nào thì kết luận p là số nguyên tố 13 Bài toán số nguyên tố (2) Nhập p if p=1 then begin Xuất: p không nguyên tố; Dừng thuật toán; end flag := TRUE for k:=2 to p-1 do if (k là ƣớc số của p) then begin flag:=FALSE; break; { ngắt vòng lặp FOR } end if flag=TRUE then Xuất: p là số nguyên tố else Xuất: p không là số nguyên tố 14 7
- Nội dung 5.1. Các cấu trúc cơ bản trong lập trình 5.2. Giả mã (pseudocode) 5.3. Thuật toán số học 5.4. Thuật toán về dãy 5.5. Thuật toán đệ quy 15 5.4. Thuật toán về dãy • Làm việc với một dãy số • Các bài toán điển hình – Tìm số lớn nhất, nhỏ nhất trong dãy – Kiểm tra dãy có phải là dãy tăng hoặc dãy giảm – Sắp xếp dãy tăng dần hoặc giảm dần – Tìm trong dãy có phần tử nào bằng một giá trị cho trƣớc – Tính trung bình cộng của dãy –… 16 8
- Ví dụ - Tìm số lớn nhất trong dãy • Input: dãy số a1, a2, a3,… an • Output: max là giá trị lớn nhất trong dãy số đã cho • Thuật toán: max:=a1; for i:=2 to n do if max < ai then max:= ai Xuất: max là giá trị lớn nhất trong dãy số 17 Bài tập • Bài 1. Xây dựng thuật toán tìm phần tử có giá trị truyệt đối lớn nhất trong dãy gồm n phần tử. • Bài 2. Xây dựng thuật toán tìm tổng của các số chẵn và tổng của các số lẻ trong dãy gồm n phần tử đƣợc nhập vào từ bàn phím. • Bài 3. Xây dựng thuật toán kiểm tra xem một dãy số gồm n phần tử đƣợc nhập vào từ bàn phím có phải là dãy số tăng (hoặc giảm) không. • Bài 4. Xây dựng thuật toán tính trung bình cộng của các số dƣơng trong dãy gồm n số đƣợc nhập vào từ bàn phím. 18 9
- Nội dung 5.1. Các cấu trúc cơ bản trong lập trình 5.2. Giả mã (pseudocode) 5.3. Thuật toán số học 5.4. Thuật toán về dãy 5.5. Thuật toán đệ quy 19 5.5. Thuật toán đệ quy • Với bài toán có thể đƣợc phân tích và đƣa tới việc giải một bài toán cùng loại nhƣng cấp độ thấp hơn – độ lớn dữ liệu nhập nhỏ hơn – giá trị cần tính toán nhỏ hơn Tự thực hiện lại thuật toán • Ví dụ: – Giai thừa: n! = (n-1)! * n – Dãy số Fibonacci: 0, 1, 1, 2, 3, 5, 8... • F(n) = F(n-1) + F(n-2) 20 10
- 5.5. Thuật toán đệ quy (2) • Để xây dựng thuật toán đệ quy, cần xác định: – Trƣờng hợp cơ bản: (Các) trƣờng hợp không cần thực hiện lại thuật toán. – Phần tổng quát: Có yêu cầu gọi đệ quy • Cần xác định nguyên lý đƣa trƣờng hợp tổng quát về trƣờng hợp cơ bản • Đảm bảo tính dừng của giải thuật đệ quy - chắc chắn từ trƣờng hợp tổng quát sẽ đến đƣợc trƣờng hợp cơ bản 21 Ví dụ • Tính giai thừa của n: – Trƣờng hợp cơ bản: 0! = 1 – Trƣờng hợp tổng quát: n! = (n-1)! * n • Xây dựng dãy Fibonacci – Trƣờng hợp cơ bản: F(0) = F(1) = 1 – Trƣờng hợp tổng quát: F(n) = F(n-1) + F(n-2) 22 11
- Tính giai thừa - Thuật toán đệ quy • Input: số tự nhiên n • Output: GT(n)=n! • Thuật giải: Nhập n GT:=1; if n>0 then GT := GT(n-1)*n; Xuất GT 23 Bài tập • Xây dựng thuật toán cho bài toán tìm số Fibonacci F(n) 24 12
- Thuật giải heuristic • Dùng “mẹo” • Áp dụng với những bài toán – Chƣa tìm đƣợc thuật toán và không biết có tồn tại thuật toán không – Có thuật toán nhƣng thời gian tính toán quá lâu hoặc điều kiện của thuật toán khó đáp ứng 25 13
ADSENSE
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn