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

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

description

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). - PowerPoint PPT Presentation

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

Page 1: 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

Page 2: 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)

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

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++

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

4

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

Chương 0: GIỚI THIỆU CHUNG

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

5

NỘI DUNG CHƯƠNG 0

1.1 Tầm quan trọng của cấu trúc dữ liệu

1.2 Thiết kế giải thuật

1.3 Phân tích giải thuật

1.4 Phâ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

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

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.

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

7

1.2 THIẾT KẾ GIẢI THUẬT

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.

A

B C

E F G H I

D

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

8

1.2 THIẾ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.

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

9

1.2 THIẾT KẾ GIẢI THUẬTHệ 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

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

10

1.3 Phâ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ớ.

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

11

1.4 Phâ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).

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

12

1.4 Phâ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:

-

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

13

1.4 Phâ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)

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

14

1.4 Phâ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)).

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

15

1.4 Phâ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).

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

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

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

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

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

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ý

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

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”;

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

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>]….;

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

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: Namchar DiaChi[];

}

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

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

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

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)

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

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ý.