Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Cấu trúc dữ liệu và giải thuật - Ngô Công Thắng

CHƯƠNG 1  
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT  
1. Mối quan hệ giữa cấu trúc dữ liệu và giải thuật  
1.1. Giải thuật (thuật toán, algorithms)  
l Khái niệm: Giải thuật là một hệ thống các thao  
tác, các phép toán được thực hiện theo trình tự  
nhất định trên một số đối tượng dữ liệu nào đó,  
sao cho sau một số bước hữu hạn ta có được  
kết quả mong muốn.  
l Giải thuật phản ánh các phép xử lý, còn đối  
tượng xử lý là dữ liệu.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.1  
1.1. Giải thuật (thuật toán, algorithms)  
l Giải thuật phải có các tính chất cơ bản sau:  
l Tính thực hiện được:  
l Tính kết thúc:  
l Tính kết quả: Phải cho kết quả mong muốn.  
l Tính hiệu quả:  
l Tính duy nhất:  
l Tính tổng quát: Phải áp dụng cho mọi bài toán cùng  
loại.  
l Tính hình thức  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.2  
1.2. Cấu trúc dữ liệu  
l Khái niệm dữ liệu: Dữ liệu là các phần tử biểu  
diễn các thông tin cần thiết cho bài toán.  
l Một bài toán có thể có các loại dữ liệu: Dữ liệu  
vào, dữ liệu trung gian, dữ liệu ra.  
l Dữ liệu vào là dữ liệu cần đưa vào để xử lý, đây  
chính là đầu vào của bài toán.  
l Dữ liệu trung gian là dữ liệu chứa các kết quả trung  
gian trong quá trình xử lý.  
l Dữ liệu ra là dữ liệu chứa kết quả mong muốn của  
bài toán.  
l Giải thuật thực hiện biến đổi từ các dữ liệu vào  
thành các dữ liệu ra.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.3  
1.2. Cấu trúc dữ liệu (tiếp)  
l Ví dụ 1: Ta xét bài toán tính học bổng cho  
sinh viên theo chế độ hiện hành. Các dữ  
liệu của bài toán bao gồm:  
l Dữ liệu vào: Họ và tên, Điểm các môn, Số  
trình các môn học.  
l Dữ liệu trung gian: Điểm trung bình  
l Dữ liệu ra: Học bổng  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.4  
1.2. Cấu trúc dữ liệu (tiếp)  
l Ví dụ 2: Xét bài toán giải phương trình bậc  
hai ax2 + bx + c = 0 . Các dữ liệu của bài  
toán này như sau:  
l Dữ liệu vào: a, b, c  
l Dữ liệu trung gian: delta  
l Dữ liệu ra: x1, x2  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.5  
1.2. Cấu trúc dữ liệu (tiếp)  
l Dữ liệu nguyên tử là phần tử dữ liệu cơ sở  
không thể tách nhỏ ra được, có thể là một chữ  
số, một kí tự, một giá trị logic,... Trong một bài  
toán, dữ liệu bao gồm một tập các dữ liệu  
nguyên tử.  
l Từ các dữ liệu nguyên tử ta có thể tạo thành các  
cấu trúc dữ liệu bằng các cách thức liên kết  
khác. Chẳng hạn liên kết các kí tự lại với nhau  
tạo thành cấu trúc dữ liệu kiểu xâu kí tự, liên kết  
các số lại với nhau theo kiểu một dãy số ta được  
cấu trúc dữ liệu kiểu mảng một chiều.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.6  
1.2. Cấu trúc dữ liệu (tiếp)  
l Tóm lại, Cấu trúc dữ liệu là tập hợp các  
phần tử dữ liệu liên kết với nhau bằng một  
cách nào đó. Nói tới cấu trúc dữ liệu là nói  
tới cách tổ chức các phần tử dữ liệu như  
thế nào.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.7  
1.2. Cấu trúc dữ liệu (tiếp)  
l Khái niệm về Cấu trúc lưu trữ: Cách biểu diễn  
một cấu trúc dữ liệu trong bộ nhớ được gọi là  
cấu trúc lưu trữ, đó chính là cách cài đặt cấu  
trúc dữ liệu trên máy vi tính.  
l Có thể có nhiều cấu trúc lưu trữ khác nhau cho một  
cấu trúc dữ liệu. Chẳng hạn một cấu trúc dữ liệu kiểu  
mảng ta có thể lưu trữ bằng các ô nhớ kế tiếp nhau  
trong bộ nhớ hoặc có thể lưu trữ bằng các ô nhớ  
không kế tiếp nhau trong bộ nhớ.  
l Có thể có nhiều cấu trúc dữ liệu khác nhau được cài  
đặt trong bộ nhớ bằng một cấu trúc lưu trữ. Chẳng  
hạn cấu trúc xâu kí tự, cấu trúc mảng đều có thể cài  
đặt trong bộ bằng các ô kế tiếp nhau.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.8  
1.2. Cấu trúc dữ liệu (tiếp)  
l Mỗi một ngôn ngữ lập trình đều có các  
cấu trúc dữ liệu tiền định (định sẵn), bởi  
vậy khi chọn ngôn ngữ lập trình nào thì ta  
phải chấp nhận cấu trúc dữ liệu tiền định  
của nó, phải vận dụng linh hoạt các cấu  
trúc dữ liệu này vào bài toán cần giải  
quyết.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.9  
1.3. Mối quan hệ giữa cấu trúc dữ liệu  
và giải thuật  
l Xét tới giải thuật thì phải xét giải thuật đó tác  
động trên cấu trúc dữ liệu nào.  
l Xét tới cấu trúc dữ liệu thì phải hiểu cấu trúc dữ  
liệu đó cần được tác động bằng giải thuật gì để  
được kết quả mong muốn.  
l Cấu trúc dữ liệu nào thì giải thuật đó. Khi cấu  
trúc dữ liệu thay đổi giải thuật cũng thay đổi  
theo.  
l Mối quan hệ giữa cấu trúc dữ liệu và giải thuật  
được Niklaus Wirth tổng kết như sau:  
Cấu trúc dữ liệu + Giải thuật = Chương trình  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.10  
2. Các cách diễn đạt giải thuật  
2.1. Liệt kê các bước bằng lời  
l Trong cách diễn đạt này ta phải viết từng bước  
làm công việc gì: Bước 1, Bước 2….  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.11  
2. Các cách diễn đạt giải thuật  
2.2. Lưu đồ giải thuật  
l Lưu đồ giải thuật là một sơ đồ có hướng diễn  
đạt các bước thực hiện của giải thuật.  
l Lưu đồ giải thuật giúp người lập trình xem xét  
sự làm việc của giải thuật khá chi tiết và cụ thể.  
l Lưu đồ giải thuật bao gồm các hình cơ bản nối  
với nhau bởi các đường có hướng.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.12  
2.1. Lưu đồ giải thuật (tiếp)  
l Các hình cơ bản trong lưu đồ giải thuật  
gồm có:  
l Hình elíp thể hiện sự bắt đầu và kết thúc của  
giải thuật.  
Bắt đầu  
Kết thúc  
l Hình chữ nhật chỉ các thao tác, công việc cần  
thực hiện.  
Công việc  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.13  
2.1. Lưu đồ giải thuật (tiếp)  
l Các hình cơ bản trong lưu đồ giải thuật  
gồm có:  
l Hình thoi thể hiện các điệu kiện. Hình này có  
một đường vào và hai đường ra ứng với hai  
trường hợp điều kiện đúng hoặc điều kiện sai.  
Sai  
Điều kiện  
Đúng  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.14  
Ví dụ: Lưu đồ giải thuật tìm giá trị lớn nhất  
trong mảng số A có n phần tử  
Bắt đầu  
max := A(1)  
i := 2  
S
i <= n  
Đ
In giá trị max  
S
A(i) > max  
Đ
Kết thúc  
max := A(i)  
i := i + 1  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.15  
2.3. Giả mã  
l Giả mã là giả ngôn ngữ lập trình (tựa ngôn  
ngữ lập trình).  
l Trong cách diễn đạt giải thuật bằng giả  
mã, người ta sử dụng ngôn ngữ tự nhiên  
cùng với các cấu trúc chuẩn của một ngôn  
ngữ lập trình (Pascal) để mô tả giải thuật.  
Vì sử dụng cả ngôn ngữ tự nhiên nên có  
thể sử dụng các ký hiệu toán học để bản  
mô tả giải thuật ngắn gọn, dễ hiểu hơn.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.16  
2.3.1. Quy định chung  
l Tên chương trình viết bằng chữ hoa, có  
thể thêm dấu gạch ngang và đặt sau từ  
Program  
l Lời chú thích đặt giữa hai dấu ngoặc {….}.  
Lời chú thích được quy ước dùng tiếng  
Việt.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.17  
2.2.2. Biểu thức  
l Các phép toán:  
l Số học: +, -, *, /, ^, DIV, MOD  
l Quan hệ: < , = , > , £ , ³ , ¹  
l Logic: NOT, AND, OR, XOR  
l Các giá trị Logic là True, False  
l Tên biến là một dãy chữ cái, chữ số, dấu gạch  
nối ( _ ), bắt đầu bằng chữ cái, độ dài không  
giới hạn.  
l Biến chỉ số: Tên[chỉ số] Ví dụ : a[i], b[i,j]  
l Biểu thức tương tự như Pascal.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.18  
2.2.3. Câu lệnh  
l Các câu lệnh thể hiện các thao tác, công việc  
cần thực hiện. Các câu lệnh được viết viết cách  
nhau bởi dấu ;  
l Phép toán gán được ký hiệu bởi dấu := hoặc ¬  
l Phép hoán đổi giá trị được ký hiệu bởi dấu :=:  
hoặc «  
l Cấu trúc tuần tự: Liệt kê các công việc, các thao  
tác theo thứ tự. Để cho việc theo dõi được thuận  
tiện có thể đánh thêm thứ tự 1), 2), 3)… hoặc a),  
b), c)…  
l Câu lệnh ghép:  
Begin s1; s2; ... ; sn; end  
Trong đó si là câu lệnh i  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.19  
2.2.3. Câu lệnh  
lCâu lệnh điều kiện:  
lif B then S;  
lif B then S1 else S2;  
trong đó B là biểu thức  
logic, S là câu lệnh.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.20  
2.2.3. Câu lệnh  
l Câu lệnh lựa chọn:  
CASE  
B1: S1;  
B2: S2;  
. . .  
Bn: Sn;  
ELSE Sn+1;  
END CASE  
Với Bi (i=1, 2,…, n) là các điều kiện  
Si (i=1, 2,…, n) là các câu lệnh  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.21  
2.2.3. Câu lệnh  
l Câu lệnh lặp:  
lLặp với số lần lặp biết trước:  
FOR i:=m TO n DO S;  
FOR i:= n DOWNTO m DO S;  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.22  
2.2.3. Câu lệnh  
Lặp với số lần lặp không biết trước:  
lKiểm tra điều kiện trước:  
WHILE B DO S;  
lKiểm tra điều kiện sau:  
REPEAT S UNTIL B;  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.23  
2.2.3. Câu lệnh  
l Câu lệnh chuyển:  
GOTO n;  
trong đó n là số hiệu của một bước trong  
giải thuật.  
l Câu lệnh vào ra:  
l READ(danh sách biến);  
l WRITE(danh sách hằng, biến, biểu thức);  
l Câu lệnh kết thúc: END.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.24  
Cấu trúc giả mã chương trình  
l Vào:  
l Ra:  
{Mô tả}  
Program TenCT;  
1)  
2)  
….  
End.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.25  
2.2.4. Chương trình con  
2.2.4.1. Chương trình con dạng hàm  
- Vào:  
- Ra:  
{Mô tả }  
FUNCTION Tên_hàm(danh sách tham số)  
S1; S2; . . .; Sn;  
Tên_hàm:= biểu thức; {Giá trị trả về của hàm}  
RETURN  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.26  
2.2.4. Chương trình con  
2.2.4.2. Chương trình con dạng thủ tục  
- Vào:  
- Ra: không có  
{Mô tả}  
PROCEDURE Tên_thủ_tục(danh sách tham số)  
S1; S2; . . .; Sn;  
RETURN  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.27  
2.2.4.3. Lời gọi chương trình con  
l Lời gọi chương trình con dạng hàm  
Tên_hàm( danh sách tham số thực sự)  
l Lời gọi chương trình con dạng thủ tục  
CALL Tên_thủ_tục( danh sách tham số thực sự)  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.28  
Bài tập  
l Tìm USCLN của hai số nguyên dương a  
và b.  
l BTVN: Tính gần đúng e^x với độ c.xác  
epsilon = 0.0001  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.29  
Bài tập  
l Viết giả mã cộng hai ma trận có kích  
thước mxn. Y/c sử dụng chương trình  
con.  
l Viết giả mã nhân hai ma trận. Y/c sử dụng  
chương trình con.  
l Viết giả mã tìm và đưa ra các số nguyên  
tố nhỏ hơn số nguyên dương n cho trước.  
Y/c sử dụng chương trình con.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.30  
3. Thiết kế và phân tích giải thuật  
3.1. Thiết kế thuật giải  
3.1.1. Mô đun hóa việc giải quyết bài toán  
l Khi thiết kế giải thuật ta sử dụng phương pháp mô  
đun hoá. Nội dung của phương pháp mô đun hoá là  
coi bài toán lớn như một mô đun chính và phân chia  
nó thành các mô đun con, mỗi mô đun con lại được  
phân chia tiếp, cho tới những mô đun ứng với các  
phần việc cơ bản mà ta đã biết cách giải quyết.  
l Với phương pháp mô đun hoá bài toán thì lời giải của  
bài toán được tổ chức theo cấu trúc cây (phân cấp)  
có dạng như sau:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.1  
3.1.1. Mô đun hóa và việc giải quyết  
bài toán  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.2  
3.1.1. Mô đun hóa việc giải quyết bài toán  
(tiếp)  
l Chiến thuật giải quyết bài toán là chiến thuật “  
chia để trị”, để thể hiện chiến thuật đó người ta  
dùng cách thiết kế “từ đỉnh xuống” (Top -  
Down).  
l Cách thiết kế Top - Down hay thiết kế từ khái  
quát đến đến chi tiết thể hiện như sau: Phân tích  
tổng quát toàn bộ vấn đề xuất phát từ dữ liệu và  
mục tiêu đề ra, đề cập đến vấn đề chủ yếu, rồi  
sau đó mới đi dần vào giải quyết các vấn đề cụ  
thể một cách chi tiết hơn.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.3  
3.1.1. Mô đun hóa việc giải quyết bài toán  
(tiếp)  
l Ví dụ: Bài toán đặt ra là dùng máy vi tính để  
quản lý lương của cán bộ trong xí nghiệp.  
l Phân tích tổng quát bài toán:  
l Dữ liệu vào là một tệp hồ sơ về lương, bao gồm các  
bản ghi chứa các thông tin về lương của cán bộ. Bản  
ghi gồm các trường: mã, họ và tên, đơn vị, hệ số  
lương, phụ cấp, nợ.  
l Chương trình lập ra phải cho người sử dụng thực  
hiện được các công việc chính sau:  
1. Tìm kiếm thông tin  
2. Cập nhật thông tin  
3. In các bảng tổng hợp lương  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.4  
3.1.1. Mô đun hóa việc giải quyết bài toán  
(tiếp)  
l Xuất phát từ phân tích tổng quát ở trên ta  
thấy thuật giải xử lý phải giải quyết được 3  
vấn đề sau:  
1. Đọc tệp: Đọc thông tin từ đĩa từ vào bộ nhớ  
2. Xử lý tệp: Xử lý các thông tin để đưa ra kết  
quả mong muốn  
3. Ghi tệp: Lưu trữ thông tin mới nhất vào tệp.  
Trên cơ sở này ta đưa ra sơ đồ giải thuật  
tổng quát như sau:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.5  
Sơ đồ giải thuật tổng quát  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.6  
Ví dụ (tiếp)  
l Các nhiệm vụ trên còn phức tạp, cần phải  
phân chia ra thành các nhiệm vụ con.  
Chẳng hạn nhiệm vụ “ XỬ LÝ TÊP” được  
phân chia ra thành 3 nhiệm vụ con:  
1. Tìm kiếm bản ghi  
2. Cập nhật bản ghi  
3. In bản lương  
Những nhiệm vụ con lại được chia ra  
thành các nhiệm vụ nhỏ hơn theo sơ đồ  
sau:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.7  
Sơ đồ giải thuật chi tiết  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.8  
3.1.1. Mô đun hóa việc giải quyết bài toán  
(tiếp)  
l Ưu điểm của cách thiết kế Top - Down:  
l Giải quyết bài toán có định hướng, tránh sa đà vào  
các chi tiết phụ.  
l Làm nền tảng cho lập trình có cấu trúc.  
l Bài toán do nhiều người cùng làm, phương pháp mô  
đun hoá tách bài toán thành nhiều bài toán con tạo  
cho các nhóm làm việc độc lập, không ảnh hưởng  
đến nhóm khác.  
l Chương trình xây dựng trên giải thuật thiết kế theo  
kiểu Top - Down dễ dàng trong chỉnh sửa.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.9  
3.1.2. Phương pháp tinh chỉnh  
từng bước  
l Phương pháp tinh chỉnh từng bước là phương pháp  
thiết kế giải thuật gắn liền với lập trình, nó phản ánh tinh  
thần của quá trình mô đun hóa bài toán và thiết kế kiểu  
Top - Down.  
l Phương pháp này thể hiện như sau: Đầu tiên trình bày  
giải thuật bằng ngôn ngữ tự nhiên để phản ánh ý chính  
của công việc cần làm. Các bước tiếp theo sẽ chi tiết  
hoá dần dần, tương ứng với các công việc nhỏ hơn, gọi  
là các bước tinh chỉnh. Càng ở các bước sau thì công  
việc được mô tả hướng tới các lệnh của giả mã.  
Ngôn ngữ tự nhiên ® Các bước tinh chỉnh ® Giả mã  
Trong quá trình này dữ liệu cũng được tinh chỉnh dần từ  
dạng cấu trúc đến dạng cài đặt cụ thể.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 01  
1.10  
Tải về để xem bản đầy đủ
pdf 42 trang yennguyen 17020 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Cấu trúc dữ liệu và giải thuật - Ngô Công Thắng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_cau_truc_du_lieu_va_giai_thuat_chuong_1_cau_truc_d.pdf