Tải bản đầy đủ (.ppt) (173 trang)

Cấu Trúc Dữ Liệu Và Giải Thuật

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.67 MB, 173 trang )

Giảng viên: Trần Thị Kim Chi


• Mục tiêu
– Nắm vững khái niệm kiểu dữ liệu, kiểu dữ liệu trừu tượng.
– Nắm vững và cài đặt được các kiểu dữ liệu trừu tượng cơ
bản như danh sách, ngăn xếp, hàng đợi, cây, tập hợp,
bảng băm, đồ thị bằng một ngôn ngữ lập trình căn bản.
– Vận dụng được các kiểu dữ liệu trừu tượng để giải quyết
bài toán đơn giản trong thực tế.

• Ngôn ngữ lập trình minh hoạ
– Mã giả (pseudocode)
– C++


TT

Nội dung

Số
tiết

Phân bổ thời gian

thuyết

Thực
hành

Tự


học

1

Tổng quan

3

3

0

6

2

Đệ quy

6

3

3

10

3

Tìm kiếm


10

6

4

12

4

Sắp xếp

5

3

3

10

5

Chồng (Stacks)

6

3

3


10

6

Hàng đợi (Queues)

6

3

3

12

7

Danh sách và chuỗi

10

6

4

15

8

Các bảng và phục hồi thông tin


10

6

4

10

9

Cây nhị phân

14

9

5

10

10

Cây nhiều nhánh

5

3

2


10

75

45

30

105

TỔNG

Ghi
chú


– Đã học môn phương pháp lập
trình.
– Kiến thức về kỹ thuật lập trình.
– Sử dụng thành thạo ngôn ngữ C++


– Tài liệu học tập:
[1] C & Data Structures, P. S. Deshpande, O. G. Kakde - CHARLES
RIVER MEDIA, INC. Hingham, Massachusetts.
[2] Robert L.Kruse, Alexander J.Ryba, Data Structures And Program
Design In C++, Prentice-Hall International Inc., 1999.
[3] Bài giảng & Bài thực hành CTDL - Trường ĐHCN.
– Tài liệu tham khảo:
[1] 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.
[2] Cấu trúc dữ liệu, Nguyễn Trung Trực, Trường DHBK –
DHQG TP.HCM
[3] Nguyễn Ngô Bảo Trân, Giáo trình cấu trúc dữ liệu và giải thuật –
Trường Đại học Bách Khoa TP.HCM, 2005.


Kiểm tra và Thi
Kiểm tra thường xuyên
Thi giữa kỳ
Thi cuối kỳ
Báo cáo tiểu luận

Điểm
10%
20%
50%
20%

Tuần
Bất kỳ
Tuần5
Tuần 9
Hàng tuần

Yêu cầu đối với sinh viên:
• Dự lớp: lý thuyết trên 80% , thực hành bắt buộc 100%
• Bài tập: hoàn thành các bài tập trên lớp và ở nhà
• Tham gia đầy đủ các buổi thảo luận của nhóm



Địa chỉ mail:


Địa chỉ download tài liệu:




1

Khái niệm về CTDL và thuật toán

2

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

3

Độ phức tạp của thuật toán

4

Thực hiện và hiệu chỉnh chương trình

5

Tiêu chuẩn của chương trình

6


Ôn tập ngôn ngữ C

7
1

Câu hỏi và bài tập


1

KHÁI NIỆM VỀ CTDL & GT

• Dữ liệu có thể là dữ liệu đưa vào (input data), dữ
liệu trung gian hoặc dữ liệu đưa ra (output data).
Mỗi dữ liệu có một kiểu dữ liệu riêng. Kiểu dữ liệu
có thể là kiểu cơ bản hay kiểu trừu tượng
• Cấu trúc dữ liệu là sự sắp xếp có logic của thành
phần dữ liệu được kết hợp với nhau và là tập hợp
các thao tác chúng ta cần để truy xuất các thành
phần dữ liệu.
• Ví dụ: thư viện
– Bao gồm các sách
– Truy cập/tìm kiếm một cuốn sách nào đó đòi hỏi phải biết
cách sắp xếp của các sách
– Người dùng truy cập sách chỉ thông qua người quản lý thư
viện.


1


KHÁI NIỆM VỀ CTDL & GT

Một cấu trúc dữ liệu tốt phải thỏa mãn:
• Phản ánh đúng thực tế: Cần xem xét kỹ lưỡng cũng
như dự trù các trạng thái biến đổi của dữ liệu trong
chu trình sống để có thể chọn CTDL lưu trữ thể hiện
chính xác đối tượng thực tế.
• Phù hợp với các thao tác trên đó: Tăng tính hiệu quả
của đề án, việc phát triển các thuật toán đơn giản, tự
nhiên hơn => chương trình đạt hiệu quả cao hơn về
tốc độ xử lý.
• Tiết kiệm tài nguyên hệ thống: CTDL chỉ nên sử dụng
tài nguyên hệ thống vừa đủ để đảm nhiệm được chức
năng của nó. Loại tài nguyên cần quan tâm là : CPU
và bộ nhớ.


1

KHÁI NIỆM VỀ CTDL & GT

Một cấu trúc dữ liệu tốt phải thỏa mãn:
• Các cấu trúc bao gồm
– Danh sách liên kết (linked lists)
– Ngăn xếp (Stack), Hàng đợi (Queue)
– Cây nhị phân (binary trees)
– …



1

KHÁI NIỆM VỀ CTDL & GT

• Giải thuật (Algorithm):
– Còn gọi là thuật toán là tập các bước có thể tính toán
được để đạt được kết quả mong muốn. (A
computable set of steps to achieve a desired result)
– Giải thuật được xây dựng trên cơ sở của cấu trúc dữ
liệu đã được chọn.
– Giải thuật có thể được minh họa bằng ngôn ngữ tự
nhiên (natural language), bằng sơ đồ (flow chart)
hoặc bằng mã giả (pseudo code).
– Ví dụ: Sắp xếp các phần tử
2
1
1

4
3

2

3

6
5

4


5

7
6

7


1

KHÁI NIỆM VỀ CTDL & GT

• Tại sao sử dụng máy tính để xử lý dữ liệu?
 Nhanh hơn.
 Nhiều hơn.
 Giải quyết những bài toán mà con người không thể hoàn thành được.

• Làm sao đạt được những mục tiêu đó?
 Nhờ vào sự tiến bộ của kỹ thuật: tăng cấu hình máy  chi phí cao 
 Nhờ vào các thuật toán hiệu quả: thông minh và chi phí thấp 
“Một máy tính siêu hạng vẫn không thể cứu vãn một thuật toán tồi!”


1

KHÁI NIỆM VỀ CTDL & GT

• Giải thuật (Algorithm):
• Ví dụ: Tính tổng các số nguyên lẻ từ 1  n
Input: n

Output: Tổng








B1: S=0
B2: i=1
B3: Nếu i>n thì sang B7, ngược lại sang B4
B4: S=S+i
B5: i=i+2
B6: Quay lại B3
B7: Tổng cần tìm là S


1

KHÁI NIỆM VỀ CTDL & GT

• Các tính chất quan trọng của giải thuật là:
– Hữu hạn (finiteness): giải thuật phải luôn luôn kết thúc
sau một số hữu hạn bước.
– Xác định (definiteness): mỗi bước của giải thuật phải
được xác định rõ ràng và phải được thực hiện chính
xác, nhất quán.
– Hiệu quả (effectiveness): các thao tác trong giải thuật
phải được thực hiện trong một lượng thời gian hữu

hạn.
– Ngoài ra một giải thuật còn phải có đầu vào (input) và
đầu ra (output).


1

KHÁI NIỆM VỀ CTDL & GT

Tầm quan trọng của CTDL & giải thuật :
•Thự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 dữ liệu và các yêu cầu xử lý
trên dữ liệu đó để 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ế: Mô hình tin học của bài
toán, cần phải tổ chức sao cho
– vừa phản ánh chính xác dữ liệu thực tế,
– vừa dễ dàng dùng máy tính để xử lý.

 xây dựng cấu trúc dữ liệu.
•Xây dựng các thao tác xử lý dữ liệu : Từ những yêu cầu 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.


1

KHÁI NIỆM VỀ CTDL & GT


• Mối quan hệ giữa cấu trúc dữ liệu và giải
thuật

CTDL + Thuật toán = Chương trình


2

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

Các tiêu chuẩn đánh giá cấu trúc dữ liệu
• Để đánh giá một cấu trúc dữ liệu chúng ta
thường dựa vào một số tiêu chí sau:
– Cấu trúc dữ liệu phải tiết kiệm tài nguyên (bộ nhớ
trong),
– Cấu trúc dữ liệu phải phản ảnh đúng thực tế của bài
toán,
– Cấu trúc dữ liệu phải dễ dàng trong việc thao tác dữ
liệu.


3

Độ 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, tài
nguyên…
• Để ướ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
 Làm thế nào đánh giá?


3

Độ phức tạp của thuật toán

• Để đánh giá hiệu quả của một thuật toán, có thể tính số
lượng các phép tính phải thực hiện của thuật toán này:
– Phép so sánh
– Phép gán
• Thông thường số các phép tính được thực hiện phụ
thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào
• Vì thế độ phức tạp thuật toán là một hàm phụ thuộc đầu
vào
• Tuy nhiên, không cần biết chính xác hàm này mà chỉ cần
biết một ước lượng đủ tốt của chúng
• Để ước lượng độ phức tạp của một thuật toán ta thường
dùng khái niệm Big-O



3

Độ phức tạp của thuật toán

Ví dụ:
Bước 1. Gán Tổng = 0. Gán i = 0.
Bước 2.
int tong=0, i=0;
– Tăng i thêm 1 đơn vị.
do{
– Gán Tổng = Tổng + i
Bước 3. So sánh i với n
i++;
– Nếu i < n, quay lại bước 2.
tong+=i;
– Ngược lại, dừng thuật toán.

}while (i
• Số phép gán của thuật toán là bao nhiêu?
• Số phép so sánh là bao nhiêu?
 Gán: f(2n + 2), So sánh: f(n)
 Độ phức tạp: O(n)


3

Độ phức tạp của thuật toán

Các độ phức tạp thường gặp

•Độ phức tạp hằng số: O(1) – thời gian chạy
không phụ thuộc vào độ lớn đầu vào
•Độ phức tạp tuyến tính: O(n) – thời gian chạy
tỉ lệ thuận với độ lớn đầu vào
•Độ phức tạp logarit: O(logn)
•Độ phức tạp đa thức: O(P(n)), với P là đa thức có
bậc từ 2 trở lên
•Độ phức tạp hàm mũ: O(2n)


3

Độ phức tạp của thuật toán

Bảng so sánh độ phức tạp của thuật toán


3

Độ phức tạp của thuật toán

Thứ tự độ phức tạp của các thuật toán


×