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

Chuong01 cau truc du lieu va giai thuat

21 434 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 21
Dung lượng 0,96 MB

Nội dung

tài liệu bài giáng cấu trúc dữ liệu và giải thuật ngô công thắng học viện nông nghiệp việt nam tài liệu bài giáng cấu trúc dữ liệu và giải thuật ngô công thắng học viện nông nghiệp việt nam tài liệu bài giáng cấu trúc dữ liệu và giải thuật ngô công thắng học viện nông nghiệp việt nam

1.1 Giải thuật (thuật toán, algorithms) l Giải thuật phải có tính chất sau: l CHƯƠNG CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT l l l l GV Ngô Công Thắng Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Website: dse.vnua.edu.vn/ncthang l Tính thực được: Tính kết thúc: Tính kết quả: Phải cho kết mong muốn Tính hiệu quả: Tính nhất: Tính tổng quát: Phải áp dụng cho toán loại Ngô Công Thắng Mối quan hệ cấu trúc liệu giải thuật 1.1 Giải thuật (thuật toán, algorithms) l Khái niệm: Giải thuật hệ thống thao tác, phép toán thực theo trình tự định số đối tượng liệu đó, cho sau số bước hữu hạn ta có kết mong muốn l Giải thuật phản ánh phép xử lý, đối tượng xử lý liệu Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.2 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.3 1.2 Cấu trúc liệu l l Khái niệm liệu: Dữ liệu phần tử biểu diễn thông tin cần thiết cho toán Một toán có loại liệu: Dữ liệu vào, liệu trung gian, liệu l l l l Dữ liệu vào liệu cần đưa vào để xử lý, đầu vào toán Dữ liệu trung gian liệu chứa kết trung gian trình xử lý Dữ liệu liệu chứa kết mong muốn toán Giải thuật thực biến đổi từ liệu vào thành liệu Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.4 1.2 Cấu trúc liệu (tiếp) l 1.2 Cấu trúc liệu (tiếp) Ví dụ 1: Ta xét toán tính học bổng cho sinh viên theo chế độ hành Các liệu toán bao gồm: Dữ liệu vào: Họ tên, Điểm môn, Số trình môn học l Dữ liệu trung gian: Điểm trung bình l Dữ liệu ra: Học bổng l l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 l 1.5 Dữ liệu nguyên tử phần tử liệu sở tách nhỏ được, chữ số, kí tự, giá trị logic, Trong toán, liệu bao gồm tập liệu nguyên tử Từ liệu nguyên tử ta tạo thành cấu trúc liệu cách thức liên kết khác Chẳng hạn liên kết kí tự lại với tạo thành cấu trúc liệu kiểu xâu kí tự, liên kết số lại với theo kiểu dãy số ta cấu trúc liệu kiểu mảng chiều Ngô Công Thắng 1.2 Cấu trúc liệu (tiếp) l Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.7 1.2 Cấu trúc liệu (tiếp) Ví dụ 2: Xét toán giải phương trình bậc hai ax2 + bx + c = Các liệu toán sau: l Tóm lại, Cấu trúc liệu cách tổ chức phần tử liệu toán Dữ liệu vào: a, b, c l Dữ liệu trung gian: delta l Dữ liệu ra: x1, x2 l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.6 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.8 1.3 Mối quan hệ cấu trúc liệu giải thuật 1.2 Cấu trúc liệu (tiếp) l Khái niệm Cấu trúc lưu trữ: Cách biểu diễn cấu trúc liệu nhớ gọi cấu trúc lưu trữ, cách cài đặt cấu trúc liệu máy vi tính l l Có thể có nhiều cấu trúc lưu trữ khác cho cấu trúc liệu Chẳng hạn cấu trúc liệu kiểu mảng ta lưu trữ ô nhớ nhớ lưu trữ ô nhớ không nhớ Có thể có nhiều cấu trúc liệu khác cài đặt nhớ cấu trúc lưu trữ Chẳng hạn cấu trúc xâu kí tự, cấu trúc mảng cài đặt ô Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.9 Mỗi ngôn ngữ lập trình có cấu trúc liệu tiền định (định sẵn), chọn ngôn ngữ lập trình ta phải chấp nhận cấu trúc liệu tiền định nó, phải vận dụng linh hoạt cấu trúc liệu vào toán cần giải Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.11 Các cách diễn đạt giải thuật 1.2 Cấu trúc liệu (tiếp) l Xét tới giải thuật phải xét giải thuật tác động cấu trúc liệu l Xét tới cấu trúc liệu phải hiểu cấu trúc liệu cần tác động giải thuật để kết mong muốn l Cấu trúc liệu giải thuật Khi cấu trúc liệu thay đổi giải thuật thay đổi theo l Mối quan hệ cấu trúc liệu giải thuật Niklaus Wirth tổng kết sau: Cấu trúc liệu + Giải thuật = Chương trình l 1.10 2.1 Liệt kê bước lời l Trong cách diễn đạt ta phải viết bước làm công việc gì: Bước 1, Bước 2… Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.12 Các cách diễn đạt giải thuật 2.1 Lưu đồ giải thuật (tiếp) 2.2 Lưu đồ giải thuật l Lưu đồ giải thuật sơ đồ có hướng diễn đạt bước thực giải thuật l Lưu đồ giải thuật giúp người lập trình xem xét làm việc giải thuật chi tiết cụ thể l Lưu đồ giải thuật bao gồm hình nối với đường có hướng l Các hình lưu đồ giải thuật gồm có: l Hình thoi thể điệu kiện Hình có đường vào hai đường ứng với hai trường hợp điều kiện điều kiện sai Sai Điều kiện Đúng Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.13 Các hình lưu đồ giải thuật gồm có: l max := A(1) i := i max l 1.15 Bắt đầu Hình elíp thể bắt đầu kết thúc giải thuật Bắt đầu Bài giảng Cấu trúc liệu giải thuật - Chương 01 Ví dụ: Lưu đồ giải thuật tìm giá trị lớn mảng số A có n phần tử 2.1 Lưu đồ giải thuật (tiếp) l Ngô Công Thắng i := i + 1.14 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.16 2.3 Giả mã 2.2.2 Biểu thức Giả mã giả ngôn ngữ lập trình (tựa ngôn ngữ lập trình) l Trong cách diễn đạt giải thuật giả mã, người ta sử dụng ngôn ngữ tự nhiên với cấu trúc chuẩn ngôn ngữ lập trình (Pascal) để mô tả giải thuật Vì sử dụng ngôn ngữ tự nhiên nên sử dụng ký hiệu toán học để mô tả giải thuật ngắn gọn, dễ hiểu l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.17 l Các phép toán: l l l l l l l Số học: +, -, *, /, ^, DIV, MOD Quan hệ: < , = , > , ≤ , ≥, ≠ Logic: NOT, AND, OR, XOR Các giá trị Logic True, False Tên biến dãy chữ cái, chữ số, dấu gạch nối ( _ ), bắt đầu chữ cái, độ dài không giới hạn Biến số: Tên[chỉ số] Ví dụ : a[i], b[i,j] Biểu thức tương tự Pascal Ngô Công Thắng 2.3.1 Quy định chung Tên chương trình viết chữ hoa, thêm dấu gạch ngang đặt sau từ Program l Lời thích đặt hai dấu ngoặc {….} Lời thích quy ước dùng tiếng Việt l l l l l Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.19 2.2.3 Câu lệnh l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.18 Các câu lệnh thể thao tác, công việc cần thực Các câu lệnh viết viết cách dấu ; Phép toán gán ký hiệu dấu := ← Phép hoán đổi giá trị ký hiệu dấu :=: ↔ Cấu trúc tuần tự: Liệt kê công việc, thao tác theo thứ tự Để cho việc theo dõi thuận tiện đánh thêm thứ tự 1), 2), 3)… a), b), c)… Câu lệnh ghép: Begin s1; s2; ; sn; end Trong si câu lệnh i Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.20 2.2.3 Câu lệnh lCâu 2.2.3 Câu lệnh lệnh điều kiện: l Câu lif B then S; lif B then S1 else S2; B biểu thức logic, S câu lệnh Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 lệnh lặp: l Lặp với số lần lặp biết trước: FOR i:=m TO n DO S; FOR i:= n DOWNTO m DO S; 1.21 Ngô Công Thắng 2.2.3 Câu lệnh l Lặp với số lần lặp trước: CASE B1: S1; B2: S2; Bn: Sn; ELSE Sn+1; END CASE Với Bi (i=1, 2,…, n) điều kiện Si (i=1, 2,…, n) câu lệnh Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.23 2.2.3 Câu lệnh Câu lệnh lựa chọn: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 tra điều kiện trước: WHILE B DO S; lKiểm tra điều kiện sau: REPEAT S UNTIL B; lKiểm 1.22 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.24 2.2.3 Câu lệnh 2.2.4.3 Lời gọi chương trình Câu lệnh chuyển: GOTO n; n số hiệu bước giải thuật l Câu lệnh vào ra: l l l l l Lời gọi chương trình dạng hàm Tên_hàm( danh sách tham số thực sự) l Lời gọi chương trình dạng thủ tục CALL Tên_thủ_tục( danh sách tham số thực sự) READ(danh sách biến); WRITE(danh sách hằng, biến, biểu thức); Câu lệnh kết thúc: END Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.25 Ngô Công Thắng 2.2.4 Chương trình 1- Hãy cho biết mối quan hệ cấu trúc liệu giải thuật Lấy ví dụ minh họa 2- Cấu trúc liệu cấu trúc lưu trữ khác điểm nào? 3- Có dãy 15 tên, tên chứa 25 kí tự, minh hoạ cấu trúc lưu trữ dãy tên đó, Pascal cấu trúc lưu trữ có kích thước 4- Hãy nêu cấu trúc liệu tiền định ngôn ngữ lập trình Pascal 5- Ngoài cấu trúc liệu tiền định Pascal có cấu trúc liệu không? cho ví dụ FUNCTION Tên_hàm(danh sách tham số) S1; S2; ; Sn; Tên_hàm:= biểu thức; RETURN 2.2.4.2 Chương trình dạng thủ tục PROCEDURE Tên_thủ_tục(danh sách tham số) S1; S2; ; Sn; RETURN Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.27 Bài tập thảo luận 2.2.4.1 Chương trình dạng hàm Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.26 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.28 Bài tập thảo luận Thiết kế phân tích giải thuật 6- Hãy nêu tính chất giải thuật cho ví dụ minh hoạ 7- Viết giải thuật tính P theo công thức sau: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.29 3.1 Thiết kế thuật giải 3.1.1 Mô đun hóa việc giải toán l Khi thiết kế giải thuật ta sử dụng phương pháp mô đun hoá Nội dung phương pháp mô đun hoá coi toán lớn mô đun phân chia thành mô đun con, mô đun lại phân chia tiếp, mô đun ứng với phần việc mà ta biết cách giải l Với phương pháp mô đun hoá toán lời giải toán tổ chức theo cấu trúc (phân cấp) có dạng sau: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.2 3.1.1 Mô đun hóa việc giải toán Bài tập thảo luận 8- Nhập vào danh sách cho n người bao gồm: Tên, điểm Viết giải thuật tìm điểm người biết tên người 9- Nhập vào danh sách cho n mặt hàng bao gồm: Tên, số lượng, đơn giá Viết giải thuật xếp danh sách theo tên 10- Cho dãy số Viết giải thuật tìm giá trị lớn giá trị nhỏ dãy số 11- Viết giải thuật nhân ma trận Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.30 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.3 3.1.1 Mô đun hóa việc giải toán (tiếp) l l 3.1.1 Mô đun hóa việc giải toán (tiếp) Chiến thuật giải toán chiến thuật “ chia để trị”, để thể chiến thuật người ta dùng cách thiết kế “từ đỉnh xuống” (Top Down) Cách thiết kế Top - Down hay thiết kế từ khái quát đến đến chi tiết thể sau: Phân tích tổng quát toàn vấn đề xuất phát từ liệu mục tiêu đề ra, đề cập đến vấn đề chủ yếu, sau dần vào giải vấn đề cụ thể cách chi tiết Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.4 3.1.1 Mô đun hóa việc giải toán (tiếp) l l l Xuất phát từ phân tích tổng quát ta thấy thuật giải xử lý phải giải vấn đề sau: Đọc tệp: Đọc thông tin từ đĩa từ vào nhớ Xử lý tệp: Xử lý thông tin để đưa kết mong muốn Ghi tệp: Lưu trữ thông tin vào tệp Trên sở ta đưa sơ đồ giải thuật tổng quát sau: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.6 Sơ đồ giải thuật tổng quát Ví dụ: Bài toán đặt dùng máy vi tính để quản lý lương cán xí nghiệp Phân tích tổng quát toán: l l Dữ liệu vào tệp hồ sơ lương, bao gồm ghi chứa thông tin lương cán Bản ghi gồm trường: mã, họ tên, đơn vị, hệ số lương, phụ cấp, nợ Chương trình lập phải cho người sử dụng thực công việc sau: Tìm kiếm thông tin Cập nhật thông tin In bảng tổng hợp lương Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.5 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.7 3.1.1 Mô đun hóa việc giải toán (tiếp) Ví dụ (tiếp) l Các nhiệm vụ phức tạp, cần phải phân chia thành nhiệm vụ Chẳng hạn nhiệm vụ “ XỬ LÝ TÊP” phân chia thành nhiệm vụ con: l l l l Tìm kiếm ghi Cập nhật ghi In lương Những nhiệm vụ lại chia thành nhiệm vụ nhỏ theo sơ đồ sau: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 l 1.8 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.10 3.1.2 Phương pháp tinh chỉnh bước l l Bài giảng Cấu trúc liệu giải thuật - Chương 01 Giải toán có định hướng, tránh sa đà vào chi tiết phụ Làm tảng cho lập trình có cấu trúc Bài toán nhiều người làm, phương pháp mô đun hoá tách toán thành nhiều toán tạo cho nhóm làm việc độc lập, không ảnh hưởng đến nhóm khác Chương trình xây dựng giải thuật thiết kế theo kiểu Top - Down dễ dàng chỉnh sửa Ngô Công Thắng Sơ đồ giải thuật chi tiết Ngô Công Thắng Ưu điểm cách thiết kế Top - Down: 1.9 Phương pháp tinh chỉnh bước phương pháp thiết kế giải thuật gắn liền với lập trình, phản ánh tinh thần trình mô đun hóa toán thiết kế kiểu Top - Down Phương pháp thể sau: Đầu tiên trình bày giải thuật ngôn ngữ tự nhiên để phản ánh ý công việc cần làm Các bước chi tiết hoá dần dần, tương ứng với công việc nhỏ hơn, gọi bước tinh chỉnh Càng bước sau công việc mô tả hướng tới lệnh chương trình Ngôn ngữ tự nhiên → Các bước tinh chỉnh → Giả mã Trong trình liệu tinh chỉnh dần từ dạng cấu trúc đến dạng cài đặt cụ thể Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.11 Ví dụ 1: Sắp xếp dãy n số nguyên theo thứ tự tăng dần l Đầu tiên ta phác thảo giải thuật theo ngôn ngữ tự nhiên sau: l l l Ví dụ 1: Sắp xếp dãy n số nguyên theo thứ tự tăng dần l Procedure SapXep(a,n) 1) For i :=1 To n-1 Do Begin 2) k :=i For j :=i+1 To n Do If a[j] < a[k] Then k :=j 3) x:=a[i]; a[i]:=a[k]; a[k]:=x; End Return Từ dãy số nguyên chưa xếp lấy số nhỏ Cứ lặp lại trình dãy chưa xếp trở thành rỗng Các bước tinh chỉnh dùng giả ngôn ngữ Pascal là: Bước tinh chỉnh đầu tiên: For i:=1 To n-1 Do Begin - Xét từ đến an để tìm số nhỏ ak - Đổi chỗ ak End Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.12 Các bước tinh chỉnh dùng giả ngôn ngữ Pascal là: l Bài giảng Cấu trúc liệu giải thuật - Chương 01 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.14 Phác hoạ thuật giải: Nhập m,n Nhập phần tử ma trận Tìm phần tử lớn hàng đổi chỗ cho phần tử đầu hàng In ma trận Bước tinh chỉnh 2.1: Tìm số nhỏ k:=i For j:= i+1 To n Do If aj < ak Then k:=j Bước tinh chỉnh 2.2: Đổi chỗ x:=ai ; ai:=ak ; ak=x; Ngô Công Thắng Ngô Công Thắng Ví dụ 2: Cho ma trận cấp mxn (m hàng, n cột) Tìm phần tử lớn hàng đổi chỗ cho phần tử đầu hàng Ví dụ 1: Sắp xếp dãy n số nguyên theo thứ tự tăng dần l Sau chỉnh lại ta có thủ tục xếp sau: 1.13 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.15 Ví dụ 2: Cho ma trận cấp mxn (m hàng, n cột) Tìm phần tử lớn hàng đổi chỗ cho phần tử đầu hàng l 3.2 Phân tích, đánh giá giải thuật Diễn đạt giả ngôn ngữ Pascal: 3.2.1 Đặt vấn đề l Phân tích tính đắn: Chạy thử chương trình liệu, so sánh kết với kết biết l Các công cụ toán học chứng minh tính đắn giải thuật l Tính đơn giản: Dễ hiểu, dễ lập trình, dễ chỉnh lý l Phân tích thời gian: Thời gian thực giải thuật tiêu chuẩn đánh giá hiệu lực giải thuật Read(m,n) For i:= To m Do Đọc vào phần tử hàng i For i:= To m Do Begin Tìm a[i,k] phần tử lớn cho hàng i Đổi chỗ a[i,k] a[i,1] End For i:=1 To m Do In phần tử hàng i Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.16 Ngô Công Thắng Ví dụ 2: Cho ma trận cấp mxn (m hàng, n cột) Tìm phần tử lớn hàng đổi chỗ cho phần tử đầu hàng l Các bước tinh chỉnh sau: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 l Với toán có nhiều giải thuật, ta cần chọn giải thuật dẫn đến kết nhanh Thời gian thực phụ thuộc vào nhiều yếu tố như: l l 1.17 1.18 3.2.2 Phân tích thời gian thực giải thuật l Readln(m,n) For i:=1 To m Do For j:= To n Do Read(a[i,j]) For i:=1 To m Do Begin k:=1 For j:=2 To n Do If a[i,j]> a[i,k] Then k:=j a[i,k] a[i,1] End For i:= To m Do Begin W riteln; For j:=1 To n Do Write(a[i,j], ‘ ‘) End Bài giảng Cấu trúc liệu giải thuật - Chương 01 Kích thước liệu vào Nếu gọi n kích thước liệu vào thời gian thực T giải thuật phải biểu diễn hàm n: T(n) Các kiểu lệnh, tốc độ xử lý máy tính, ngôn ngữ viết chương trình, chương trình dịch ảnh hưởng đến tốc độ thực Nhưng yếu tố không đồng với loại máy tính, đưa chúng vào xác lập T(n) Điều có nghĩa T(n) tính theo đơn vị giây, phút… Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.19 3.2.3 Độ phức tạp tính toán giải thuật (tiếp) 3.2.3 Độ phức tạp tính toán giải thuật l l l Cách đánh giá thời gian thực giải thuật không phụ thuộc vào máy tính yếu tố liên quan mà phụ thuộc vào kích thước liệu đầu vào gọi đánh giá theo “Độ phức tạp tính toán giải thuật” Nếu thời gian thực giải thuật T(n) = Cn2, C số, ta nói độ phức tạp tính toán giải thuật có cấp n2, kí hiệu là: T(n)= O(n2) Tổng quát: Hàm f(n) có độ phức tạp tính toán cấp g(n), kí hiệu f(n) = O(g(n)), tồn số C n0 cho: f(n) ≤ Cg(n) với n ≥ n0 nghĩa hàm f(n) bị chặn Cg(n), với C số với n từ điểm l l Các hàm nn , n! , 2n gọi hàm mũ Một gíải thuật có độ phức tạp tính toán cấp hàm mũ chậm, khó chấp nhận l Các hàm n3, n2, nlog2n, n, log2n hàm loại đa thức Độ phức tạp tính toán giải thuật có cấp đa thức chấp nhận l Ví dụ 1: f(n) = O(n3) có nghĩa độ phức tạp tính toán cấp n3 Ví dụ 2: f(n) = O(2n) có nghĩa độ phức tạp tính toán cấp 2n Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.20 Ngô Công Thắng 3.2.3 Độ phức tạp tính toán giải thuật (tiếp) l Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.22 3.2.4 Xác định độ phức tạp tính toán Các hàm thể độ phức tập tính toán giải thuật có dạng sau: nn, n!, 2n, n3, n2, nlog2n, n, log2n Các hàm theo giá trị giảm dần, có nghĩa với giá trị n, hàm nn lớn nhất, log2n nhỏ Các hàm có dạng đồ thị sau: Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.21 l Quy tắc cộng: Giả sử T1(n) T2(n) thời gian thực đoạn chương trình P1 P2 mà T1(n)= O(f(n)), T2(n)=O(g(n)), thời gian thực P1 đến P2 là: T1(n) + T2(n) = O(max(f(n),g(n))) l Ví dụ: Chương trình có bước, bước có độ phức tạp tính toán O(n3), O(n), O(nlog2n) Vậy thời gian thực bước là: T1(n) + T2(n) + T3(n) = O(max(n3, n, nlog2n) = O(n3) l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.23 3.2.4 Xác định độ phức tạp tính toán (tiếp) l 3.2.4 Xác định độ phức tạp tính toán (tiếp) Quy tắc nhân: l l l Nếu tương ứng với bước P1 P2 T1(n) = O(f(n)),T2(n) = O(g(n)) thời gian thực P1 P2 lồng : T1(n).T2(n) = O(f(n).g(n)) Ví dụ: Câu lệnh x:=x+1 có thời gian thực số C => T(n) =O(1) Câu lệnh: For i :=1 To n Do x :=x+1; có thời gian thực là: T(n)=O(n.1)=O(n) Câu lệnh l 1) Read(x,n); s:=1; 2) For i :=1 To n Do begin p:=1; For j :=1 To i Do p:=p*x/j ; s:=s+p; end; end For i :=1 To n Do For j :=1 To n Do x:=x+1; có thời gian thực đánh giá là: T(n)= O(n.n) = O(n2) Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.24 Ngô Công Thắng 3.2.4 Xác định độ phức tạp tính toán (tiếp) l l l l O(c.f(n)) = O(f(n), c số Ví dụ: O(n2/3) = O(n2) Chú ý 1: Khi đánh giá thời gian thực giải thuật ta cần ý tới bước tương ứng với phép toán gọi phép toán tích cực Đó phép toán mà thời gian thực không thời gian thực phép toán khác Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.26 3.2.4 Xác định độ phức tạp tính toán (tiếp) Quy tắc bỏ số l Ví dụ: ex = 1+ x/1! + x2/2! + + xn/n! với x n cho trước Giải thuật 1: 1.25 Trong giải thuật phép toán tích cực p:=p*x/j Ta thấy thực với số lần là: 1+2+3+ + n = n(n+1)/2 Vậy thời gian thực giải thuật là: T(n) = O(n2) Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.27 3.2.4 Xác định độ phức tạp tính toán (tiếp) l 3.2.4 Xác định độ phức tạp tính toán (tiếp) Ví dụ: Cho véc tơ a có n phần tử a1, a2, , an Tìm a phần tử có giá trị = x cho trước l Giải thuật sau: Found := False; i:=1; While (i0 b) n!=1 n=0 Bài giảng Cấu trúc liệu giải thuật - Chương 02 l Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.34 Ví dụ: Bài toán tìm từ từ điển Giải thuật đệ quy Ngô Công Thắng l 2.33 l Giải thuật đệ quy toán sau: IF từ điển trang THEN tìm từ trang ELSE BEGIN Mở từ điển vào trang giữa; Xác định xem nửa chứa từ IF từ nằm nửa trước THEN tìm nửa trước ELSE tìm nửa sau END Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.35 Ví dụ: Bài toán tìm từ từ điển l Trong giải thuật có điểm cần ý: l l l 4.3 Thiết kế giải thuật đệ quy l Điểm 1: Sau lần từ điển tách đôi, nửa thích hợp tìm kiếm theo chiến thuật dùng Điểm 2: Có trường hợp đặc biệt sau tách đôi từ điển trang, giải trực tiếp cách tìm từ trang Trường hợp đặc biệt gọi trường hợp suy biến l Có thể định nghĩa toán dạng toán loại nhỏ nào? Như kích thước toán giảm lần gọi đệ quy? Trường hợp đặc biệt toán gọi trường hợp suy biến? Giải thuật gọi giải thuật chia đôi: Bài toán tách đôi toán nhỏ hơn, toán nhỏ lại dùng chiến thuật chia đôi, gặp trường hợp suy biến Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.36 Khi toán xét liệu xử lý định nghĩa dạng đệ quy việc thiết kế giải thuật đệ quy tỏ thuận lợi Khi thiết kế giải thuật đệ quy cần trả lời câu hỏi sau: Ngô Công Thắng Ví dụ: Bài toán tìm từ từ điển l Thủ tục đệ quy toán viết sau: Procedure timkiem(Tudien, tu) IF Tudien trang THEN tìm từ trang ELSE BEGIN Mở từ điểm vào trang Xác định xem nửa chứa từ IF Từ nằm nửa trước THEN CALL timkiem(Tudien1, tu) ELSE CALL timkiem(Tudien2, tu) END RETURN Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.37 Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.38 Bài toán 1: Tính n! l Định nghĩ đệ quy hàm n! sau: FAC(n) = n=0 FAC(n)=n×FAC(n-1) n>0 Thuật giải đệ quy viết dạng hàm: Function FAC(n) If n=0 then begin FAC :=1; return; end; Else FAC := n * FAC(n-1); Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.39 Bài toán 1: Tính n! l Bài toán 3: Bài toán “Tháp Hà nội” Đối chiếu với đặc điểm thủ tục đệ quy ta thấy: l Lời gọi tới đứng sau Else l Mỗi lần gọi đệ quy giá trị giảm đi: FAC(4)→FAC(3)→FAC(2)→ FAC(1) l Trường hợp suy biến FAC(0): FAC(0) = l Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.40 Bài toán 2: Lập dãy số FIBONACCI 1 13 l l Định nghĩa F(n) sau: F(n) = n ≤ F(n)=F(n-2)+F(n-1) n>2 Thủ tục đệ quy thể giải thuật tính F(n) sau: Function F(n:integer) If n2): Ta coi n-1 đĩa đĩa thứ xử lý giống trường hợp đĩa: l l l l Chuyển n-1 đĩa từ cọc B sang cọc C thuật giải là: l l l l Chuyển n-1 đĩa từ cọc A sang cọc B Chuyển đĩa thứ n từ cọc A sang cọc C Chuyển n-1 đĩa từ cọc B sang cọc C Chuyển n-2 đĩa từ cọc B sang cọc A Chuyển đĩa từ cọc B sang cọc C Chuyển n-2 đĩa từ cọc B sang cọc C Cứ làm trường hợp suy biến xảy ra, trường hợp ứng với toán chuyển đĩa Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.45 2.46 Bài tập thảo luận Bài toán 3: Bài toán “Tháp Hà nội” l Bài giảng Cấu trúc liệu giải thuật - Chương 02 Thế giải thuật đệ quy? Ưu nhược điểm giải thuật đệ quy? Trong nhớ máy tính dùng vùng nhớ để dùng cho giải thuật đệ quy Trường hợp suy biến trường hợp giải thuật đệ quy Thường hay dùng cấu trúc lập trình để thể giải thuật đệ quy Viết giải thuật đệ quy cho toán sau: Acker(m,n)= n+1 m=0 Acker(m,n)= Acker(m-1,1) n=0 Acker(m,n)= Acker(m-1,Acker(m,n-1)) với trường hợp khác Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.47 Thủ tục đệ quy Bài Thủ tục đệ quy Function Acker(m,n:integer) If m=0 then Acker:=n+1 else if n=0 then Acker:=Acker(m-1,1) else Acker:=Acker(m-1,Acker(m,n-1)) Return Function USCLN(a,b:integer) If b=0 then USCLN := a; If b # then USCLN := USCLN(b,a mod b); Return Ngô Công Thắng Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.48 Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.50 Bài tập thảo luận Bài tập thảo luận Giải thuật tính ước số chung lớn hai số nguyên dương a b (a>b) sau: Gọi r số dư phép chia a cho b - Nếu r=0 b ước số chung lớn - r khác gán a:=b; b:=r lặp lại Hãy xây dựng giải thuật đệ quy tính ước số chung lớn USCLN(a,b) Hàm C(n,k) với n, k giá trị nguyên không âm k[...]... C(n,k:integer) If k=0 then C:=1 else if k=n then C:=1 else C:=C(n-1,k-1)+C(n-1,k); Return Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 02 2.52 Procedure DuaRa(s:String) If length(s)=1 then write(s) else begin s1:=s[2 n]; DuaRa(s1); write(s[1]); end Return Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 02 2.53 ... đệ quy tỏ ra rất thuận lợi Khi thiết kế giải thuật đệ quy cần trả lời các câu hỏi sau: Ngô Công Thắng Ví dụ: Bài toán tìm 1 từ trong cuốn từ điển l Thủ tục đệ quy của bài toán được viết như sau: Procedure timkiem(Tudien, tu) IF Tudien chỉ còn một trang THEN tìm từ trong trang ấy ELSE BEGIN Mở từ điểm vào trang giữa Xác định xem nửa nào chứa từ IF Từ nằm ở nửa trước THEN CALL timkiem(Tudien1, tu) ELSE... nếu n>2 Thủ tục đệ quy thể hiện giải thuật tính F(n) như sau: Function F(n:integer) If n2): Ta coi n-1 đĩa ở trên...Ví dụ 1: Sắp xếp một dãy n số nguyên theo thứ tự tăng dần l Đầu tiên ta phác thảo giải thuật theo ngôn ngữ tự nhiên như sau: l l l Ví dụ 1: Sắp xếp một dãy n số nguyên theo thứ tự tăng dần l Procedure SapXep(a,n) 1) For i :=1 To n-1 Do Begin 2) k :=i For j :=i+1 To n Do If a[j] < a[k] Then k :=j 3) x:=a[i]; a[i]:=a[k]; a[k]:=x; End Return Từ dãy các số nguyên chưa được sắp xếp lấy ra số nhỏ nhất

Ngày đăng: 15/09/2016, 02:49

TỪ KHÓA LIÊN QUAN

w