1 / 24

Môn: CẤU TRÚC DỮ LIỆU VÀ GiẢI THUẬT

Môn: CẤU TRÚC DỮ LIỆU VÀ GiẢI THUẬT. NỘI DUNG MÔN HỌC. Chương 0: GIỚI THIỆU CHUNG Chương 1: DANH SÁCH (LIST) Chương 2: STACK-QUEUE Chương 3: ĐỆ QUY Chương 4: KỸ THUẬT TÌM KIẾM (SEARCHING) Chương 5: KỸ THUẬT SẮP XẾP (SORTING) Chương 6: CÂY (TREE) ÔN TẬP - KIỂM TRA (REVIEW – TEST).

kristy
Download Presentation

Môn: CẤU TRÚC DỮ LIỆU VÀ GiẢI THUẬT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Môn: CẤU TRÚC DỮ LIỆU VÀ GiẢI THUẬT

  2. NỘI DUNG MÔN HỌC • Chương 0: GIỚI THIỆU CHUNG • Chương 1: DANH SÁCH (LIST) • Chương 2: STACK-QUEUE • Chương 3: ĐỆ QUY • Chương 4: KỸ THUẬT TÌM KIẾM (SEARCHING) • Chương 5: KỸ THUẬT SẮP XẾP (SORTING) • Chương 6: CÂY (TREE) • ÔN TẬP - KIỂM TRA (REVIEW – TEST)

  3. TÀI LIỆU THAM KHẢO • [1] Bài giảng & Bài thực hành CTDL - Trường ĐHCN. • [2] Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh Đức, Trường DHKHTN – DHQG TP.HCM. • [3] Cấu trúc dữ liệu, Nguyễn Trung Trực, Trường DHBK – DHQG TP.HCM. • [4] Data structures and Program Design in C++

  4. Môn: CẤU TRÚC DỮ LIỆU VÀ GiẢI THUẬT Chương 0: GIỚI THIỆU CHUNG

  5. NỘI DUNG CHƯƠNG 0 1.1 Tầm quan trọng của cấu trúc dữ liệu 1.2Thiết kế giải thuật 1.3Phân tích giải thuật 1.4Phân tích thời gian thực hiện giải thuật 1.5 Các tiêu chuẩn đánh giá cấu trúc dữ liệu 1.6 Các kiểu dữ liệu

  6. 1.1 Tầm quan trọng của CTDL & giải thuật * Mối quan hệ giữa cấu trúc dữ liệu và giải thuật Theo Niklaus Wirth: Giải thuật + Cấu trúc dữ liệu = Chương trình. Điều này hàm ý rằng cấu trúc dữ liệu và giải thuật có mối quan hệ mật thiết với nhau trong một chương trình. Do đó việc nghiên cứu các cấu trúc dữ liệu sau này đi đôi với việc xác lập các giải thuật xử lý trên các cấu trúc ấy.

  7. 1.2THIẾT KẾ GIẢI THUẬT A B C D E F G H I Chia các bài toán lớn thành các bài toán nhỏ (module). Và dĩ nhiên một module có thể chia nhỏ thành các module con khác nữa,... bấy giờ việc tổ chức lời giải sẽ được thể hiện theo một cấu trúc phân cấp.

  8. 1.2THIẾT KẾ GIẢI THUẬT Ví dụ: Chương trình quản lý đầu sách của một thư viện nhằm phục vụ độc giả tra cứu sách. Cụ thể, giả sử ta đã có một file dữ liệu gồm các bản ghi về các thông tin liên quan đến một đầu sách như: tên sách, mã số, tác giả, nhà xuất bản, năm xuất bản, giá tiền, ... Yêu cầu: - Cập nhật dữ liệu. - Tìm kiếm. - In ấn.

  9. 1.2THIẾT KẾ GIẢI THUẬT Hệ chương trình quản lý sách Cập nhật dữ liệu Tìm kiếm In ấn Bổ sung thêm sách Sửa thông tin file dữ liệu Xoá dữ liệu Xem với mọi bản ghi Tra cứu Thẻ sách Thống kê Theo mã Theo ngày nhập

  10. 1.3Phân tích giải thuật: • Tính đúng đắn. • Tính đơn giản (dễ hiểu, dễ quản lý, dễ lập). • Tính tối ưu (hiệu quả) về mặt thời gian cũng như không gian nhớ.

  11. 1.4Phân tích thời gian thực hiện giải thuật: • Độ phức tạp tính toán của giải thuật: • Nếu thời gian thực hiện một giải thuật là T(n) = Cn2 (C: hằng), thì ta nói rằng: Độ phức tạp tính toán của giải thuật này có cấp là n2 và ta ký hiệu T(n) = O(n2). • Tổng quát: T(n) = O(g(n)) thì ta nói độ phức tạp của giải thuật có cấp là g(n).

  12. 1.4Phân tích thời gian thực hiện giải thuật: • Xác định độ phức tạp của giải thuật: Việc xác định độ phức tạp tính toán của một giải thuật nói chung là phức tạp. Tuy nhiên, trong thực tế độ phức tạp của một giải thuật có thể được xác định từ độ phức tạp từng phần của giải thuật. Cụ thể, ta có một số quy tắc sau: -

  13. 1.4Phân tích thời gian thực hiện giải thuật: • Xác định độ phức tạp của giải thuật: - Quy tắc tính tổng: Nếu chương trình P được phân tích thành 2 phần: P1, P2 và nếu độ phức tạp của P1 là T1(n) = O(g1(n)) và độ phức tạp của P2 là T2(n) = O(g2(n)) thì độ phức tạp của P là: T(n) = O(g1(n) + g2(n)) = O(max(g1(n), g2(n))). Ví dụ: g1(n) = n2, g2(n) = n3. Suy ra: T(n) = O(n3). Lưu ý: Nếu g1(n)  g2(n), n  n0 thì O(g1(n) + g2(n)) = O(g2(n)) Ví dụ: O(n + log2n) = O(n)

  14. 1.4Phân tích thời gian thực hiện giải thuật: • Xác định độ phức tạp của giải thuật: - Quy tắc nhân: Nếu độ phức tạp của P1 là O(g1(n)), độ phức tạp của P2 là O(g2(n)) thì độ phức tạp tính toán của P1 lồng P2 là O(g1(n).g2(n)).

  15. 1.4Phân tích thời gian thực hiện giải thuật: Lưu ý: Câu lệnh gán, cout, cin, If có thời gian thực hiện bằng hằng số C = O(1). Câu lệnh lặp trong vòng g(n) lần thì sẽ có thời gian thực hiện là O(g(n)). O(Cg(n)) = O(g(n)) (C: hằng) Ví dụ: 1) Câu lệnh: For( i=1; i<=n ;i++) { O(n) } P:=P*i; { O(1) } có thời gian thực hiện là: O(n*1) = O(n). 2) For( i=1; i<=n ;i++) For( j=1; j<=n ;j++) x:=x+1; có thời gian thực hiện là: O(n*n*1) = O(n2).

  16. 1.5 Các tiêu chuẩn đánh giá CTDL Đánh giá độ phức tạp của thuật toán • Là công việc ước lượng thời gian thực hiện của thuật toán để so sánh tương đối các thuật toán với nhau • Trong thực tế, thời gian thực hiện còn phụ thuộc cấu hình máy, dữ liệu đưa vào, … • Để ước lượng thời gian thực hiện thuật toán xem xét 2 trường hợp • Trường hợp tốt nhất: Tmin • Trường hợp xấu nhất: Tmax • Với Tmin và Tmax  thời gian thực hiện trung bình của thuật toán Tavg

  17. 1.6 Các kiểu dữ liệu Các thuộc tính của một kiểu dữ liệu • Tên kiểu dữ liệu • Miền giá trị của dữ liệu • Kích thước dữ liệu • Tập các toán tử tác động lên kiểu dữ liệu

  18. 1.6 Các kiểu dữ liệu (tt) Các kiểu dữ liệu cơ sở • Kiểu số nguyên • Kiểu số thực • Kiểu ký tự • Kiểu luận lý

  19. 1.6 Các kiểu dữ liệu (tt) Các kiểu dữ liệu có cấu trúc Kiểu chuỗi ký tự:là kiểu dữ liệu có cấu trúc đơn giản nhất và thường các ngôn ngữ lập trình đều dịnh nghĩa nó như một kiểu cơ bản. Trong C các hàm xử lý chuỗi được đặt trong thư viện string.lib. VD: char S[10] ;// chuỗi ký tự S có chiều dài tối đa là 10 (kể cả ký tự kết thúc) char S[] = ”ABCDEF” ; char *S = “ABCDEF”;

  20. 1.6 Các kiểu dữ liệu (tt) Các kiểu dữ liệu có cấu trúc (tt) Kiểu mảng: là kiểu dữ liệu trong đó mỗi phần tử của nó là một tập hợp có thứ tự các giá trị có cùng cấu trúc được lưu trữ liên tiếp nhau trong bộ nhớ. Mảng một chiều : <Kiểu dữ liệu> <Tên biến> [<Số phần tử>]; Mảng nhiều chiều : <Kiểu dữ liệu> <Tên biến> [<Số phần tử 1>] [<Số phần tử 2>]….;

  21. 1.6 Các kiểu dữ liệu (tt) Các kiểu dữ liệu có cấu trúc (tt) Kiểu mẫu tin: Kiểu mẫu tin cũng tương tự như mảng nhưng mỗi phần tử của nó là tập hợp các giá trị có thể khác cấu trúc. Kiểu mẫu tin thường được dùng để mô tả những đối tượng có cấu trúc phức tạp. Ví dụ : struct PERSON { char Hoten[]; int NamSinh; char NoiSinh[]; char GioiTinh; // 0:Nữ, 1: Nam char DiaChi[]; }

  22. 1.6 Các kiểu dữ liệu (tt) Kiểu dữ liệu con trỏ Kiểu con trỏ là kiểu dữ liệu cơ sở dùng lưu địa chỉ của một đối tượng dữ liệu khác. Biến thuộc kiểu con trỏ Tp là biến mà giá trị của nó là địa chỉ của một vùng nhớ ứng với một biến kiểu T, hoặc là giá trị NULL

  23. 1.6 Các kiểu dữ liệu (tt) Kiểu dữ liệu con trỏ (tt) • Cú pháp định nghĩa dữ liệu kiểu con trỏtypedef <kiểu cơ sở> * <kiểu con trỏ>; Các thao tác cơ bản trên kiểu con trỏ: • Khi một biến con trỏ ‘p’ lưu trữ địa chỉ của đối tượng x ta nói “p trỏ đến x” • Gán địa chỉ của một vùng nhớ con trỏ p: p = <địa chỉ>; p = <địa chỉ> + <giá trị nguyên> • Truy xuất (xem) nội dung của đối tượng p trỏ đến (*p)

  24. 1.6 Các kiểu dữ liệu (tt) Kiểu dữ liệu tập tin • Tập tin là kiểu dữ liệu đặc biệt, kích thước tối đa của tập tin phụ thuộc không gian đĩa • Việc đọc, ghi dữ liệu trên tập tin là mất thời gian, không an toàn dữ liệu • Thông thường chuyển dữ liệu trong tập tin (một phần hay toàn bộ) vào bộ nhớ trong để xử lý.

More Related