Cấu trúc dữ liệu và giải thuật bằng ngôn ngữ c

78 438 0
Cấu trúc dữ liệu và giải thuật bằng ngôn ngữ c

Đ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

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC " Phan Đoàn Ngọc Phương GIÁO TRÌNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Đà Nẵng - 2007 Giáo trình cấu trúc liệu giải thuật Chương Tổng quan cấu trúc liệu giải thuật I Khái niệm : Xem xét cấu trúc liệu kinh điển cách xử lý tương ứng I.1 Cấu trúc liệu (CTDL): • Cấu trúc liệu liệu phức hợp gồm nhiều thành phần Ví dụ mảng, ghi, tập hợp • Cấu trúc liệu đối tượng có tên gọi tồn chế để truy cập đến thành phần đối tượng • Những điểm cần quan tâm xem xét cấu trúc liệu: - mô hình quan niệm - cấu trúc lưu trữ : cách thức bố trí phần tử cấu trúc liệu bên nhớ - Các phép toán cấu trúc : + Cách thành lập cấu trúc + Bổ sung loại bỏ phần tử + Duyệt cấu trúc ( phần tử đến lần ) + Tìm kiếm (tìm phần tử thỏa mãn điều kiện đó) + Sắp xếp - Các ưu, khuyết điểm cấu trúc • Hiệu suất giải thuật (nếu ta xem xét giải thuật) I.2 Giải thuật (GT) : • Định nghĩa: Giải thuật khái niệm quan trọng toán học Giải thuật dãy xác định , hữu hạn thao tác mà sau thực chúng cách ta kết mong muốn "Hữu hạn" hiểu mặt thời gian thực lấn công cụ thực Ví dụ: vào phòng máy B1: mở khoá B2: Bật đèn B3: Bật cầu dao B4: Bật công tấc CPU B5: Bật công tấc hình Nói cách khác GT thể giải pháp cụ thể , thực bước một, để đưa tới lời giải cho toán Khi giải toán máy tính điện tử (MTĐT) ta quan tâm đến thiết kế giải thuật Nhưng cần nhớ rằng: giải thuật đặc trưng cho cách xử lý, mà cách xử lý thường liên quan đến đối tượng xử lý, tức "dữ liệu" Cung cách thể liệu mà theo chúng lưu trữ xử lý MTĐT gọi cấu trúc liệu (CTDL) Như CTDL giải thuật có quan hệ: thay đổi CTDL dẫn đến thay đổi giải thuật • Các đặc trưng giải thuật : - Tính dừng : sau bước hữu hạn giải thuật phải dừng - Tính xác định : bước thao tác phải rõ ràng, không gây nhập nhằng Nói rõ điều kiện, hai xử lý thực bước giải thuật phải cho kết Phan Đoàn Ngọc Phương Giáo trình cấu trúc liệu giải thuật - Tính hiệu : giải thuật cần phải đắn nghĩa sau đưa liệu vào giải thuật hoạt động đưa kết ý muốn - Tính phổ dụng : giải thuật giải toán lớp toán Cụ thể giải thuật có đầu vào dự liệu khác miền xác định - Yếu tố vào : Một giải thuật luôn có đối tượng vào đối tượng I.3 Ngôn ngữ giải thuật : Giải thuật thường mô tả dãy lệnh Bộ xử lý thực lệnh theo trật tự định gặp lệnh dừng kết thúc Ngôn ngữ GT gồm loại : NN liệt kê bước, sơ đồ khối NN cấu trúc Ví dụ : Giai thuật giải phương trình bậc hai ax2 + bx + c = - Sơ đồ khối : Bắt đầu Nhập a, b, c Đ Kiểm tra a == S Δ = b2 – 4ac Kiểm tra Δ < Kiểm tra Δ == ? x1 = (- b + sqrt(Δ))/2a x2 = (- b - sqrt(Δ))/2a Kết thúc Phan Đoàn Ngọc Phương In kết Đ PTVN Đ x1 = x2 = -b/2a Giáo trình cấu trúc liệu giải thuật NN liệt kê bước : B1 : xác định hệ số a, b, c B2 : kiểm tra xem a < > không ? a = quay lại B1 B3 : Tính Δ = b2 - 4ac B4 : Δ < thông báo " PTVN" chuyển đến B8 B5 : Δ = tính x1 = x2 = -b/2a chuyển B7 B6 : Δ > tính x1 = (- b + sqrt(Δ))/2a (- b - sqrt(Δ))/2a chuyển B7 B7 : Thông báo nghiệm x1, x2 B8 : kết thúc GT - NN lập trình : Để máy tính hiểu GT, ta sử dụng ngôn ngữ lập trình cụ thể để diễn đạt GT thông qua ngôn ngữ đó, cụ thể giáo trình ngôn ngữ C II Công cụ biểu diễn giải thuật : Dựa ngôn ngữ lập trình C : xuất liệu II.1 Các lệnh vào : printf(…) Printf(…) + scanf( ) : nhập liệu II.2 Lệnh tính toán : II.3 Lệnh điều khiển : (i) if (Biểu thức logic) ; S [ else ;] (ii) switch (biểu thức nguyên) { case N1: Lenh1; break ; S case N2: Lenh2; break ; … [default : Lenh;] break ; } iii) for (bt1; bt2; bt3) Lenh ; iv) while (Biểu thức logic) ; v) Lenh ; while (biểu thức logic); * Chú ý : Lệnh break ; thoát khỏi vòng lặp Lệnh continue ; bỏ qua phần lại vòng lặp thực vòng lặp II.4 Khai báo: biến, hằng, kiểu liệu, hàm, thủ tục II.5 Hàm chương trình : Một chương trình C bao gồm nhiều hàm Hàm đơn vị độc lập, khép kín.Hàm main() hàm bắt buộc chương trình * Chú ý : - Một hàm không bao gồm hàm khác - Tránh dùng biến toàn cục hàm - Các biến hàm sử dụng nội hàm - Các giải thuật giáo trình trình bày dạng hàm Phan Đoàn Ngọc Phương Giáo trình cấu trúc liệu giải thuật III Chương trình đệ qui : Khái niệm: Chương trình (CT) đệ qui chương trình có chứa lời gọi đến thân nó, nghĩa chương trình đệ qui thực sau thực Điều kiện lập CT đệ qui : + Khi toán phát biểu thông qua thân nó, với kích thước nhỏ + Kích thước toán cách hay cách khác phải trở thành tham số (gián tiếp trực tiếp) * Chú ý : - Khi gặp CT đệ qui ta phải phân biệt trường hợp suy biến trường hợp đệ qui (trường hợp suy biến không gọi đệ qui nữa) - CT đệ qui có hiệu suất so CT không đệ qui, nhiên CT đệ qui đơn giản dễ hiểu Ví dụ 1: Tính giai thừa số nguyên >=0 Phát biểu toán: giaithua(n) = 1, n=0 // trường hợp suy biến giaithua(n) = n * giaithua(n-1), n>0 // trường hợp đệ qui CT đệ qui: long giaithua(int n) { if (n = = 0) return 1; else return (n * giaithua(n-1)) ; } Ví dụ 2: Tìm ước số chung lớn hai số nguyên dương a va b Phát biểu toán: USCLN(a, b) = b , (a % b = = 0) // trường hợp suy biến USCLN(a, b) = USCLN(b, a % b), (a % b != 0) // trường hợp đệ qui CT đệ qui: int uscln(int a, int b) { if (a % b = = 0) return b; else return (uscln(b, a % b); } Bài tập : 1) Đọc chương sách CẤU TRÚC DỮ LIỆU GIẢI THUẬT Đỗ xuân Lôi IV Độ phức tạp giải thuật (GT) : IV.1 Khái niệm : Tímh hiệu GT bao gồm hai yếu tố bản: - Không gian nhớ cần thiết cho liệu vào, kết tính toán trung gian kết GT - Thời gian cần thiết để thực GT (ta gọi thời gian chạy CT) Việc đánh giá hai yếu tố cho ta sở để xác định giải thuật tốt Tuy nhiên hai yếu tố lại hay mâu thuẩn nhau: tốt thời gian thường lại không tốt Phan Đoàn Ngọc Phương Giáo trình cấu trúc liệu giải thuật không gian ngược lại Vì thực tế loại toán, hai yếu tố coi trọng Thông thường thời gian thực GT ý hơn; sau ta xét việc đánh giá thời gian thực GT Có hai cách tiếp cận để đánh giá thời gian thực GT Thời gian chạy chương trình phụ thuộc vào yếu tố sau: (1) Các liệu vào (2) chương trình dịch để chuyển chương trình nguồn thành mã máy (3) Tốc độ thực phép toán máy tính sử dụng để chạy chương trình Thời gian thực GT chịu ảnh hưởng nhiều yếu tố Vì ta tính xác thời gian phút, giây, cách đo thời gian thông thường Trong phương pháp lý thuyết, ta coi thời gian thực GT phụ thuộc vào kích thước liệu vào hay nói cách khác hàm số cỡ liệu vào Cỡ liệu vào tham số đặc trưng cho liệu vào, có ảnh hưởng định đến thời gian thực chương trình Thông thường cỡ liệu vào số nguyên dương n Ta sử dụng hàm số T(n), n cỡ liệu vào, để biểu diễn thời gian thực GT Thời gian thực GT phụ thuộc vào cỡ liệu mà phụ thuộc vào liệu cá biệt Chẳng hạn, ta xét toán tìm kiếm đối tượng x danh sách n phần tử Nếu xem T(n) số phép so sánh, ta có T(n) phép toán sơ cấp Phép toán so sánh chuỗi kí tự xem phép toán sơ cấp thời gian thực phụ thuộc vào độ dài chuỗi Tóm lại, độ phức tạp GT thời gian để thực GT GT A với kích thước đầu vào n thời gian thực GT biểu diễn T(n) có độ phức tạp O(f(n)) tìm c cho: T(n) = n0 IV Cách tính độ phức tạp : • Q1 : lệnh có thời gian thực không phụ thuộc vào đầu vào lệnh có độ phức tạp O(1) (hay thời gian thực số) • Q2 : Nếu lệnh b thực sau lệnh a a có độ phức tạp O(f(n)) b có độ phức tạp O(g(n)) độ phức tạp tổng cộng O(max( f(n), g(n) ) hay O(f(n), g(n)) = O(max(f(n), g(n)) • Q3 : Nếu b lồng a a có độ phức tạp O(f(n)) b có độ phức tạp O(g(n)) độ phức tạp O(f(n)*g(n)) hay O(f(g(n))) = O(f(n)*g(n)) • Ghi : Đôi độ phức tạp GT phụ thuộc vào giá trị cụ thể liệu, trường hợp ta xét tới độ phức tạp trường tốt nhấp, tồi độ phức tạp bình quân Phan Đoàn Ngọc Phương Giáo trình cấu trúc liệu giải thuật IV.3 Một số độ phức tạp thường gặp : O(1) O(logn) O(n) O(nlogn) Tên gọi thông thường H•ng logarit Tuy•n tính nlogn O(n2) bình ph••ng O(n3) O(2n) l•p ph••ng m• (lu• ti•n) Ký hi•u l•n Ví dụ: *) Xét đoạn chương trình sau : for (i = 0; i[...]... đầu tiên c a danh sách mà không chỉ vào NULL Phần tử đầu First bây giờ không c n c ý nghĩa thật sự và nó c thể chỉ dùng để truy nhập vào một phần tử bất kỳ c a danh sách liên kết vòng mà thôi Danh sách liên kết vòng thích hợp với c c phép tách và phép ghép danh sách Phan Đoàn Ng c Phương Giáo trình t c u trúcc dữ liệu và giải thuật Chươ ơng 4 31 NGĂ ĂN XẾP VÀ HÀN NG ĐỢI A Nggăn xếp (Sttack) : I Khái... phân hoạch : Phan Đoàn Ng c Phương Giáo trình c u tr c dữ liệu và giải thuật 17 Để SX dãy a[l r] ta phân hoạch thành 2 dãy con với tính chất như ở trên, sau đó tiến hành SX riêng dãy con trái và dãy con phải c ng bằng c ch th c trên Quá trình SX chấm dứt khi dãy con c n SX c n ít hơn 2 PT Minh họa: Ta c n sắp xếp dãy số sau: 44 55 12 42 94 18 06 67 Ta qui ư c chọn khóa chốt là số ở giữa c a dãy, c thể... nghĩa: Danh sách liên kết vòng là một danh sách liên kết mà phần tử cuối c ng (Last) chỉ vào phần tử đầu tiên (First) c a danh sách First … Last IV.2 C c phép toán trên danh sách: C c phép toán trên danh sách liên kết vòng c ng tương tự với c c phép toán trên danh sách đơn Tuy nhiên khi sử dụng c c giải thuật c a danh sách liên kết đơn ta c n phải chú ý là vùng liên kết c a phần tử cuối c ng chỉ vào phần... những trường hợp kích thư c dữ liệu (kích thư c 1 phần tử a[i]) là rất lớn so với kích thư c khóa (t c là phần dữ liệu đư c so sánh) thì sắp xếp chọn là phương pháp tốt VII Sắp xếp bằng phương pháp chèn (Insertion Sort) : VII.1 Giải thuật : * M c 0 : - Lấy PT đầu tiên c a dãy nguồn và chèn PT đó vào dãy đích sao cho dãy đích c thứ tự - Lặp lại bư c trên cho đến khi dãy nguồn "c n" * M c 1 : SX dãy a[0... V.2 Giải thuật : tương đương tìm kiếm nhị phân nhưng giá trị g đư c x c định theo c ng th c : g = (s - a[r]) (r - l + 1) / (a[r] - a[l] +1) ĐỘ PH C TẠP đư c chứng minh là : O(log2(log2n)) VI Sắp xếp bằng phương pháp chọn (Selection Sort) : Phan Đoàn Ng c Phương Giáo trình c u tr c dữ liệu và giải thuật 13 VI.1 Bài toán : Cho mảng a[n] C n hoán vị c c PT c a mảng a để chúng trở thành c thứ tự t c là a0... tang"); getch(); } Phan Đoàn Ng c Phương Giáo trình c u tr c dữ liệu và giải thuật Chương 3 21 Danh sách liên kết (DSLK) I Tổng quan về danh sách liên kết : I.1 Khái niệm : DSLK là danh sách gồm nhiều phần tử (PT) thỏa mãn điều kiện : - C c PT đều thu c cùng một kiểu dữ liệu - Mỗi PT ngoài phần dữ liệu bản thân nó c n chứa thông tin về vị trí c a PT đứng ngay sau nó - Vị trí c a PT đầu tiên đư c biết PT... p c a DS L Phan Đoàn Ng c Phương Giáo trình c u tr c dữ liệu và giải thuật 24 2 Giải thuật : ( Trường hợp L != NULL ) - nodep q; q=(nodep)malloc(sizeof(struct node)); q->data=e; - Thêm PT q vào sau p như trường hợp trên - Hoán vị phần dữ liệu c a p và q II.4.3 Thêm 1 PT vào vị trí thứ k trong DS : 1 Bài toán : Thêm PT c khóa e vào vị trí thứ k c a DS L với k là tham số c a hàm 2 Giải thuật: - Tìm con... phương pháp chọn ho c chèn + Khử đệ qui bằng c ch dùng ngăn xếp + C i tiến c ch tìm phần tử chốt ( lấy trung vị là 3 phần tử đầu, cuối và giữa ) X Chèn, xoá phần tử trong mảng: X.1 Chèn 1 phần tử vào mảng: Bài toán: Cho mảng số nguyên a[0 n-1] Chèn một phần tử vào sau một phần tử x cho trư c trong mảng Nếu x không c trong mảng thì sẽ không chèn Số đư c chèn sẽ đư c lấy ngẫu nhiên void chen(int *a,int... th c trung tố Biểu th c hậu tố 5+3 53+ 3+7+9 37+9+ Phan Đoàn Ng c Phương Giáo trình c u tr c dữ liệu và giải thuật 35 3+7*9 379*+ 3 * (7 + 9) 379+* b) Giải thuật tính giá trị biểu th c hậu tố : (1) Khởi động NX S (2) Lặp lại khi chưa đ c hết biểu th c - Đ c 1 PT c a biểu th c vào x - nếu x là toán hạng thì đẩy x vào NX - ngư c lại : dở b khỏi NX dở a khỏi NX đẩy a x b vào NX (3) Nếu trong NX c n... Giải thuật : C c trường hợp : + Tìm tp và p lần lượt trỏ vào PT thứ k-1 và thứ k + Nếu (p= =NULL) thì không xoá đư c vì ksố phần tử c a DS + Ngư c lại: - nếu (k= =1) L = p->next / xoá PT đầu tiên */ - ngư c lại tp->next = p->next /* xoá PT ở giữa ho c PT cuối */ + Giải phóng vùng nhớ cho p 2 C i đặt : void del(int k,nodep *L) { int i=1; Phan Đoàn Ng c Phương Giáo trình c u tr c dữ liệu và giải ... trình c u tr c liệu giải thuật Chương Tổng quan c u tr c liệu giải thuật I Khái niệm : Xem xét c u tr c liệu kinh điển c ch xử lý tương ứng I.1 C u tr c liệu (CTDL): • C u tr c liệu liệu ph c hợp... thuyết, ta coi thời gian th c GT phụ thu c vào kích thư c liệu vào hay nói c ch kh c hàm số c liệu vào C liệu vào tham số đ c trưng cho liệu vào, c ảnh hưởng định đến thời gian th c chương trình... trưng cho c ch xử lý, mà c ch xử lý thường liên quan đến đối tượng xử lý, t c "dữ liệu" Cung c ch thể liệu mà theo chúng lưu trữ xử lý MTĐT gọi c u tr c liệu (CTDL) Như CTDL giải thuật c quan

Ngày đăng: 03/12/2015, 17:07

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan