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ật - Chương 1: Cấu trúc dữ liệu và giải thuật

42 39 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 42
Dung lượng 1,05 MB

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Cấu trúc dữ liệu và giải thuật. Những nội dung chính được trình bày trong chương 1 gồm có: Mối quan hệ giữa cấu trúc dữ liệu và giải thuật, các cách diễn đạt giải thuật, thiết kế và phân tích giải thuật, giải thuật đệ quy. Mời các bạn cùng tham khảo.

CHƯƠNG CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 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 tố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.1 1.1 Giải thuật (thuật tốn, algorithms) l Giải thuật phải có tính chất sau: l l l l l l 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 tốn loại Tính hình thức Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.2 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 tốn Một tố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.3 1.2 Cấu trúc liệu (tiếp) l Ví dụ 1: Ta xét tố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 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 Ví dụ 2: Xét tốn giải phương trình bậc hai ax2 + bx + c = Các liệu toán sau: 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.5 1.2 Cấu trúc liệu (tiếp) l l 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 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.6 1.2 Cấu trúc liệu (tiếp) l Tóm lại, Cấu trúc liệu tập hợp phần tử liệu liên kết với cách Nói tới cấu trúc liệu nói tới cách tổ chức phần tử 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.7 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.8 1.2 Cấu trúc liệu (tiếp) l 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 tố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 1.9 1.3 Mối quan hệ cấu trúc liệu giải thuật 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 Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.10 Các cách diễn đạt giải thuật 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.11 Các cách diễn đạt giải thuật 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 Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.12 2.1 Lưu đồ giải thuật (tiếp) l Các hình lưu đồ giải thuật gồm có: l Hình elíp thể bắt đầu kết thúc giải thuật Bắt đầu l Kết thúc Hình chữ nhật thao tác, công việc cần thực Công việc Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.13 2.1 Lưu đồ giải thuật (tiếp) 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 Điều kiện Sai Đúng Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.14 Ví dụ: Lưu đồ giải thuật tìm giá trị lớn mảng số A có n phần tử Bắt đầu max := A(1) i := i max S Đ In giá trị max Kết thúc max := A(i) i := i + Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.15 2.3 Giả mã 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 tố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.16 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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.17 2.2.2 Biểu thức 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 Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.18 2.2.3 Câu lệnh l l l l l 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.19 2.2.3 Câu lệnh lCâu lệnh điều kiện: 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 1.20 3.2.4 Xác định độ phức tạp tính tốn (tiếp) Các bước xác định O giải thuật: B1: Xác định phép tốn tích cực giải thuật l B2: Đếm số lần thực phép tốn tích cực, biểu diễn số đếm thành hàm phụ thuộc vào kích thước liệu đầu vào n, f(n) B3: Coi O(f(n)), sử dụng định nghĩa O quy tắc xác định O để tìm O cuối Ngơ Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.25 3.2.4 Xác định độ phức tạp tính tốn (tiếp) l l Ví dụ: ex = 1+ x/1! + x2/2! + + xn/n! với x n cho trước Giải thuật 1: 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 Ngô Công Thắng 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 tốn (tiếp) l Trong giải thuật phép tố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 tốn (tiếp) l Giải thuật 2: 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) 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.2.4 Xác định độ phức tạp tính tốn (tiếp) l Giải thuật 3: 1) Read(x); s:=1; p:=1; i:=0; 2) Repeat i:=i+1; p:=p*x/i; s:=s+p; Until | p | < Epsilon; end 3) Write(s); 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.2.4 Xác định độ phức tạp tính tốn (tiếp) l l l 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à cịn 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ụ tố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.30 3.2.4 Xác định độ phức tạp tính tố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 Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.32 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 tốn có giải thuật đệ 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 tố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.33 Ví dụ: Bài tố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 2.34 Ví dụ: Bài tố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 cị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 tốn tách đơi tốn nhỏ hơn, tố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.35 Ví dụ: Bài tốn tìm từ từ điển l Thủ tục đệ quy toán viết sau: Procedure timkiem(Tudien, tu) IF Tudien cịn 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.36 4.3 Thiết kế giải thuật đệ quy l l 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: Có thể định nghĩa tốn dạng tốn loại có quy mơ nhỏ Có trường hợp đặc biệt tốn (trường hợp suy biến) mà kết thúc đệ quy 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 toán 1: Tính n! l Định nghĩ đệ quy hàm n! sau: GiaiThua(n) = n=0 GiaiThua(n)=n×GiaiThua(n-1) n>0 Thuật giải đệ quy viết dạng hàm: Function GiaiThua(n) If n=0 then begin GiaiThua :=1; return; end Else GiaiThua := n * GiaiThua(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.38 Bài tốn 1: Tính n! l Khử đệ quy hàm tính giai thừa: Function FAC(n) If n=0 then gt:=1; Else begin gt:=1; For i:=1 to n gt:=gt*I; end; FAC:=gt; 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 tốn 1: Tính n! l Đối chiếu với đặc điểm thủ tục đệ quy ta thấy: 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 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 2.46 Bài tập 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 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 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 tập (tiếp) 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.49 Thủ tục đệ quy Bài tốn: Tìm USCLN số ngun dương a,b Cách 1: Dùng đệ quy Function USCLN(a,b) If b=0 then begin USCLN := a; return; end; 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 2.50 Thủ tục đệ quy Bài tốn: Tìm USCLN số ngun dương a,b Cách 2: Khử đệ quy Function USCLN(a,b) 1) r := a mod b; 2) while r # begin a:=b; b:=r; r:= a mod b end; 3) USCLN:=b; Return Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 02 2.51 Bài tập (tiếp) Hàm C(n,k) với n, k giá trị nguyên không âm k

Ngày đăng: 03/03/2021, 08:26

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN