Cấu trúc dữ liệu và giải thuật

53 21 0
  • Loading ...
1/53 trang

Thông tin tài liệu

Ngày đăng: 13/04/2018, 00:12

Mối liên hệ giữa cấu trúc dữ liệu và giải thuậtThực hiện một đề án tin học là chuyển bài toán thực tế thành bài toán có thể giải quyết trên máy tính. Một bài toán thực tế bất kỳ đều bao gồm các đối tượng dữ liệu và các yêu cầu xử lý trên những đối tượng đó. Vì thế, để xây dựng một mô hình tin học phản ánh được bài toán thực tế cần chú trọng đến hai vấn đề :Tổ chức biểu diễn các đối tượng thực tế :Các thành phần dữ liệu thực tế đa dạng, phong phú và thường chứa đựng những quan hệ nào đó với nhau, do đó trong mô hình tin học của bài toán, cần phải tổ chức , xây dựng các cấu trúc thích hợp nhất sao cho vừa có thể phản ánh chính xác các dữ liệu thực tế này, vừa có thể dễ dàng dùng máy tính để xử lý. Công việc này được gọi là xây dựng cấu trúc dữ liệu cho bài toán.Xây dựng các thao tác xử lý dữ liệu:Từ những yêu cầu xử lý thực tế, cần tìm ra các giải thuật tương ứng để xác định trình tự các thao tác máy tính phải thi hành để cho ra kết quả mong muốn, đây là bước xây dựng giải thuật cho bài toán.Tuy nhiên khi giải quyết một bài toán trên máy tính, chúng ta thường có khuynh hướng chỉ chú trọng đến việc xây dựng giải thuật mà quên đi tầm quan trọng của việc tổ chức dữ liệu trong bài toán. Giải thuật phản ánh các phép xử lý , còn đối tượng xử lý của giải thuật lại là dữ liệu, chính dữ liệu chứa đựng các thông tin cần thiết để thực hiện giải thuật. Để xác định được giải thuật phù hợp cần phải biết nó tác động đến loại dữ liệu nào (ví dụ để làm nhuyễn các hạt đậu , người ta dùng cách xay chứ không băm bằng dao, vì đậu sẽ văng ra ngoài) và khi chọn lựa cấu trúc dữ liệu cũng cần phải hiểu rõ những thao tác nào sẽ tác động đến nó (ví dụ để biểu diễn các điểm số của sinh viên người ta dùng số thực thay vì chuỗi ký tự vì còn phải thực hiện thao tác tính trung bình từ những điểm số đó). Như vậy trong một đề án tin học, giải thuật và cấu trúc dữ liệu có mối quan hệ chặt chẽ với nhau, được thể hiện qua công thức :Cấu trúc dữ liệu + Giải thuật = Chương trìnhVới một cấu trúc dữ liệu đã chọn, sẽ có những giải thuật tương ứng, phù hợp. Khi cấu trúc dữ liệu thay đổi thường giải thuật cũng phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên trên một cấu trúc không phù hợp. Hơn nữa, một cấu trúc dữ liệu tốt sẽ giúp giải thuật xử lý trên đó có thể phát huy tác dụng tốt hơn, vừa đáp ứng nhanh vừa tiết kiệm vật tư, giải thuật cũng dễ hiễu và đơn giản hơn. PHÂN TÍCH GIẢI THUẬT Tham khảo từ Giáo trình Giải thuật Nguyễn Văn Linh – P Khoa CNTT ĐH Cần Thơ Mục tiêu  Sau hoàn tất học bạn cần:      Hiểu cần thiết phải phân tích đánh giá giải thuật Biết tiêu chuẩn để đánh giá giải thuật Hiểu khái niệm độ phức tạp giải thuật Vận dụng quy tắc để tính độ phức tạp chương trình khơng gọi chương trình con, độ phức tạp chương trình có gọi chương trình khơng đệ quy Vận dụng phương pháp thành lập phương trình đệ quy Mục tiêu (tt)     Vận dụng phương pháp truy hồi để giải phương trình đệ quy Biết phương pháp đốn nghiệm để giải phương trình đệ quy Vận dụng việc giải phương trình đệ quy thuộc dạng phương trình tổng quát Tổng hợp vấn đề đánh giá giải thuật Sự cần thiết phải phân tích, đánh giá giải thuật  Cần   phải phân tích, đánh giá giải thuật để: Lựa chọn giải thuật tốt giải thuật để cài đặt chương trình giải tốn đặt Cải tiến giải thuật có để giải thuật tốt Tiêu chuẩn đánh giá giải thuật tốt  Một giải thuật xem tốt đạt tiêu chuẩn sau:    Thực Tốn nhớ Thực nhanh  Trong khuôn khổ môn học này, quan tâm đến tiêu chuẩn thực nhanh Thời gian thực chương trình    Thời gian thực chương trình hàm kích thước liệu vào, ký hiệu T(n) n kích thước (độ lớn) liệu vào Ví dụ : Chương trình tính tổng n số có thời gian thực T(n) = cn c số Thời gian thực chương trình hàm không âm, tức T(n)   n  Ðơn vị đo thời gian thực   Ðơn vị T(n) đơn vị đo thời gian bình thường giờ, phút giây mà thường xác định số lệnh thực máy tính lý tưởng Ví dụ: Khi ta nói thời gian thực chương trình T(n) = Cn có nghĩa chương trình cần Cn thị thực thi Thời gian thực trường hợp xấu   Nói chung thời gian thực chương trình khơng phụ thuộc vào kích thước mà phụ thuộc vào tính chất liệu vào Vì thường ta coi T(n) thời gian thực chương trình trường hợp xấu liệu vào có kích thước n, tức là: T(n) thời gian lớn để thực chương trình liệu vào có kích thước n Tỷ suất tăng  Ta nói hàm khơng âm T(n) có tỷ suất tăng (growth rate) f(n) tồn số C N0 cho T(n) ≤ Cf(n) với n ≥ N0  Ta chứng minh “Cho hàm khơng âm T(n) bất kỳ, ta ln tìm tỷ suất tăng f(n) nó” Tỷ suất tăng (tt)   Ví dụ 1: Giả sử T(0) = 1, T(1) = tổng quát T(n) = (n+1)2 Ðặt N0 = C = với n ≥1 dễ dàng chứng minh T(n) = (n+1)2 ≤ 4n2 với n ≥ 1, tức tỷ suất tăng T(n) n2 Ví dụ 2: Tỷ suất tăng hàm T(n) = 3n3 + 2n2 n3 Thực vậy, cho N0 = C = ta dễ dàng chứng minh với n ≥ 3n3 + 2n2 ≤ 5n3 10 Nghiệm nghiệm riêng k -1  T(n) a k  ∑ a jd b k - j  j 0 Nghiệm ak = nlogba Nghiệm riêng Nghiệm phương trình là: MAX(NTN,NR) 39 Hàm nhân  Một hàm f(n) gọi hàm nhân (multiplicative function) f(m.n) = f(m).f(n) với số nguyên dương m n  Ví dụ:   Hàm f(n) = nk hàm nhân, f(m.n) = (m.n)k = mk.nk = f(m).f(n) Hàm f(n) = logn hàm nhân, f(n.m) = log(n.m) = logn+logm  logn.logm = f(n).f(m) 40 Tính nghiệm riêng d(n) hàm nhân  Khi d(n) hàm nhân, ta có:  d(bk-j) = d(b.b.b… b) = d(b).d(b)… d(b) = [d(b)]k-j k k -1 j 0 k -1   ∑a [d(b)] NR ∑ a d b j k- j j 0 j k- j  a  -1 j   k -1  a  k  d(b)  [d(b)]k ∑   [d(b)]  a d(b)  j 0  -1 d(b) a k - [d(b)]k Hay NR  a -1 d(b) 41 Ba trường hợp  a k - [d(b)]k NR  a -1 d(b) Trường hợp 1: a > d(b) Trong công thức ta có ak > [d(b)]k, theo quy tắc lấy độ phức tạp ta có NR O(ak) = O(nlogba) = NTN Do T(n) O(nlogba)  Trường hợp 2: a < d(b) Trong cơng thức ta có [d(b)]k > ak, theo quy tắc lấy độ phức tạp ta có NR O([d(b)]k) = O(nlogbd(b)) > NTN Do T(n) O(nlogbd(b)) 42 a k - [d(b)]k NR  a -1 d(b) Ba trường hợp (tt) Trường hợp 3: a = d(b) Công thức không xác đinh nên ta phải tính trực tiếp nghiệm riêng: k -1 j k -1  a  k k k NR [d(b)] ∑   a  a k ∑  j 0  d(b)  j 0 (do a d(b)) Do n = bk nên k = logbn ak = nlogba Vậy NR nlogbalogbn > NTN Do T(n) O(nlogbalogbn) 43 Ví dụ: GPT với T(1) = n 1/ T(n) 4T   n  2  Phương trình cho có dạng phương trình tổng quát  d(n)=n hàm nhân  a = b =  d(b) = b = < a  T(n) = O(nlogba) = O(nlog4) = O(n2) 44 Ví dụ: GPT với T(1) = n 2/ T(n) 4T   n  2  Phương trình cho có dạng phương trình tổng quát  d(n)=n2 hàm nhân  a = b =  d(b) = b2 = = a  T(n) = O(nlog alog n) b b = O(nlog4logn) = O(n2logn) 45 Ví dụ: GPT với T(1) = n 3/ T(n) 4T   n  2  Phương trình cho có dạng phương trình tổng quát  d(n)=n3 hàm nhân  a = b =  d(b) = b3 = > a  T(n) = O(nlog d(b)) = O(nlog8) = O(n3) b 46 Nghiệm phương trình đệ quy tổng quát d(n) hàm nhân  Trong trường hợp hàm tiến triển hàm nhân khơng thể áp dụng cơng thức ứng với ba trường hợp nói mà phải tính trực tiếp NR, sau lấy MAX(NR,NTN) 47 Ví dụ: GPT với T(1) = n T(n) 2T   nlogn  2    PT thuộc dạng phương trình tổng quát d(n) = nlogn hàm nhân NTN = nlogba = nlog2 = n Do d(n) = nlogn khơng phải hàm nhân nên ta phải tính nghiệm riêng cách xét trực tiếp 48 Ví dụ (tt) k -1   k -1 NR ∑ a jd b k - j  j k - j log2 k - j j= j0 k -1 k(k  1) NR 2  (k - j) 2 O(2 k k ) j0 k    k Theo giải phương trình đệ quy tổng quát n = b k nên k = logbn, b = nên 2k = n k = logn, NR= O(nlog2n) > NTN T(n) = O(nlog2n) 49 BT4-1: GPT với T(1) = 1 nvà  T(n) T    2  Phương trình cho có dạng phương trình tổng qt  d(n)=1là hàm nhân  a = b =  d(b) = = a  T(n) = O(nlog alog n) = O(nlog1logn) b b = O(logn) 50 BT4-2: GPT với T(1) = 1n  T(n) 2T   logn  2  Phương trình cho có dạng phương trình tổng qt  d(n)=logn khơng phải hàm nhân  NTN = O(nlog a)=O(nlog2)=O(n) b  Tính trực tiếp nghiệm riêng 51 n BT4 - : GTP voi T(1) 1 va T(n) 2T   logn  2 k1 j NR  a d (b j 0 k j k1 )  j log k  j j 0 k1 k1 j 0 j 0 NR  j (k  j )  k j  k1  j2 j j 0 k 1 j NR O(k  ) O(k ) 2 j 0 k1 NR O(k k ) O(n log n)  n NTN T (n) O(n log n) 52 Bảng tóm tắt big O thường gặp Ký hiệu O(f(x)) f(x) O(1) O(log) O(n) O(nlogn) O(n2) O(n3) O(2n) O(n!) Độ phức tạp loại Hằng Logarit Tuyến tính n log n Bình phương Lập phương Mũ Giai thừa 53 ... f(n) nó” Tỷ suất tăng (tt)   Ví dụ 1: Giả sử T(0) = 1, T (1) = tổng quát T(n) = (n +1) 2 Ðặt N0 = C = với n 1 dễ dàng chứng minh T(n) = (n +1) 2 ≤ 4n2 với n ≥ 1, tức tỷ suất tăng T(n) n2 Ví dụ 2:... lặp 14 Ví dụ 1: Thủ tục xếp “nổi bọt” void BubbleSort(int a[n]) { int i,j,temp; / *1* / for(i= 0; i=i +1; j ) /*3*/ if (a[j].key < a[j -1] .key) { /*4*/ temp=a[j -1] ;... {6} tốn O (1) thời gian, việc so sánh a[j -1] > a[j] tốn O (1) thời gian, lệnh {3} tốn O (1) thời gian Vòng lặp {2} thực (n-i) lần, lần O (1) vòng lặp {2} tốn O((n-i) .1) = O(n-i) Vòng lặp {1} có i chạy
- Xem thêm -

Xem thêm: Cấu trúc dữ liệu và giải thuật, Cấu trúc dữ liệu và giải thuật

Mục lục

Xem thêm

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay