Môn học
CTDL & GT
1
Nội dung môn học
Những khái niệm cơ bản.
Cấu trúc danh sách, ngăn xếp, hàng đợi.
Cấu trúc cây.
Đồ thị.
Tập hợp.
Các giải thuật tìm kiếm, sắp xếp.
2
Tài liệu tham khảo
CTDL>, Đinh Mạnh Tường, Đại học
Công nghệ, ĐHQG Hà Nội.
Giải thuật và lập trình, Bài giảng chuyên
đề, Lê Minh Hoàng, Đại học Sư phạm.
CTDL>, Đỗ Xuân Lôi, Nhà xuất bản
ĐH Quốc Gia Hà Nội, 2010 (Tái bản).
3
Tài liệu tham khảo
Slide bài giảng CTDL>, GS.TS Hồ Sỹ
Đàm, ĐH Công nghệ.
Slide bài giảng CTDL>, Mai Xuân
Hùng, ĐH CNTT.
Một số tác giả khác.
4
Chương 1:
Những khái niệm cơ bản
5
III. Cấu trúc dữ liệu
Giải bài toán trên máy tính
Khái niệm mô hình dữ liệu
Cấu trúc dữ liệu
Các tiêu chuẩn của CTDL
Vai trò của CTDL
Bài toán và thuật toán
Độ phức tạp của thuật toán
6
1. Giải bài toán trên máy tính
Bước 1: Xác định bài toán: input, output.
Bước 2: Thiết kế, mô tả thuật toán
Bước 3: Viết chương trình
Chọn CTDL, ngôn ngữ lập trình.
Bước 4: Hiệu chỉnh
Xây dựng các bộ dữ liệu test đặc trưng.
Chạy thử.
Bước 5: Viết tài liệu
Hướng dẫn sử dụng.
Thuật toán, CTDL.
7
2. Mô hình dữ liệu
Là các trừu tượng :đồ thị, tập hợp, danh
sách, cây...
Hai khía cạnh:
Giá trị (kiểu dữ liệu)
Các phép toán ( operation)
Chương trình có thể truy xuất đến các
vùng lưu trữ.
8
3. Cấu trúc dữ liệu
Là các đơn vị cấu trúc (construct) của
NNLT dùng để biểu diễn các mô hình dữ
liệu.
Ví dụ: mảng, xâu, bản ghi, file...
CTDL + Thuật giải = chương trình
Các tiêu chuẩn đánh giá CTDL
Phản ánh đúng thực tế
Phù hợp với các thao tác xử lý
Tiết kiệm tài nguyên hệ thống
9
4. Thuật toán/Giải thuật
Thuật toán để giải một bài toán là một dãy
hữu hạn các thao tác đươc sắp xếp theo
một trật tự xác định sao cho sau khi thực
hiện dãy thao tác đó, từ Input của bài toán
này, ta nhận được Output cần tìm.
10
4.1. Sự cần thiết của thuật toán
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.
11
4.2. Các đặc trưng của thuật toán
Đầu vào: Dữ liệu được cung cấp cho thuật toán.
Đầu ra : Với một tập các dữ liệu đầu vào, giải thuật đưa
ra các dữ liệu tương ứng với lời giải của bài toán.
Chính xác: Các bước của thuật toán được mô tả chính
xác.
Hữu hạn: Thuật toán phải đưa được đầu ra sau một số
hữu hạn bước với mọi đầu vào.
Đơn trị: Các kết quả trung gian của từng bước thực
hiện thuật toán được xác định một cách đơn trị và chỉ
phụ thuộc đầu vào và các kết quả của các bước trước.
Tổng quát: Giải thuật có thể áp dụng để giải mọi bài
toán có dạng đã cho.
Tính hiệu quả: Thời gian, không gian.
12
4.3. Mô tả thuật toán
Dạng ngôn ngữ tự nhiên
Dạng lưu đồ (sơ đồ khối)
Dạng mã giả
Ngôn ngữ lập trình
13
4.3 Biểu diễn thuật toán
Ví dụ: Tìm giá trị lớn nhất của mảng a1,
a2,..…,aN,
Input: Số nguyên dương N và mảng a1, a2, ,...,
aN.
Output: Tìm Max (giá trị lớn nhất) của mảng đã cho.
Ý tưởng:
•
Khởi tạo Max = a1.
• Với mỗi i, nếu ai > Max thì thay giá trị Max= ai.
14
4.3 Biểu diễn thuật toán
Biểu diễn bằng ngôn ngữ tự nhiên:
NN tự nhiên thông qua các bước được tuần tự liệt
kê để biễu diễn thuật toán.
B1. Nhập N và dãy a1, ..., aN
B2. Đặt Max = a1, i = 2.
B3.
Đơn
giản,
Nếu
i > không
N thì cần
đếnkiến
b. 5.thức về về cách biểu
diễn (mã giả, lưu đồ,...)
B4.
4.1. Nđiểm:
ếu ai > Max thì Max = ai.
Nhược
4.2. Đặt i=i+1 rồi quay b.3.
Dài dòng, không cấu trúc.
B5. Đưa ra Max rồi kết thúc.
Ưu điểm:
Đôi lúc khó hiểu, không diễn đạt được thuật toán.
15
4.3 Biểu diễn thuật toán
Biểu diễn ở dạng lưu đồ
Sử dụng hệ thống các nút, cung hình dạng khác
nhau thể hiện các chức năng khác nhau.
16
4.3 Biểu diễn thuật toán
17
4.3 Biểu diễn ở dạng mã giả
Ngôn ngữ tựa ngôn ngữ lập trình:
Dùng cấu trúc chuẩn hóa, chẳng hạn tựa
Pascal, C.
Dùng các ký hiệu toán học, biến, hàm.
Ưu điểm:
Đỡ cồng kềnh hơn lưu đồ khối.
Nhược điểm:
Không trực quan bằng lưu đồ khối.
18
4.3 Biểu diễn ở dạng mã giả
Một số quy ước
1. Các biểu thức toán học
2. Lệnh gán: “=” (AB hoặc A = B )
3. So sánh: “==”, “!=”
Khai báo hàm (thuật toán)
Thuật toán <tên TT> (<tham số>)
Input: <dữ liệu vào>
Output: <dữ liệu ra>
<Các câu lệnh>
End
19
4.3 Biểu diễn ở dạng mã giả
Các cấu trúc:
Cấu trúc chọn:
if … then … [else …]
Vòng lặp:
while … do
do … while (…)
for … do …
Một số câu lệnh khác:
Trả giá trị về: return [giá trị]
Lời gọi hàm: <Tên>(tham số)
20
4.3 Biểu diễn ở dạng mã giả
Amax = a0;
i =1;
while (i
if (amax< ai) amax = ai;
i++;
end while;
21
4.4. Biểu diễn bằng NNLT
Dùng ngôn ngữ máy tính (C, Pascal,...) để
diễn tả thuật toán, CTDL thành câu lệnh.
Kỹ năng lập trình đòi hỏi cần học tập và
thực hành (nhiều).
Dùng phương pháp tinh chế từng bước để
chuyển hoá bài toán sang mã chương
trình cụ thể.
22
5. Ước lượng thời gian thực hiện
Thời gian chạy của một chương trình phụ
thuộc các yếu tố:
Dữ liệu đầu vào.
Chất lượng của mã máy được tạo ra bởi
chương trình dịch.
Tốc độ thực thi của lệnh máy.
Độ phức tạp về thời gian của thuật toán.
23
5.1 Độ phức tạp thuật toán
Lựa chọn thuật toán
Dễ hiểu, dễ cài đặt và dễ ghi chép ?
Sử dụng các tài nguyên hiệu quả?
Tùy đặc tính của bài toán
Phân tích theo kinh nghiệm
Thực hiện và kết luận dễ mắc lỗi
Kích thước dữ liệu đầu vào là quan trọng: T(n)
24
5.1 Phương pháp thực nghiệm
Cài thuật toán rồi chọn các bộ dữ liệu thử
nghiệm.
Thống kê các thông số nhận được khi chạy
các bộ dữ liệu đó.
Ưu điểm: Dễ thực hiện.
Nhược điểm:
Chịu sự hạn chế của ngôn ngữ lập trình.
Ảnh hưởng bởi trình độ của người lập trình.
Chọn được các bộ dữ liệu thử đặc trưng cho
tất cả tập các dữ liệu vào của thuật toán khó
khăn và tốn nhiều chi phí.
Phụ thuộc vào phần cứng.
25