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

Bài Giảng Cấu Trúc Dữ Liệu Và Giải ThuậtChương 1

20 362 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

Nội dung

bài giảng chi tiết và đầy đủ nhất cấu trúc dữ liệu và giải thuật giúp bạn làm quen cũng như thành thạo khả năng giải quyết các vấn đề về giải thuật trong thời gian nhanh nhất. bài giảng với những ngôn từ dễ hiểu được sắp xếp một cách logic để bạn có thể tiếp thu nhanh nhất.

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 Tính thực được: Tính hữu hạn: Tính đắn: Phải cho kết mong muốn Tính tổng quát: Phải áp dụng cho toán loại GV Ngô Công Thắng Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Website: fita.hua.edu.vn/ncthang Ngô Công Thắng Mối quan hệ cấu trúc liệu giải thuật Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 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 1.2 1.3 1.2 Cấu trúc liệu l 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 bước xác định số đối tượng đó, 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 Bài giảng Cấu trúc liệu giải thuật - Chương 01 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 l 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 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 l 2.2.3 Câu lệnh Câu lệnh điều kiện: 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 if B then S; l if B then S1 else S2; B biểu thức logic, S câu lệnh l l Câu lệnh lựa chọn: 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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 l l l 1.21 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 2.2.3 Câu lệnh l 1.23 2.2.4 Chương trình 2.2.4.1 Chương trình dạng hàm Câu lệnh lặp: FUNCTION Tên_hàm(danh sách tham số) S1; S2; ; Sn; Tên_hàm:= biểu thức; RETURN 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; l Lặp với số lần lặp trước: l 2.2.4.2 Chương trình dạng thủ tục tra điều kiện trước: WHILE B DO S; l Kiểm tra điều kiện sau: REPEAT S UNTIL B; l Kiểm 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 PROCEDURE Tên_thủ_tục(danh sách tham số) S1; S2; ; Sn; RETURN 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 Bài tập thảo thuận 2.2.4.3 Lời gọi chương trình l 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: 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ự) 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 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 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 Bài tập thảo thuận 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ụ 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.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 3.1.1 Mô đun hóa việc giải toán (tiếp) Thiết kế phân tích giải thuật 3.1 Thiết kế thuật giải l 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.29 l 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 3.1.1 Mô đun hóa việc giải toán Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.31 3.1.1 Mô đun hóa việc giải toán (tiếp) l l 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.30 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.32 3.1.1 Mô đun hóa việc giải toán (tiếp) l Ví dụ (tiếp) 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 Bài giảng Cấu trúc liệu giải thuật - Chương 01 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: 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: Trên sở ta đưa sơ đồ giải thuật tổng quát sau: Ngô Công Thắng l 1.33 Ngô Công Thắng Sơ đồ giải thuật tổng quát 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.35 Sơ đồ giải thuật chi tiết 1.34 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.36 Ví dụ 1: Sắp xếp dãy n số nguyên theo thứ tự tăng dần 3.1.1 Mô đun hóa việc giải toán (tiếp) l l Ưu điểm cách thiết kế Top - Down: l l l l 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 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.37 l l l Các bước tinh chỉnh dùng giả ngôn ngữ Pascal là: For i:=1 To n-1 Do Begin - Xét từ đến an để tìm số nhỏ aj - Đổi chỗ aj End Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.39 Ví dụ 1: Sắp xếp dãy n số nguyên theo thứ tự tăng dần 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 l 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 → Giả ngôn ngữ → Ngôn ngữ lập trình 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ể l Bài giảng Cấu trúc liệu giải thuật - Chương 01 Từ dãy số nguyên chưa xếp chọn số nhỏ Cứ lặp lại trình dãy chưa xếp trở thành rỗng Bước tinh chỉnh đầu tiên: 3.1.2 Phương pháp tinh chỉnh bước Ngô Công Thắng Đầu tiên ta phác thảo giải thuật theo ngôn ngữ tự nhiên sau: 1.38 l Các bước tinh chỉnh dùng giả ngôn ngữ Pascal là: Bước tinh chỉnh 2.1: Tìm số nhỏ j:=i For k:= j+1 To n Do If ak < aj Then j:=k Bước tinh chỉnh 2.2: Đổi chỗ x:=ai ; ai:=aj ; aj=x; Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.40 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: l 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 Procedure Sap(a,n) For i :=1 To n Do Begin j :=i For k :=j+1 To n Do If a[k] < a[j] Then j :=k x:=a[i]; a[i]:=a[j]; a[j]:=x; End Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.41 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 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.43 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 Các bước tinh chỉnh sau: Readln(m,n) For i:=1 To m Do For j:= To n Do Readln(a[i,j]) For i:=1 To m Do Begin k:=1 For j:=1 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 Writeln; For j:=1 To n Do Write(a[i,j], ‘ ‘) End 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ài giảng Cấu trúc liệu giải thuật - Chương 01 Ngô Công Thắng l Phác hoạ thuật giải: Ngô Công Thắng Diễn đạt giả ngôn ngữ Pascal: 1.42 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.44 3.2.3 Độ phức tạp tính toán giải thuật 3.2 Phân tích, đánh giá giải thuật l 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 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 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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.45 Ngô Công Thắng 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 l 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.46 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.47 3.2.3 Độ phức tạp tính toán giải thuật (tiếp) 3.2.2 Phân tích thời gian thực giải thuật 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 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.48 3.2.3 Độ phức tạp tính toán giải thuật (tiếp) 3.2.4 Xác định độ phức tạp tính toán (tiếp) 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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.49 l l l có thời gian thực đánh giá là: T(n)= O(n.n) = O(n2) Ngô Công Thắng l 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 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.51 3.2.4 Xác định độ phức tạp tính toán (tiếp) Quy tắc cộng: Ngô Công Thắng 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 For i :=1 To n Do For j :=1 To n Do x:=x+1; 3.2.4 Xác định độ phức tạp tính toán l Qui tắc nhân: 1.50 Quy tắc bỏ số 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 1.52 3.2.4 Xác định độ phức tạp tính toán (tiếp) l l 3.2.4 Xác định độ phức tạp tính toán (tiếp) Ví dụ: ex = 1+ x/1! + x2/2! + + xn/n! với x n cho trước Giải thuật 1: l 1) Read(x,n); s:=1; p:=1; 2) For i :=1 To n Do begin p:=p*x/i; s:=s+p; end; end Thời gian thực giải thuật là: T(n) = O(n) Read(x,n); s:=1; For i :=1 To n Do begin p:=1; For j :=1 To i Do p:=p*x/j ; s:=s+p; end; end Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.53 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 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.55 3.2.4 Xác định độ phức tạp tính toán (tiếp) 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 Giải thuật 2: 1.54 Chú ý 2: Có trường hợp thời gian thực giải thuật không phụ thuộc vào kích thước liệu vào mà phụ thuộc vào tình trạng liệu Khi phân tích thời gian thực giải thuật ta phải xét xem với liệu vào có kích thước n T(n) trường hợp thuận lợi nhất, trường hợp trung bình trường hợp xấu nào? Việc xác định T(n) trường hợp trung bình thường khó phải dùng tới công cụ toán đặc biệt Bởi người ta thường đánh giá giải thuật T(n) trường hợp xấu Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.56 3.2.4 Xác định độ phức tạp tính toán (tiếp) Bài tập thảo luận 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 n! = n*(n-1)! b) Nếu n=0 n!=1 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.60 4.2 Giải thuật đệ quy thủ tục đệ quy l l l Nếu lời giải toán T thực lời giải toán T’ có dạng giống T lời giải đệ quy Trong T’ giống T phải nhỏ T Giải thuật tương ứng với lời giải đệ quy gọi giải thuật đệ quy Thủ tục viết cho toán có lời giải đệ quy gọi thủ tục đệ quy Trong thủ tục đệ quy có lời gọi tới nó, lần gọi kích thước toán thu nhỏ tiến tới trường hợp đặc biệt 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.61 Ví dụ: Bài toán tìm từ từ điển 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 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 Đ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 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.63 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 2.62 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.64 4.3 Thiết kế giải thuật đệ quy l l Bài toán 1: Tính n! 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: 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 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? Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.65 Định nghĩ đệ quy hàm n! sau: l 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 FAC :=1 Else FAC(n) := 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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.67 Bài toán 2: Lập dãy số FIBONACCI 1 13 Bài toán 1: Tính n! l Đối chiếu với đặc điểm thủ tục đệ quy ta thấy: l 2.66 Đị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 Mỗi lần chuyển đĩa l Không có tình đĩa to đĩa nhỏ l Được phép sử dụng cọc trung gian (cọc B) để đặt tạm thời 2.71 Bài toán 3: Bài toán “Tháp Hà nội” l Yêu cầu đặt ra: Chuyển chồng đĩa từ cọc A sang cọc C theo điều kiện sau: Bài giảng Cấu trúc liệu giải thuật - Chương 02 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.72 Thủ tục đệ quy Bài Bài toán 3: Bài toán “Tháp Hà nội” l Thủ tục toán “Tháp Hà nội” sau: Procedure Hanoi(n,A,B,C) If n=1 then chuyển đĩa từ A sang C Else Begin Call Hanoi(n-1,A,C,B) Call Hanoi(1,A,B,C) Call Hanoi(n-1,B,A,C) End; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 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 2.73 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.75 Bài tập thảo luận Bài tập thảo luận 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 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) Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.74 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.76 Thủ tục đệ quy Thủ tục đệ quy 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 Bài giảng Cấu trúc liệu giải thuật - Chương 02 Function 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 2.77 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.79 Bài tập thảo luận Hàm C(n,k) với n, k giá trị nguyên không âm k[...]... tính toán phụ thuộc vào tình trạng của dữ liệu đầu vào thì đánh giá dựa vào đâu? 9 Đánh giá thời gian thực hiện giải thuật của các bài toán đã cho ở bài tập thảo luận 1 Ngô Công Thắng Ngô Công Thắng l Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.57 Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.59 Bài tập thảo luận 2 4 Giải thuật đệ quy 1 Mô đun hoá việc giải quyết bài toán có nghĩa... n Do begin p: =1; For j : =1 To i Do p:=p*x/j ; s:=s+p; end; end Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.53 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 Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.55 3.2.4 Xác định độ phức tạp tính toán (tiếp) Trong giải thuật 1 phép toán tích cực ở đây... nhiên Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.58 a) x là số tự nhiên nếu x -1 là số tự nhiên b) 1 là số tự nhiên 2 Hàm n! a) Nếu n>0 thì n! = n*(n -1) ! b) Nếu n=0 thì n! =1 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.60 4.2 Giải thuật đệ quy và thủ tục đệ quy l l l Nếu lời giải của một bài toán T được thực hiện bằng lời giải của bài toán T’ có dạng... thực hiện 3 bước là: T1(n) + T2(n) + T3(n) = O(max(n3, n, nlog2n) = O(n3) l Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1. 51 3.2.4 Xác định độ phức tạp tính toán (tiếp) Quy tắc cộng: Ngô Công Thắng Nếu tương ứng với 2 bước P1 và P2 là T1(n) = O(f(n)),T2(n) = O(g(n)) thì thời gian thực hiện P1 và P2 lồng nhau là : T1(n).T2(n) = O(f(n).g(n))... hàm n! như sau: l FAC(n) = 1 nếu n=0 FAC(n)=n×FAC(n -1) nếu n>0 Thuật giải đệ quy được viết dưới dạng hàm: Function FAC(n) If n=0 then FAC : =1 Else FAC(n) := n * FAC(n -1) 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 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.67 Bài toán 2: Lập dãy số FIBONACCI 1 1 2 3 5 8 13 Bài toán 1: Tính n! l Đối chiếu với... xây dựng giải thuật đệ quy tính ước số chung lớn nhất USCLN(a,b) 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.74 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.76 Thủ tục đệ quy bài 7 Thủ tục đệ quy bài 8 Function USCLN(a,b:integer) If b=0 then USCLN := a; If b # 0 then USCLN := USCLN(b,a mod b); Return Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật... In ra ma trận Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 Ngô Công Thắng l Phác hoạ thuật giải: Ngô Công Thắng Diễn đạt bằng giả ngôn ngữ Pascal: 1. 42 Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.44 3.2.3 Độ phức tạp tính toán của giải thuật 3.2 Phân tích, đánh giá giải thuật l 3.2 .1 Đặt vấn đề l Phân tích tính đúng đắn: Chạy thử chương trình trên bộ dữ liệu, so sánh... loại máy tính, vì vậy không thể đưa chúng vào xác lập T(n) Điều đó cũng có nghĩa là T(n) không thể tính theo đơn vị giây, phút… Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.46 Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.47 3.2.3 Độ phức tạp tính toán của giải thuật (tiếp) 3.2.2 Phân tích thời gian thực hiện giải thuật l Ví dụ 1: f(n) = O(n3) có nghĩa độ phức tạp tính... Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.52 3.2.4 Xác định độ phức tạp tính toán (tiếp) l l 3.2.4 Xác định độ phức tạp tính toán (tiếp) Ví dụ: ex = 1+ x /1! + x2/2! + + xn/n! với x và n cho trước Giải thuật 1: l 1) Read(x,n); s: =1; p: =1; 2) For i : =1 To n Do begin p:=p*x/i; s:=s+p; end; end Thời gian thực hiện giải thuật 2 là: T(n) = O(n) Read(x,n); s: =1; For i : =1 To n Do begin p: =1; ... For i : =1 To n Do Begin 2 j :=i For k :=j +1 To n Do If a[k] < a[j] Then j :=k 3 x:=a[i]; a[i]:=a[j]; a[j]:=x; 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 01 1. 41 Ví dụ 2: Cho ma trận cấp mxn (m hàng, n cột) Tìm phần tử lớn nhất của các hàng và đổi chỗ nó cho phần tử đầu hàng l Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01 1.43 Ví dụ 2: Cho ma trận cấp mxn (m hàng,

Ngày đăng: 21/06/2016, 23:25

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w