TRUONG DAI HOC GIAO THONG VAN TAI THANH PHO HO CHi MINH
ThS. BUI VAN THUQNG
BAI GIANG
CAU TRUC DU LIEU VA GIAI THUAT
ý
THÀNH PHĨ HỊ CHÍ MINH - NĂM 2023
ThS. BÙI VĂN THƯỢNG (Chủ biên)
BÀI GIẢNG
CAU TRUC DU LIEU
VA GIAI THUAT
(Dành cho ngành Cơng nghệ thơng tin)
THÀNH PHĨ HỊ CHÍ MINH - NĂM 2023
LOI NOI DAU
Bài giảng “Câu trúc dữ liệu và giải thuật” được biên soạn theo đề cương chi
tiết môn học “Cấu trúc dữ liệu và giải thuật” dành cho ngành công nghệ thông tin
của Khoa Công nghệ thông tin — Trường Đại học Giao thơng vận tải Thành phó Hồ
Chí Minh.
Tài liệu cung cấp những kiến thức cơ bản về các cách tổ chức đữ liệu trong
máy tính, các giải thuật để xử lý các dạng bài toán thường gặp. Cách lựa chọn và
kết hợp giữa cấu trúc đữ liệu và giải thuật phù hợp trong việc tạo ra các chương
trình máy tính
Nội dung Bài giảng gồm 6 Chương như sau:
Chương
Chương
Chương
Chương
Chương
Chuong
I:
2:
3:
4:
5:
6:
Tổng quan
Các giải thuật tìm kiếm
Các giải thuật sắp xếp
Danh sách liên kết
Cay
Bang bam
Qua đây tác giả cũng xin được gửi lời cảm ơn tới các thay cô trong hội đồng
nhiệm thu bài giảng đã có những nhận xét và góp ý q báu cho bài giảng được
hồn thiện hơn trước khi đến tay bạn đọc. Đặc biệt xin gửi lời cảm ơn tới thây
Nguyễn Ngọc Thạch, giảng viên Bộ mơn Cơ sở máy tính đã đồng hành cũng như
hỗ trợ tác giả hết mình đề hồn thiện bài giảng này.
Mặc dù đã có nhiều có gắng nhưng khó tránh khỏi sai sót. Tác giả mong
nhận được góp ý của bạn đọc đề hoàn thiện hơn trong lần tái bản sau.
Mọi ýkiến đóng góp xin gởi về cho tác giả tại: Khoa Công nghệ thông tin —
Trường Đại học Giao thơng vận tải tải Thành phố Hồ Chí Minh, Số 2, đường Võ
Oanh, Phường 25, Quận Bình Thạnh, Thành phố Hồ Chí Minh.
Email:
Tran trong cam on!
Chia bién
Bui Van Thuong
MUC LUC
LOI NOI DAU
BANG VIET TAT
mCẴẰœ
xi
BANG KY HIEU.
DANH MUC HINH ANH
DANH MUC Vi DU
DANH MUC BANG BIEU.
GB
DANH MUC PHU LUC.
0
CHUONG 1. TONG QUAN.
1.1 Mơ hình hóa bài tốn thực
1.3.2 Biểu diễn giải thu
1.3.3 Đánh giá độ phức tạp của giải thuật
d7: Chương ĨỈnH,.ac.sesscssssessssssssssssre
1.4.1 Tiêu chuân của một chương trình
1.4.2 Quy trình làm phần mềm ..........
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 1.
CHƯƠNG2. CÁC GIẢI THUẬT TÌM KIẾM.
2.1 Bài tốn tìm kiếm
2.2 Giải thuật tìm kiếm tuyến tính.
2.3 Giải thuật tìm kiếm nhị phân...
2.4 Đánh giá độ phức tạp của thuật toái
2.4.1 Tìm kiếm tuyến tính
2.4.2 Tìm kiếm nhị phân..
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 2
CHƯƠNG3.
CÁC GIẢI THUẬT SẮP XÉP
3.1 Bài toán sắp xếp
3.2 Đổi chỗ trực tiếp - Interchange Sort
3.3 Chọn trực tiếp - Selection Sort
3.4
3.5
3.6
3.7
3.8
3.9
Chèn trực tiếp - Insertion Sort.
Sắp xếp nổi bọt - Bubble Sort
Sắp xếp nhanh - Quick Sort..
Sắp xếp vun đồng - Heap Sort....
Sắp xếp phân hoạch - Shell Sort..
7
Sắp xếp trộn - Merge SOTIL...........................
- - - - + kg
b
ƠỚ
Ĩi ©
1.3 Giải thuật.
1.3.1 Khái niệm.
0
1.2.3 Các kiều cấu trúc dữ liệu
CÔ œ0
1.2.2 Tiêu chuẩn lựa chọn cấu trúc dữ liệ
©CGÃẰ
liệ
t
1.2.1 Tổng quan về cấu trúc dữ
b
1.2 Cấu trúc dữ liệu.....
3.10 Sắp xếp theo cơ số - Radix sort...
3.11 Đánh giá độ phức tạp của các giải thuật sắp xếp .
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 3
CHƯƠNG 4. DANH SÁCH LIÊN KÉT
4.1 Giới thiệu tổng quan.
4.1.1 Biến tĩnh và biến độn;
4.1.2 Cấu trúc tự trỏ
4.1.3 Cấu trúc dữ liệu đạng danh sách.
4.2 Danh sách liên kết đơn
4.2.1 Cấu trúc dữ liệu của danh sách liên kết đơn
4.2.2 Các giải thuật trên danh sách liên kết đơn...
4.3 Ngăn xép — Stack
4.3.1 Giới thiệu tổng quai
4.3.2 Cài đặt ngăn xếp bằng mảng một chiều...
4.3.3 Cài đặt ngăn xếp bằng danh sách liên kết đơn.
4.3.4 Một số ứng dụng của ngăn xếp
4.4 Hang doi — Queue .
4.4.1 Téng quan về hàng đợi
4.4.2 Cài đặt hàng đợi bằng mảng.
4.4.3 Cài đặt hàng đợi bằng danh sách liên kết đơn.
4.5 Một số dạng danh sách liên kết khác
4.5.1 Danh sách liên kết kép.
4.5.2 Danh sách liên kết vòng
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 4.
CHƯƠNG 5. CÂY.
5.1 Tổng quan về cấu trúc cây
5.2 Cây nhị phân
5.2.1 Tổng quan về cây nhị phâi
5.2.2 Biểu diễn cây nhị phân bằng danh s;
5.2.3 Một số cách biểu diễn cây nhị phân khác .
5.3 Cây nhị phân tìm kiếm.
5.3.1 Téng quan về cậy nhị phân tìm kiêm.
5.3.2 Các giải thuật trên cây nhị phân tìm kiếm
5.4 Cây nhị phân tìm kiếm cân bằng....... _
5.4.1 Tổng quan về cây nhị phân tìm kiếm cân bằng.
5.4.2 Các thao tác trên cây cân bằng....
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 5.
CHUONG 6. BANG BAM.
6.1 Téng quan về bảng băm
6.1.1 Một số khái niệm...
6.1.2 Ưu điểm của bảng băm
4
6.1.3 Cdephép todn trém bang DAN .......c.svessseessisnensnvesncsnsonsesonosnsessvestcansnaesnstnces
6.2 Phương
6.2.1 Hàm
6.2.2 Hàm
6.2.3 Hàm
pháp xây dựng hàm băm
băm dạng bảng tra
băm theo phương pháp chia
băm theo phương pháp nhân
6.2.4 Phép băm phổ quát
6.3 Các phương pháp giải quyêt đụng độ
6.3.1 Phương pháp kết nối trực tiếp
6.3.2 Phương pháp kết nối hợp nhất
6.3.3 Phương pháp dò tuần tự.
6.3.4 Phương pháp dò bậc hai
6.3.5 Phương pháp băm kép
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 6.
PHU
LUC. CAI DAT MOT
TÀI LIỆU THAM
KHẢO...
SO GIAI THUAT
‘
BANG
NGON
NGU’ CICH. .119
BANG VIET TAT
STT |
1
Thuật ngữ
Diễn giải
Ẵ
Ý nghĩa
Nguyên
tắc vào
‘
,
trong cầu trúc
sau
ra trước
LIFO
Last In First Out
ek
ngăn xÊp.
2 | FIFO
Eiatmrisvom
| Neuven
Be vac muoc ea use
trong hàng đợi.
3
LNR
Left Node Right
Duyệt giữa (trái — nút — phải).
4
LRN
Left Right Node
Duyệt sau (trái — phải — nút).
5
RNL
Right Node Left
Duyệt giữa (phải — nút - trái).
6
RLN
Right Left Node
Duyét sau (phai — trai — nut).
7
NLR
Node Left Right
Duyệt trước (nút — trái — phải).
8
NRL
Node Right Left
Duyệt trước (nút — phai — trái).
BANG KY HIEU
STT | Ky higu
Giai thích
1
CTDL
Cấu trúc đữ liệu.
2
DSLK
Danh sách liên kết.
3
NPTK
Cây nhị phân tìm kiếm.
4
CSCB
Chỉ số cân bằng.
DANH MỤC HÌNH ANH
Hình 1.1 Bài tốn tơ mau ban dé thé gids
Hình
Hình
Hình
Hình
Hình
1.2
1.3
1.4
1.5
1.6
Tơ màu đồ thị
—....
Minh họa về giải thuật „
Lưu đồ giải thuật tìm số lớn nhất trong 3 số a, b, c
Niklaus Wirth
Quy trình làm phần mềm
Hình 2.1 Giải thuật tìm kiếm tuyến tính ....
Hình 2.2 Lưu đồ giải thuật tìm kiếm nhị phâi
Hình 2.3 Tìm kiếm phần tử trong mảng sắp xếp .
Hình 3.1 Cấu trúc của file dữ liệu sắp xế
Hình 3.2 Lưu đồ giải thuật sắp xếp đồi chỗ trực t
Hình 3.3 Minh họa quá trình sắp xếp đồi chỗ trực tiếp.
Hình
Hình
Hình
Hình
Hình
3.4
3.5
3.6
3.7
3.§
Lưu đồ giải thuật sắp xếp chọn trực tiếp,
Sắp xếp dãy số bằng giải thuật chọn trực tiếp.
Lưu đồ giải thuật sắp xếp chèn trực tiếp
Minh họa giải thuật sắp xếp. chèn trực tiêp
Lưu đồ giải thuật sắp xếp nổi bọt.
Hình
Hình
Hình
Hình
Hình
Hình
3.9 Quá trình sắp xếp đãy số bằng Bubble Sort.
3.10 Lưu đồ giải thuật sắp xếp nhanh - Quick Sort. ....
3.11 Sắp xếp dãy số tằng đần bằng giải thuật Quick Sort
3.12 Cấu trúc Heap
3.13 Hiệu chỉnh mảng thành Heap.
3.14 Sắp xếp Heap Sort...........
Hình 3.15 Sắp xếp day tang dần bằng giải thuật Shell Sort
Hình 3.16 Sắp xép day sé tang dan bang Merge Sort
Hình 3.17 Sắp xếp dãy số bằng giải thuật Radix Sort.
Hình
Hình
Hình
Hình
4.1
4.2
4.3
4.4
Danh
Thêm
Thêm
Thêm
sách liên kết đơn.
sài
phần tử mới vào đầu đanh dính! liên kết đơn. .
phần tử mới vào cuối danh sách liên kết đơn
l nút mới vào sau nút Q trong danh sách liên kết đơn.
Hình 4.5 Duyệt danh sách liên kết đơn...
Hình 4.6 Xóa một nút ra khỏi danh sách liên kết đơn.
Hình 4.7 Nguyên tắc hoạt động của ngăn xếp
Hình 4.8 Biểu điễn ngăn xếp bằng mảng...
Hình 4.9 Cài đặt Stack bằng danh sách liên kết đơn.
Hình
Hình
Hình
Hình
§
4.10
4.11
4.12
4.13
Bài tốn Tháp Hà Nộ
Giải bài toán Tháp Hà
Minh họa hàng đợi
"
Minh họa hàng đợi băng mản;
Hình 4.14 Minh họa hàng đợi bằng danh sách liên kết đơn.................................: 93
Hình 4.15 Bài tốn đi chun toa tàu
Hình 4.16 Danh sách liên kết kép......
Hình 4.17 Danh sách liên kết vịng đơn và danh sách liên kết vịng kép
Hình
Hình
Hình
Hình
Hình
Hình
Hình
4.18 Bài toán đi chuyên toa tàu dạng ngăn xếp
5.1 Minh họa về cấu trúc cây và một số khái niệm cơ bản.
5.2 Cây biều thức toán học
5.3 Minh họa một số đạng cây nhị phân.
5.4 Cây nhị phân.....
5.5 Cây nhị phân tìm kiếm
5.6 Minh họa thêm nút vào cây nhị phân
tìm kiêm.
Hình 5.7 Tạo cây nhị phân tìm kiếm từ dãy: 12, 8, 23, 15, 2, 7, 9, 3, 25
Hình 5.8 Hủy nút có 1 cây con (X = 7, phần tử thế mạng Y = 3).........
Hình 5.9 Hủy nút có 2 cây con (X = 4, Y =7)...
Hình 5.10 Hủy nút có 2 cây con (X = 4, Y = 3).
Hình 5.11 Cây nhị phân tìm kiếm cân bằng....
Hình 5.12 Cân bằng cây trường hợp lệch trái left — left
Hình
Hình
Hình
Hình
Hình
Hình
5.13 Cân
5.14 Cân
5.15 Cân
6.1 Minh
6.2 Bảng
6.3 Thêm
bằng cây trường hợp lệch trái left — right.
bằng cây trường hợp lệch phải right — right.
bằng cây trường hợp Right — Left
họa bảng băm.
băm theo phương pháp kết nỗi trực tiếp.
nút vào bảng băm theo phương pháp dò tuần tự...
DANH MUC Vi DU
Vi du 1.1 Tô màu bản đồ thê giới.
Vi du 1.2 Thuật tốn để giải phương trình P(x):
ax +
Ví dụ 1.3 Giải thuật tìm số lớn nhất trong 3 số a, b, €...
Vi dụ 1.4 Độ phức tạp của giải thuật tính tơng 1 + 2 +.
Ví dụ 2.1 Tìm kiếm phần tử trong mảng...
Ví dụ 2.2 Tìm và xóa phần tử khỏi mảng.
Ví dụ 2.3 Tìm phần tử trong mang sap xép..
Ví dụ 3.1 Sắp xếp dãy số bằng giải thuật đổi chỗ trực tỉ
Vi dụ 3.2 Sắp xép dãy số bằng giải thuật chọn trực tiếp,
Vi du 3.3 Minh họa sắp xếp dãy số bằng giải thuật chèn trực tiếp.
Vi dụ 3.4 Sắp xếp dãy số bằng giải thuật Bubble Sort
Vi du 3.5 Sắp xếp dãy số tăng dần bằng giải thuật Quick Sort
Ví dụ 3.6 Sắp xếp dãy số tăng dần bằng giải thuật Heap Sort.
Ví dụ 3.7 Sắp xếp dãy số tăng dần bằng giải thuật Shell Sort.....................
Vi du 3.8 Sắp xếp dãy số tăng dần bằng giải thuật sắp xếp trộn - Merge Sort
Ví dụ 3.9 Sắp xếp dãy số tăng dần bằng giải thuật Radix Sort.
Ví dụ 4.1 Cấu trúc tự trỏ.....
Vi du 4.2 Biểu diễn danh sách sinh viên bằng DSLK đơn
Vi du 4.3 Biểu điễn danh sách sinh viên bằng danh sách liên kết đơn.
Vi du 4.4 Cài đặt ngăn xếp bằng mảng...
Ví dụ 4.5 Sử dụng Stack để hiển thị một số nguyên dương ở dạng số nhị phan ...81
Ví dụ 4.6 Cài đặt Stack bằng danh sách liên kết đơn.
Vi du 4.7 Tinh giá trị của biểu thức hậu tố bằng Stac'
Ví dụ 4.8 Bài tốn tháp Hà Nội........
Vi du 4.9 Cài đặt hàng đợi bằng mảng
Ví dụ 4.10 Giải bài toán di chuyển toa tàu
bằng hàng đợi.
Ví dụ 5.1 Chương trình minh họa các giải thuật trên cây nhị phân tìm ki
Vi dụ 5.2 Ví dụ cây nhị phân tìm kiếm cân bằng.
Ví dụ 6.1 Khảo sát bảng băm với phương pháp đò
10
DANH MUC BANG BIEU
Bang
Bảng
Bảng
Bảng
1.1
1.2
2.1
3.1
Quy tắc biểu diễn giải thuật bằng sơ đồ khối.
Phân mức độ phức tạp của thuật toán. .......
So sánh độ phức tạp của các giải thuật tim ki
Độ phức tạp của các giải thuật sắp xếp
ll
DANH MUC PHU LUC
Phụ lục 1. Biểu diễn danh sách sinh viên bằng danh sách liên kết đơn.
Phụ lục 2. Giải bài toán Tháp Hà Nội bằng khử đệ quy sử dụng Stack
Phụ lục 3. Chương trình minh họa các giải thuật trên cây nhị phân tìm kiêm.
Phụ lục 4. Code minh họa giải thuật trên cây nhị phân tìm kiếm cân bằng
12
CHUONG 1. TONG QUAN
N6i dung chính:
- Sơ lược về phương pháp giải quyết các bài toán trong thực tế theo hướng tin học.
- Giới thiệu khái quát một số khái niệm liên quan đến cấu trúc dữ liệu, giải thuật,
các phương pháp đánh giá độ phức tạp của giải thuật.
- Chương trình máy tính, phần mềm máy tính và một số quy trình làm phần mêm
được áp dụng phổ biến hiện nay.
1.1 Mơ hình hóa bài tốn thực tế
Mơ hình hóa bài tốn tức là nhận biết và giải quyết các bài tốn thực tế theo
hướng tin học hóa. Thơng thường, các bài tốn ban đầu thường khơng rõ ràng. Để
giảm bớt sự phức tạp của bài toán thực tế, ta phải hình thức hóa nó, nghĩa là phát
biểu lại bài tốn thực tế thành một bài tốn hình thức hay cịn gọi là mơ hình tốn.
Có thể có rất nhiều bài tốn thực tế có cùng một mơ hình tốn. Mơ hình tốn
là q trình chun đổi các bài tốn thành các mơ hình tốn học để có thể giải quyết
bằng các phương pháp tốn học sẵn có.
Để giải một bài tốn trong thực tế bằng máy tính ta phải bất đầu từ việc xác
định bài tốn:
e
Phai lam gi?
©
Phải làm như thế nào?
Sau khi đã xác định được mô hình tốn học cho vấn đề cần giải quyết, tiếp
theo, ta có thể hình thành một thuật tốn cho mơ hình đó. Đầu tiên thuật tốn thường
được diễn tả đưới dang các phát biểu mang tính tổng quát, và sau đó sẽ được tỉnh
chỉnh dần từng bước thành chuỗi các lệnh cụ thẻ, rõ ràng hơn.
Ví du 1.1 Tơ màu bản đồ thế giới.
Hình 1.1 Bài tốn tơ màu bản đồ thế giới.
13
Ta can phải tô màu cho các nước trên bản đồ thế giới sao cho mỗi nước đều
được tô một màu và hai nước láng giềng (cùng biên giới) thì phải được tơ bằng hai
màu khác nhau. Hãy tìm một phương án tô màu sao cho số màu sử dụng là ít nhất.
Ta có thể xem mỗi nước trên bản đồ thế giới là một đỉnh của đồ thi, hai nước
láng giềng của nhau thì hai đỉnh ứng với nó được nối với nhau bằng một cạnh. Bài
toán lúc này trở thành bài tốn tơ màu cho đồ thị như sau:
©
Mỗi đỉnh đều phải được tơ màu.
©
Hai dinh cé cạnh nói thì phải tơ bằng hai màu khác nhau.
©_
Tơ màu sao cho số màu được sử dụng là ít nhất.
Hình 1.2 Tô màu đồ thị
1.2 Cấu trúc dữ liệu
1.2.1 Tổng quan về cấu trúc dữ liệu
Cấu trúc dữ liệu (tiếng Anh là Data Structure - sau đây sẽ viết tắt là CTDL)
là cách tổ chức và lưu trữ dữ liệu trong máy tinh dé có thé truy xuất và xử lý dé
dàng. Nó giúp tăng hiệu suất và hiệu quả của chương trình bằng cách cung cấp các
phương pháp tiếp cận và thao tác dữ liệu hiệu quả.
Kiểu đữ liệu là một tập hợp các giá trị và một tập hợp các phép tốn trên các
giá trị đó.
Kiểu dữ liệu có hai loại là kiểu dữ liệu sơ cấp và kiểu dữ liệu có cấu trúc:
© Kiểu dữ liệu sơ cấp là kiểu dữ liệu mà giá trị dữ liệu của nó là đơn nhất.
Chẳng
hạn
ta có một số kiểu dữ liệu sơ cấp
như:
boolean,
integer,
character, float, ....
©
Kiéu dit liéu cé cầu trúc hay còn gọi là cầu trúc dữ liệu là kiểu dữ liệu mà
gid tri dữ liệu của nó là sự kết hợp của các giá trị khác. Chăng han ta co
một số cầu trúc dữ liệu như: mang, kiểu cấu trúc, danh sách liên kết, ....
14
1.2.2 Tiêu chuẩn lựa chọn cấu trúc dữ liệu
Cấu trúc dữ liệu đóng vai trị quan trọng trong việc kết hợp và đưa ra cách
giải quyết cho bài tốn. Nó hỗ trợ cho các thuật toán thao tác trên đối tượng được
hiệu quả hơn.
Việc lựa chọn cấu trúc dữ liệu cho bài tốn có thể dựa vào các tiêu chuẩn sau:
Phải biểu diễn được đây đủ thông tin nhập và xuất của bài toán.
Phải phù hợp với các thao tác của thuật toán mà ta lựa chọn.
Phù hợp với điều kiện cho phép của ngơn ngữ lập trình đang sử dụng.
Tiết kiệm tài nguyên hệ thống.
1.2.3 Các kiểu cấu trúc dữ liệu
Cấu trúc dữ liệu có thê chia thành các dạng phé biến sau:
Cấu trúc dữ liệu tuyến tính: Là cấu trúc dữ liệu trong đó các phân tử
được liên kết tuân tự, nồi tiếp với nhau (ví dụ: Máng, danh sách liên kết,
hàng đợi, ...).
Cấu trúc dữ liệu dang cây: Mỗi phân tử có thể liên kết với nhiều phần tử
khác theo từng mức.
Cấu trúc dữ liệu bảng băm: Là mội cấu trúc dữ liệu tương tự như mảng
nhưng kèm theo một hàm băm để ánh xạ nhiều gid tri vào cùng một phần
tử trong mảng.
Cấu trúc dữ liệu dạng đồ thị: Là dạng cấu trúc dữ liệu bao gồm một tập
các đi tượng được goi là các đỉnh (hoặc nút) nổi với nhau bởi các cạnh
(hoặc cung).
Cấu trúc dữ liệu ánh xạ: Là cấu trúc dữ liệu mà mỗi phân tử là ánh xạ
giữa khóa (key) và giá trị (value) cua no (vi du: map, JSON, ...).
1.3 Giai thuat
1.3.1 Khai niém
Giai thuat (hay con goi la thuat toan -tiéng Anh la Algorithms) là một chuỗi
hữu hạn các thao tác dé giải một bài tốn nào đó. Giải thuật là độc lập với các ngơn
ngữ lập trình, tức là một giải thuật có thể được triển khai trong nhiều ngơn ngữ lập
trình khác nhau.
Các tính chất quan trọng của giải thuật bao gồm:
Tính hữu hạn: Giải thuật phải ln kết thúc sau một số hữu hạn bước.
Tính xác định: Mỗi bước của giải thuật phải được xác định rõ ràng, phải
được thực hiện chỉnh xác, và phải mang một mục đích nhất định.
Tính đúng: Giải thuật phải đảm bảo tính đúng và chỉnh xác.
Tính phổ biến: Giải thuật phải giải quyết được lép các vấn đề tương tự.
15
©
Tính hiệu quả: Các thao tác trong giải thuật phải có khả năng giải quyết
hiệu quả vấn đề trong điều kiện thời gian và tài nguyên cho phép.
©_
Dữ liệu đầu vào xác định (inpuÐ: Giải thuật phải xử lý một số lượng dữ
liệu đầu vào xác định.
©_
Kết quá đầu ra (output): Giải thuật sẽ giải quyết các bài toán bằng cách
xử lý các loại dữ liệu đầu vào để cho kết quả dữ liệu đâu ra đã xác định.
Thuật toán
—
Dữ liệu đầu ra
Hình 1.3 Minh họa về giải thuật
Ví dụ 1.2 Thuật tốn đê giải phương trình P(x): ax + b = 0.
Input: a, b
Output: Nghiệm x
Thực hiện:
©
Néwa=
= b= 0 thi P(x) có nghiệm bắt kì
=
©
0:
b#0 thi P(x) vơ nghiệm
Nếu a# 0 thì P(x) có duy nhật một nghiệm x = (- b)/a
1.3.2 Biểu diễn giải thuật
Dưới đây là một số cách thường được sử dụng đề biểu điễn giải thuật:
se
Sử dụng ngôn ngữ tự nhiên: Liệt kê tuần tự các bước để giải quyết bài
toán. Cách này đơn giản và không cân kiến thức về biểu diễn giải thuật,
tuy nhiên nó thường dài dịng và đơi khi khó hiểu.
©
Sử dụng lưu đồ (sơ đồ khối): Sử dựng các hình khối khác nhau để biểu
diễn giải thuật. Cách này trực quan và dễ hiểu, tuy nhiên hơi cơng kênh.
©
Sw dung ma gia: Sử dụng ngôn ngữ tựa ngôn ngữ lập trình để biểu diễn
giải thuật. Cách làm này đỡ cơng kênh hơn sơ đồ khối tuy nhiên không
trực quan.
se
Sử dụng ngơn ngữ lập trình: Sử dụng các ngơn ngữ máy tính như C,
Pascal, ... dé biểu diễn giải thuật. Cách này địi hỏi phải có kiến thức và
kỹ năng về ngơn ngữ lập trình được sử dụng.
Ví dụ 1.3 Giải thuật tìm số lớn nhất trong 3 só a, b, c.
Input: a, b, c.
Output: max (a, b, c).
Biểu diễn giải thuật bằng ngơn ngữ tự nhiên:
16
©
Đặt biến max = a.
©
Néu max < b ta gén lại max = b.
©
Néu max <
c, ta gan lai max = c.
©_ Số lớn nhất cuối cùng tìm được trong 3 số q, b, e có giá trị bằng max.
Biểu diễn giải thuật bằng lưu đồ thuật tốn (sơ đồ khói):
Bảng 1.1 Quy tắc biểu diễn giải thuật bằng sơ đồ khối.
Hình khối
Ý nghĩa sử dụng
Bắt đầu hoặc kết thúc giải thuật.
Phan dữ liệu nhập, xuất.
Q trình xử lý, tính tốn.
—
Chứa biêu thức điều kiện, rẽ nhánh của giải thuật. Sử
dụng hình này sẽ có 2 đầu ra ứng với 2 trường hợp
đúng và sai của biểu thức điều kiện.
'Tệp tin dữ liệu.
Khối chương trình con.
ye
CƠ
Hướng đi của giải thuật. Lưu đồ nên được vẽ theo
hướng từ trên xuống dưới.
Bước chuẩn bị.
Điểm nối, sử dụng khi giải thuật vượt qua trang khác.
Chú thích.
17
true
Max
false
false
Max =b
/
a,b,c
|
Max =c¢
/
Hình 1.4 Lưu đồ giải thuật tim số lớn nhất trong 3 số a, b, c.
1.3.3 Đánh giá độ phức tạp của giải thuật
Với phần lớn các bài tốn, thường có nhiều giải thuật khác nhau đề giải. Dé
so sánh và lựa chọn giải thuật tốt nhất người ta thường phân tích và dự đốn các tài
ngun mà giải thuật đó cần.
Một giải thuật được gọi là hiệu quả nếu chỉ phí cần sử dụng tài nguyên của
máy là thấp. Tài nguyên ở đây bao gồm:
©_
Bộ nhớ.
©_
Thời gian tính tốn.
Trong đó, thời gian tính tốn là tài ngun quan trọng nhất. Thời gian chạy
một giải thuật phụ thuộc vào các yếu tố sau:
©
Khoi lượng của đữ liệu đầu vào.
©
Chat lượng của mã máy được tạo ra bởi trình dịch.
©_
Tóc độ thực thi lệnh của máy.
©
D6 phitc tạp về thời gian của thuật tốn.
Có hai phương pháp đề đánh giá độ phức tạp của giải thuật gồm:
Phương pháp thực nghiệm:
©
Cach lam: Cài giải thuật rơi chọn các bộ dữ liệu thử nghiệm, sau đó thống
kê các thơng số nhận được khi chạy các bộ dữ liệu đó để đánh giá.
© Ưu điểm: Dễ thực hiện.
© Nhuwoc điểm:
=
18
Chiu sur han ché cia ngơn ngữ lập trình.
"Ảnh hướng bởi trình độ của người lập trình.
" Kho khăn và tốn nhiều chỉ phí cho việc chọn 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.
"_
Phụ thuộc vào sức mạnh của phân cứng.
Phương pháp xấp xỉ tốn học:
©_
Đánh giá thuật toán theo hướng xắp xi tiệm cận qua các khái niệm Big-O.
©
Uudiém: ft phụ thuộc mơi trường cũng như phân cứng hơn.
© _ Nhược điểm: Phúc tạp.
Thời gian tính tốn của một giải thuật thể hiện số phép toán của giải thuật so
với kích thước của dữ liệu đầu vào. Độ phức tạp của giải thuật được mô tả qua một
ham f(N), trong do N lakhối lượng dữ liệu cần được xử lý. Các trường hợp độ phức
tap quan tam:
©
Trường hợp tốt nhất (phân tích chính xác).
©
Trường hợp xấu nhất (phân tích chính xác).
e_
Trường hợp trung bình (mang tích dự đoán).
Độ phức tạp của thuât toán được đánh giá qua một hàm có ký hiệu là Big-O.
Big-O có tham số kích thước dữ liệu đầu vào là n và nó thể hiện thời gian chạy lâu
nhất của một thuật toán (trường hợp xấu nhất).
Trong bảng dưới đây, độ phức tạp của thuật toán là tăng dan:
Bang 1.2 Phân mức độ phức tạp của thuật tốn.
Ký hiệu Big-O
| Độ phức tạp
Mơ tả
ov
HingsS
ge thd
a iu de
O(log(n))
Logarit
Số phép tính tăng theo hàm logarit.
O(n)
Tuyển tính
ae)
a
O(n?)
Lũy thừa bậc 3 | Số phép tốn là đa thức lũy thừa bac n?.
O@*)
Hàm mũ
Số phép toán là hàm mũ 2",
O(n)
Giai thừa
Độ phức tạp giai thừa.
O(n?)
So phép tính tỷ lệ thuần với dữ liệu đầu
a
Lũy thừa bậc 2 | Số phép toán là đa thức lũy thừa bac n?.
19
Vi du 1.4 Dé phite tap cua gidi thuat tinh tong 1+ 2+... +n.
©
Bai nay néu ding cơng thức để tính: n*(n+ 1)/2. Gidi thudt nay có độ phức
tạp là O(1) (1 phép tốn).
©
Néu dung vịng lặp từ 1 đến n để tính tổng, độ phức tạp là O(n). Với n bang
1 tỷ, tương đương với việc thực hiện 1 tỷ lần phép tốn cộng.
1.4 Chương trình
Chương trình là một cách mơ tả khác của thuật
tốn bao gồm tập hợp các lệnh viết bằng ngơn ngữ lập
trình nảo đó giúp máy tính hiểu và thực hiện được.
Chương trình máy tính dựa vào các dữ liệu đầu
vào, tiền hành các bước xử lý để trả lại kết quả đầu ra.
Theo nhà khoa học máy tính Niklaus Wirth:
Cấu trúc dữ liệu + Thuật tốn = Chương trinh"!!
Hinh 1.5 Niklaus Wirth
Chương trình máy tính được thể hiện ở hai dang
là chương trình có thể chạy được và mã nguồn chương trình. Tập hợp một hoặc
nhiều chương trình máy tính cùng các dữ liệu liên quan được gọi là phần mềm máy
tính.
1.4.1 Tiêu chuẩn của một chương trình
Một chương trình máy tính cần đảm bảo các tiêu chuẩn sau:
se _ Tính tin cậy: Chương trình phải chạy đúng như dự định, mơ tả chính xác
một giải thuật đúng.
©
Tinh uyén chuyén: Chuong trinh dễ sửa đổi, giảm bớt cơng sức của lập
trình viên khi phát triên chương trình, đáp ứng các quy trình làm phan
mém.
¢
Tinh trong sang: Chong trinh viét ra phai dé đọc, dễ hiểu. Tính trong
sang phụ thuộc rất nhiễu vào cơng cụ lập trình và phong cách lập trình.
e_
Tính hữu hiệu: Chương trình phải đáp ứng được yêu cau là chạy nhanh
và ít tốn tài nguyên bộ nhớ, điều này phụ thuộc vào chất lượng của giải
thuật cũng như kỹ năng của lập trình viên.
Từ những phân tích trên ta thấy rằng việc tạo ra một chương trình địi hỏi rất
nhiều cơng đoạn và tiêu tốn rất nhiều cơng sức. Vì vậy đừng bao giờ viết chương
trình mà chưa suy xét kỹ về giải thuật và những đữ liệu cần thao tác.
1.4.2 Quy trình làm phần mềm
Quy trình phát triển phần mềm là một cấu trúc bao gồm tập hợp các thao tác
và các kết quả tương quan sử dụng trong việc phát triển để sản xuất ra một sản phẩm
phần mềm.
20
* Van hanh (Operation)
* Theo doi (Follow-up)
* Bao dudng (Maintenance).
* Ý tưởng (Concept)
* Cài đặt (Implementation).
* Thử nghiệm (Testing).
* Xác định yêu
(Requirements Specification)
Hinh 1.6 Quy trinh lam phan mém
Bước 1. Xác định yêu cau bài toán:
Dữ liệu vào
Xử lý > Dữ liệu ra
Việc xác định bài toán tức là ta phải xác định xem cần giải quyết những vấn
đề gì? Với giả thiết nào đã cho và lời giải cần phải đạt được những u cầu gì?
Bước 2. Phân tích, thiết kế:
Lựa chon cau trúc dữ liệu và thiết kế giải thuật phù hợp cho bài toán.
Bước 3. Cài đặt, thử nghiệm:
©_ Sau khi đã có thuật tốn ta cân lập trình để thể hiện thuật tốn đó. Muốn
lập trình đạt kết quả cao, cần phải có kỹ thuật lập trình tối.
©_
Kỹ thuật
lập trình tốt thể hiện ở kỹ năng viết chương trình, khả năng gỡ
rồi và thao tác nhanh.
©
Chay thir, tim va swa lỗi, xây dựng các bộ test,....
Bước 4. Vận hành, bảo dưỡng:
©
Trién khai phần mêm cho khách hàng.
©
Theo déi và xử lý các vấn dé phát sinh trong q trình vận hành.
©
Phát triển thêm các chức năng.
Một số mơ hình cho việc xây dung quy trình phát trin phn mm:
eâ_
Mụ hỡnh thỏc nc.
â
M6 hinh chit V.
Â
M6 hinh Agile.
21
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 1
Câu 1. Trình bày các tiêu chuẩn lựa chọn cấu trúc dữ liệu?
Câu 2. Hãy vẽ lưu đồ của giải thuật giải phương trình bậc hai: ax? + bx + c = 0.
Câu 3. Trình bày giải thuật tính tổng các chữ số của một số nguyên dương bắt kỳ.
Xác định độ phức tạp của giải thuật?
Câu 4. Hãy tìm hiểu và so sánh mơ hình thác nước và mơ hình chữ V cho việc xây
dựng quy trình phát triển phần mềm?
Câu 5. Tìm hiểu mơ hình phát trién phan mém Agile va quy trinh Scrum?
22