SlideShare a Scribd company logo
1 of 64
Download to read offline
CẤU TRÚC DỮ LIỆU
VÀ GIẢI THUẬT
Vũ Song Tùng
1
NỘI DUNG
2
Giới thiệu chung
Danh sách tuyến tính
Cây
Đồ thị
Sắp xếp
Tìm kiếm
I. Giới thiệu chung
3
Các kỹ thuật lập trình
Ngôn ngữ giả lập trình
Sơ lược về CTDL và giải thuật
I. Giới thiệu chung
4
• Lập trình hàm
– Chia các giai đoạn của chương trình vào các hàm
– Thể hiện những đoạn mã tương tự trong một hàm
– Ưu điểm
• Dễ quản lý
• Tiết kiệm dung lượng chương trình
I. Giới thiệu chung
5
• Lập trình hướng đối tượng
– Trừu tượng hóa các thành phần của chương trình
– Đặc điểm
• Tính đóng gói – các thuộc tính của một thành phần và các hàm
xử lý các thuộc tính đó được định nghĩa trong cùng một khối
• Tính đa hình – cho phép tạo ra nhiều hình thái của một loại
thành phần
• Tính kế thừa – cho phép sử dụng lại các định nghĩa đã có của
một thành phần để tạo ra một thành phần mới
I. Giới thiệu chung
6
• Các quy ước
Các kiểu dữ liệu Mô tả
ℝ, ℕ, ℤ Tập các số thực, nguyên và nguyên dương
Type Kiểu bất kz
𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 Mảng chứa 𝓇 – 𝓁 + 1 phần tử kiểu T
𝐒𝐞𝐪𝐮𝐞𝐧𝐜𝐞 𝐨𝐟 𝑇𝑦𝑝𝑒 Dãy
𝐒𝐞𝐭 𝐨𝐟 𝑇𝑦𝑝𝑒 Tập hợp
I. Giới thiệu chung
7
• Các quy ước
Toán tử Mô tả
≔ Gán
=, ≠, <, >, ≤, ≥ So sánh
∧, ∨, ≦ And, Or, Not logic
𝑎++/𝑎−− 𝑎 ≔ 𝑎 ± 1
𝑥 , 𝑥 Làm tròn xuống và lên
𝐶? 𝐼 ∶ 𝐽 Nếu C đúng thực hiện I, C sai thực hiện J
𝑥1, 𝑥2, … , 𝑥 𝑛 Dãy các phần tử
𝑥1, 𝑥2, … , 𝑥 𝑛 Tập hợp các phần tử
; Ngắt các biểu thức
I. Giới thiệu chung
8
• Biểu thức
Loại Cú pháp
Khai báo biến 𝑥 = 𝑣 ∶ 𝑇𝑦𝑝𝑒
Điều kiện 𝐢𝐟 𝐶 𝐭𝐡𝐞𝐧 𝐼
𝐢𝐟 𝐶 𝐭𝐡𝐞𝐧 𝐼 𝐞𝐥𝐬𝐞 𝐽
Lặp xác định 𝐟𝐨𝐫 𝑖 ≔ 𝑎 𝐭𝐨 𝑏 𝐝𝐨 𝐼
𝐟𝐨𝐫𝐞𝐚𝐜𝐡 𝑎 ∈ 𝑠 𝐝𝐨 𝐼
Lặp không xác định 𝐰𝐡𝐢𝐥𝐞 𝐶 𝐝𝐨 𝐼
𝐫𝐞𝐩𝐞𝐚𝐭 𝐼 𝐮𝐧𝐭𝐢𝐥 𝐶
I. Giới thiệu chung
9
• Biểu thức
Loại Cú pháp
Tạo con trỏ 𝐩𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝑇𝑦𝑝𝑒
Cấp phát bộ nhớ
𝑝 ≔ 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝑇𝑦𝑝𝑒
𝑝 ≔ 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒
Giải phóng bộ nhớ 𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝑝
Lấy địa chỉ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑝
Lấy nội dung trong con trỏ ∗ 𝑝
Truy cập thành viên của con trỏ 𝑝 → 𝑐
I. Giới thiệu chung
10
• Hàm và thủ tục
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Power 𝑥 ∶ ℝ; 𝑛 ∶ ℤ; 𝐯𝐚𝐫 𝑟 ∶ ℝ
𝑟 = 1 ∶ ℝ
𝐟𝐨𝐫 𝑖 ≔ 1 𝐭𝐨 𝑛 𝐝𝐨
𝑟 ≔ 𝑟 ∗ 𝑥
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Power 𝑥 ∶ ℝ; 𝑛 ∶ ℤ ∶ ℝ
𝐢𝐟 𝑛 = 0 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 1
𝐞𝐥𝐬𝐞 𝐫𝐞𝐭𝐮𝐫𝐧 𝑥 ∗ Power 𝑥, 𝑛 − 1
I. Giới thiệu chung
11
• Hướng đối tượng
𝐜𝐥𝐚𝐬𝐬 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 𝑥, 𝑦 ∶ ℝ
𝑟 = 𝑥 ∶ ℝ
𝑖 = 𝑦 ∶ ℝ
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 modul ∶ ℝ 𝐫𝐞𝐭𝐮𝐫𝐧 𝑟2 + 𝑖2
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 add 𝑐 ∶ 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 ∶ 𝐶𝑜𝑚𝑝𝑙𝑒𝑥
𝐫𝐞𝐭𝐮𝐫𝐧 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 𝑟 + 𝑐. 𝑟, 𝑖 + 𝑐. 𝑖
I. Giới thiệu chung
12
• Cấu trúc mảng
• Tập hợp các phần tử cùng kiểu
– được sắp xếp liên tiếp trong bộ nhớ
– được xác định vị trí bằng chỉ số
• Thường dùng để lưu trữ các danh sách tuyến tính có
kích thước cố định
𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑐 ≔ 𝐬𝐢𝐳𝐞 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐿0 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑎[𝓁]
𝐿 𝒾 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑎[𝒾]
 𝐿 𝒾 = 𝐿0 + 𝒾 − 𝓁 𝑐
I. Giới thiệu chung
13
• Cấu trúc liên kết
• Tập hợp các phần tử (item) lưu trữ dữ liệu (info) và
địa chỉ liên kết (link) đến phần tử khác
• Dùng để lưu trữ danh sách động hoặc các cấu trúc
phi tuyến
𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐩𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝐼𝑡𝑒𝑚
𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝑖 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑖𝑛𝑓𝑜 ∶ 𝑇𝑦𝑝𝑒
𝑙𝑖𝑛𝑘 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
…
𝑎 ≔ 𝐼𝑡𝑒𝑚 𝑥
𝑏 ≔ 𝐼𝑡𝑒𝑚 𝑦
𝑎. 𝑙𝑖𝑛𝑘 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑏
x y
x y
I. Giới thiệu chung
14
• Giải thuật đệ quy
– Giải thuật gọi lại chính nó, gồm 2 thành phần:
• Điều kiện dừng đệ quy
• Gọi đệ quy
– Áp dụng giải thuật đệ quy khiến cho thuật toán
trở nên mạch lạc
I. Giới thiệu chung
15
• Độ phức tạp của thuật toán O(…)
– Số lượng trung bình (Tcp) của phép toán phức tạp nhất
trong thuật toán
– Độ phức tạp của các thuật toán sắp xếp và tìm kiếm
trong dãy n phần tử:
Thuật toán Độ phức tạp
SelectSort O(n2)
InsertSort O(n2)
BubbleSort O(n2)
QuickSort O(nlog2n)
HeapSort O(nlog2n)
LinearSearch O(n)
BinarySearch O(log2n)
II. Danh sách tuyến tính
16
Ngăn xếp
Hàng đợi
Danh sách liên kết
II. Danh sách tuyến tính
17
• Dãy các phần tử được thêm vào (push) và
lấy ra (pop) tại cùng một đầu của dãy
𝑆 = 𝑒1, 𝑒2, … , 𝑒𝑡−1, 𝑒𝑡
𝑒 ↦ 𝑆 ⇒ 𝑆 ≔ 𝑒1, 𝑒2, … , 𝑒𝑡, 𝑒𝑡+1
𝑒 ↤ 𝑆 ⇒ 𝑒, 𝑆 ≔ 𝑒𝑡, 𝑒1, 𝑒2, … , 𝑒𝑡−1
II. Danh sách tuyến tính
18
• Định nghĩa ngăn xếp bằng mảng
𝐜𝐥𝐚𝐬𝐬 Stack 𝑛 ∶ ℕ 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑡 = 0 ∶ ℕ
𝑠 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Push 𝑒 ∶ Type 𝑡++; 𝑠 𝑡 ≔ 𝑒
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Pop ∶ Type
𝑡′
= 𝑡; 𝑡−−
𝐫𝐞𝐭𝐮𝐫𝐧 𝑠 𝑡′
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 IsEmpty ∶ 0,1 𝐫𝐞𝐭𝐮𝐫𝐧 𝑡 < 1? 1 ∶ 0
II. Danh sách tuyến tính
19
• Dãy các phần tử được thêm vào (enqueue)
và lấy ra (dequeue) tại hai đầu khác nhau
của dãy
𝑄 = 𝑒𝑓, 𝑒𝑓+1, … , 𝑒 𝑟
𝑒 ↦ 𝑄 ⇒ 𝑄 ≔ 𝑒𝑓, 𝑒𝑓+1, … , 𝑒 𝑟, 𝑒 𝑟+1
𝑒 ↤ 𝑄 ⇒ 𝑒, 𝑄 ≔ 𝑒𝑓, 𝑒𝑓+1, … , 𝑒 𝑟
II. Danh sách tuyến tính
20
• Định nghĩa hàng đợi bằng mảng
𝐜𝐥𝐚𝐬𝐬 Queue 𝑛 ∶ ℕ 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑓 = 𝓇 = 0 ∶ ℕ
𝑐 = 0 ∶ ℕ
𝑞 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Inc 𝐯𝐚𝐫 𝒾 ∶ ℕ 𝒾 = 𝑛? 𝒾 ≔ 1 ∶ 𝒾++
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Enqueue 𝑒 ∶ Type
𝑐 = 0? 𝑓 ≔ 𝓇 ≔ 1: Inc 𝓇 ; 𝑞 𝓇 ≔ 𝑒; 𝑐++
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Dequeue ∶ Type
𝑓′
= 𝑓; 𝑐 = 1? 𝑓 ≔ 𝓇 ≔ 0 ∶ Inc 𝑓 ; 𝑐−−
𝐫𝐞𝐭𝐮𝐫𝐧 𝑞 𝑓′
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Count ∶ ℕ; 𝐫𝐞𝐭𝐮𝐫𝐧 𝑐
II. Danh sách tuyến tính
21
• Danh sách liên kết 2 chiều
• Dãy các phần tử liên kết với phần tử phía sau (next)
và phía trước (prev) trong dãy
𝐿 = 𝑓𝑖𝑟𝑠𝑡, … , 𝑝, 𝑞, … , 𝑙𝑎𝑠𝑡
𝑝 → 𝑛𝑒𝑥𝑡 = 𝑞
𝑞 → 𝑝𝑟𝑒𝑣 = 𝑝
II. Danh sách tuyến tính
22
• Mô hình
Danh sách rỗng 𝑕. 𝑛𝑒𝑥𝑡 – phần tử đầu danh sách
𝑕. 𝑝𝑟𝑒𝑣 – phần tử cuối danh sách
𝑕 …
…
𝑕
II. Danh sách tuyến tính
23
• Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚
𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝑖 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑖𝑛𝑓𝑜 = 𝑖 ∶ 𝑇𝑦𝑝𝑒
𝑛𝑒𝑥𝑡 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝑝𝑟𝑒𝑣 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 insertAfter 𝑝 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝑝 → 𝑛𝑒𝑥𝑡 ≔ 𝑛𝑒𝑥𝑡
𝑛𝑒𝑥𝑡 → 𝑝𝑟𝑒𝑣 ≔ 𝑝
𝑛𝑒𝑥𝑡 ≔ 𝑝
𝑝 → 𝑝𝑟𝑒𝑣 ≔ 𝐭𝐡𝐢𝐬
II. Danh sách tuyến tính
24
• Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 remove 𝑝 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
p → 𝑝𝑟𝑒𝑣 → 𝑛𝑒𝑥𝑡 ≔ 𝑝 → 𝑛𝑒𝑥𝑡
p → 𝑛𝑒𝑥𝑡 → 𝑝𝑟𝑒𝑣 ≔ 𝑝 → 𝑝𝑟𝑒𝑣
𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝑝
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 makeEmpty
𝑝 ≔ 𝑛𝑒𝑥𝑡
𝐰𝐡𝐢𝐥𝐞 𝑝 ≠ 𝐭𝐡𝐢𝐬
𝑛𝑒𝑥𝑡 ≔ 𝑝 → 𝑛𝑒𝑥𝑡
𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝑝
𝑝 ≔ 𝑛𝑒𝑥𝑡
𝑝𝑟𝑒𝑣 ≔ 𝐭𝐡𝐢𝐬
II. Danh sách tuyến tính
25
• Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐿𝑖𝑠𝑡
𝐜𝐥𝐚𝐬𝐬 𝐿𝑖𝑠𝑡 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑕 ∅ ∶ 𝐼𝑡𝑒𝑚
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 newItem 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝐼𝑡𝑒𝑚 𝑒
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 pushBegin 𝑒 ∶ 𝑇𝑦𝑝𝑒 𝑕. insertAfter newItem 𝑒
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 pushBegin 𝑒 ∶ 𝑇𝑦𝑝𝑒 𝑕. 𝑝𝑟𝑒𝑣 → insertAfter newItem 𝑒
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 popBegin 𝑝 ≔ 𝑕. 𝑛𝑒𝑥𝑡; 𝑕. remove 𝑝
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 popEnd 𝑝 ≔ 𝑕. 𝑝𝑟𝑒𝑣; 𝑕. remove 𝑝
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 removeAll 𝑕. makeEmpty
III. Cây
26
Các khái niệm
Cây nhị phân
Một vài ứng dụng
III. Cây
27
𝑇 ∶ 𝑇1, 𝑇2, … , 𝑇𝑛 | 𝑇 𝑖−𝑠𝑢𝑏𝑡𝑟𝑒𝑒
A
C
H
D
E F G
B
Các khái niệm
Gốc A
Cành B, C, D, G
Lá C, E, F, H
Cấp 3
Chiều cao 4
Mức 0 A
Mức 1 B, C, D
Mức 2 E, F, G
Mức 3 H
III. Cây
28
𝑇 ∶ 𝑇𝑙𝑒𝑓𝑡, 𝑇𝑟𝑖𝑔𝑕𝑡
A
D
B
C
Cây lệch phải
A
D
B
C
Cây zíc-zắc
A
C
FD E
B
Cây gần đầy
A
C
FD E
B
Cây đầy đủ
A
C
F GD E
B
Cây ho{n chỉnh
III. Cây
29
• Mô hình lưu trữ
• Mỗi nút trên cây được coi là một cây con gồm một
trường chứa dữ liệu (info) và hai địa chỉ liên kết với
cây con trái (left) và phải (right)
A
B
D E
C
Tree
III. Cây
30
• Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒
𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐏𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒
𝐜𝐥𝐚𝐬𝐬 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝑖 ∶ 𝑇𝑦𝑝𝑒; 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑒 = 𝑖 ∶ 𝑇𝑦𝑝𝑒
𝑙𝑒𝑓𝑡 = 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝑟𝑖𝑔𝑕𝑡 = 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 𝑖𝑠𝐸𝑚𝑝𝑡𝑦 ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 𝑒 = ∅? 1 ∶ 0
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 postOrderTraverse
𝐢𝐟 ≦𝑖𝑠𝐸𝑚𝑝𝑡𝑦 𝐭𝐡𝐞𝐧
𝑙𝑒𝑓𝑡 → postOrderTraverse;
𝑟𝑖𝑔𝑕𝑡 → postOrderTraverse;
do something
III. Cây
31
• Biểu diễn cây tổng quát
• Con đầu tiên (First Child)  left
• Em liền kề (Next Sibling)  right
A
C
H
D
E F G
B
A
C
H D
E
F
B
G
III. Cây
32
• Sắp xếp vun đống
• Có thể coi mảng là cây nhị phân đầy đủ (hoặc hoàn chỉnh)
• Đối với mảng 𝑎 𝓁..𝓇 = 33,44,11,66,55,22
– 𝑎[𝓁] là nút gốc
– 𝑎[𝒾] có các con 𝑎 𝒿 , 𝑎 𝒿 + 1 , 𝒿 = 2𝒾 − 𝓁 + 1
• Vun đống là thuật toán để cây có tính chất của đống
(heap – nút cha > nút con)
33
44 11
66 55 22
33
66 22
44 55 11
66
55 22
44 33 11
III. Cây
33
• Cây nhị phân tìm kiếm
• Tất cả các nút của cây con trái phải nhỏ hơn gốc và
nhỏ hơn tất cả các nút của cây con phải
• Sử dụng trong các danh sách thường xuyên phải xử
l{ các thao tác thêm, xóa dữ liệu
8
1 9
3
4
6
8
1 9
3
4
6
8
1 9
3
7
4
7
- 6+ 7
IV. Đồ thị
Khái niệm
Lưu trữ đồ thị
Duyệt đồ thị
Các ứng dụng
34
IV. Đồ thị
35
• Đồ thị (graph) được xác định bằng tập các đỉnh
(vertex) và tập các cung (edge) giữa các đỉnh
𝐺 = 𝑉, 𝐸
𝑒 = 𝑢, 𝑣 | 𝑢,𝑣∈𝑉;𝑒∈𝐸
IV. Đồ thị
36
• Phân loại
Graph
Undirected Directed
Vertex-
Labeled
Edge-
Labeled
a
d
b
e
c
Undirected graph
a
d
b
e
c
Directed graph
a
d
b
e
c
Edge-Labeled graph
6 km
12 km
15km
5km
IV. Đồ thị
37
• Danh sách các cung (Edge List)
𝐺 ∶ 𝐿𝑖𝑠𝑡 𝐨𝐟 𝐸𝑑𝑔𝑒
𝐸𝑑𝑔𝑒 𝑢, 𝑣 ∶ 𝐏𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝑉𝑒𝑟𝑡𝑒𝑥
a
d
b
e
c
aa ab be ca cd da de ec
a b c d e
IV. Đồ thị
38
• Ma trận lân cận kề (Adjacency Matrix)
𝐺 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝐸𝑑𝑔𝑒
𝐸𝑑𝑔𝑒 𝑢, 𝑣 = 𝐺 𝑢, 𝑣
a b c d e
a 1 1 0 0 0
b 0 0 0 0 1
c 1 0 0 0 1
d 1 0 0 0 1
e 0 0 1 0 0
a
d
b
e
c
IV. Đồ thị
39
• Danh sách lân cận kề (Adjacency List)
𝐺 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝐿𝑖𝑠𝑡 𝐨𝐟 𝑉𝑒𝑟𝑡𝑒𝑥
a
d
b
e
c
a a b
b e
c a d
d a e
e c
IV. Đồ thị
40
• Tìm theo chiều sâu (Depth-First Search)
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 𝐷𝐹𝑆 𝑣 ∶ 𝑉𝑒𝑟𝑡𝑒𝑥
𝐢𝐟 𝑣 is not marked 𝐭𝐡𝐞𝐧
mark 𝑣
𝐟𝐨𝐫𝐞𝐚𝐜𝐡 𝑣, 𝑤 ∈ 𝐸 𝐝𝐨
𝐢𝐟 𝑤 is not marked 𝐭𝐡𝐞𝐧 𝐷𝐹𝑆 𝑤
IV. Đồ thị
41
• Tìm theo chiều rộng (Breadth-First Search)
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 𝐵𝐹𝑆 𝑣 ∶ 𝑉𝑒𝑟𝑡𝑒𝑥
𝑞 ∶ 𝑄𝑢𝑒𝑢𝑒(𝑛) 𝐨𝐟 𝑉𝑒𝑟𝑡𝑒𝑥
mark 𝑣
𝑞. 𝐸𝑛𝑞𝑢𝑒𝑢𝑒(𝑣)
𝐰𝐡𝐢𝐥𝐞 ≦𝑞. 𝐼𝑠𝐸𝑚𝑝𝑡𝑦 𝐝𝐨
𝑢 ≔ 𝑞. 𝐷𝑒𝑞𝑢𝑒𝑢𝑒
𝐟𝐨𝐫𝐞𝐚𝐜𝐡 𝑢, 𝑤 ∈ 𝐸 𝐝𝐨
𝐢𝐟 𝑤 is not marked 𝐭𝐡𝐞𝐧
𝑚𝑎𝑟𝑘 𝑤
𝑞. 𝐸𝑛𝑞𝑢𝑒𝑢𝑒 𝑤
IV. Đồ thị
42
• Ví dụ
a db e
c f
g
DFS(a)  a, b, d, e, g, f, c
a
d
b e
c
f
g
BFS(a)  a, b, c, d, e, f, g
IV. Đồ thị
43
• Kiểm tra kết nối giữa hai đỉnh (Connectedness)
• Tìm đường đi ngắn nhất giữa hai đỉnh
• Tìm chi phí thấp nhất (Min Cose Spanning Tree)
• Sắp xếp topo (Topological Sorting)
V. Sắp xếp
Các thuật toán đơn giản
Sắp xếp nhanh
Sắp xếp vun đống
Thuật toán hòa nhập
44
V. Sắp xếp
45
• Thuật toán lựa chọn
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 SelectSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐟𝐨𝐫 𝒾 ≔ 𝓁 𝐭𝐨 𝓇 − 1 𝐝𝐨
𝑚 ≔ 𝒾
𝐟𝐨𝐫 𝒿 ≔ 𝒾 + 1 𝐭𝐨 𝓇 𝐝𝐨
𝐢𝐟 𝑎 𝒿 < 𝑎 𝑚 𝐭𝐡𝐞𝐧 𝑚 ≔ 𝒿
𝐢𝐟 𝑚 ≠ 𝒾 𝐭𝐡𝐞𝐧 Swap 𝑎 𝒾 , 𝑎 𝑚
V. Sắp xếp
46
• Ví dụ - SelectSort
i m
a
1 2 3 4 5 6
33 44 11 66 55 22
1 1, 3 11 44 33 66 55 22
2 2, 3, 6 11 22 33 66 55 44
3 3 11 22 33 66 55 44
4 4, 5, 6 11 22 33 44 55 66
5 5 11 22 33 44 55 66
𝑇 =
6 × 6 − 1
2
= 15
V. Sắp xếp
47
• Thuật toán chèn
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 InsertSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐟𝐨𝐫 𝒾 ≔ 𝓁 + 1 𝐭𝐨 𝓇 𝐝𝐨
𝑒 ≔ 𝑎 𝒾
𝒿 ≔ 𝒾 − 1
𝐰𝐡𝐢𝐥𝐞 𝒿 ≥ 𝓁 ∧ 𝑎 𝒿 < 𝑒 𝐝𝐨 𝑎 𝒿 + 1 ≔ 𝑎 𝒿 ; 𝒿−−
𝑎 𝒿 + 1 ≔ 𝑒
V. Sắp xếp
48
• Ví dụ - InsertSort
i e j
a
1 2 3 4 5 6
33 44 11 66 55 22
2 44 1 33 44
3 11 2 → 0 11 33 44
4 66 3 11 33 44 66
5 55 4 → 3 11 33 44 55 66
6 22 5 → 1 11 22 33 44 55 66
𝑇 = 11
V. Sắp xếp
49
• Thuật toán nổi bọt
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 BubbleSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐟𝐨𝐫 𝒾 ≔ 𝓁 𝐭𝐨 𝓇 − 1 𝐝𝐨
𝑐 = 0 ∶ 0, 1
𝐟𝐨𝐫 𝒿 ≔ 𝓇 𝐝𝐨𝐰𝐧𝐭𝐨 𝒾 + 1 𝐝𝐨
𝐢𝐟 𝑎 𝒿 − 1 < 𝑎 𝒿 𝐭𝐡𝐞𝐧
Swap 𝑎 𝒿 − 1 , 𝑎 𝒿 ; 𝑐 ≔ 1
𝐢𝐟 𝑐 = 0 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧
V. Sắp xếp
50
• Ví dụ - BubbleSort
i j và j – 1
a
1 2 3 4 5 6
33 44 11 66 55 22
1 6↔5↔4, 3↔2↔1 11 33 44 22 66 55
2 6↔5, 4↔3↔2 11 22 33 44 55 66
3 6, 5, 4, 3
𝑇 = 12
V. Sắp xếp
51
• Chia đôi mảng sao cho
𝑎 𝓁, … , 𝑎 𝒿−1 < 𝑎 𝒿 < 𝑎 𝒿+1, … , 𝑎 𝓇
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 QuickSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝓁, 𝓇 ∶ ℕ
𝐢𝐟 𝓁 < 𝓇 𝐭𝐡𝐞𝐧
𝒿 ≔ Part 𝑎, 𝓁, 𝓇
QuickSort 𝑎, 𝓁, 𝒿 − 1
QuickSort 𝑎, 𝒿 + 1, 𝓇
V. Sắp xếp
52
• Thuật toán phân đoạn
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Part 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝓁, 𝓇 ∶ ℕ
𝒾 ≔ 𝓁 + 1; 𝒿 ≔ 𝓇
𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝒿 𝐝𝐨
𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝒿 ∧ 𝑎 𝒾 < 𝑎 𝓁 𝐝𝐨 𝒾++
𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝒿 ∧ 𝒾 = 𝒿 ∨ 𝑎 𝒿 > 𝑎 𝓁 𝐝𝐨 𝒿−−
𝐢𝐟 𝒾 < 𝒿 𝐭𝐡𝐞𝐧
Swap 𝑎[𝒾], 𝑎[𝒿]
Swap 𝑎[𝓁], 𝑎[𝒿]
𝐫𝐞𝐭𝐮𝐫𝐧 𝒿
V. Sắp xếp
53
• Ví dụ - Part
i j
a
1 2 3 4 5 6
33 44 11 66 55 22
2 6 22 44
3 → 4 3 ← 5 11 22 33 66 55 44
𝑇 = 5
V. Sắp xếp
54
• Sắp xếp 𝑎1, … , 𝑎 𝑛 sao cho
𝑎 𝒾 > 𝑎2𝒾, 𝑎2𝒾+1 ∀ 𝒾 ∈ 1,
𝑛
2
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 HeapSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲[1. . 𝑛] 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐟𝐨𝐫 𝒾 = 𝑛/2 𝐝𝐨𝐰𝐧𝐭𝐨 1 𝐝𝐨 BuildHeap 𝑎, 𝒾
𝐰𝐡𝐢𝐥𝐞 𝑛 > 1 𝐝𝐨 // sorting
Swap 𝑎[1], 𝑎[𝑛] ; 𝑛−−
𝐰𝐡𝐢𝐥𝐞 𝑛 > 1 𝐭𝐡𝐞𝐧 BuildHeap 𝑎, 1
V. Sắp xếp
55
• Thuật toán vun đống
𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 BuildHeap 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝒾 ∶ ℕ
𝑒 ≔ 𝑎 𝒾 ; 𝒿 ≔ 𝒾 × 2
𝐰𝐡𝐢𝐥𝐞 𝒿 ≤ 𝑛 𝐝𝐨
𝐢𝐟 𝒿 + 1 ≤ 𝑛 ∧ 𝑎 𝒿 < 𝑎 𝒿 + 1 𝐭𝐡𝐞𝐧 𝒿++
𝐢𝐟 𝑎 𝒿 > 𝑒 𝐭𝐡𝐞𝐧
𝑎 𝒾 ≔ 𝑎 𝒿
𝒾 ≔ 𝒿; 𝒿 ≔ 𝒾 × 2
𝐞𝐥𝐬𝐞 𝐞𝐱𝐢𝐭 𝐰𝐡𝐢𝐥𝐞
𝑎 𝒾 ≔ 𝑒
V. Sắp xếp
56
• Ví dụ – BuildHeap 𝑎, 𝑖|𝑖=3;2;1
n i e j
a
1 2 3 4 5 6
33 44 11 66 55 22
6 3, 6 11 6, 12 22 11
6 2, 4 44 4, 8 66 44 55
6 1, 5 33 2, 4+1, 10 66 55 22 44 33 11
33
44 11
66 55 22
33
66 22
44 55 11

66
55 22
44 33 11

V. Sắp xếp
57
• Ví dụ – sorting
11
55 22
44 33
55
44 22
11 33

33
44 22
11
44
33 22
11


11
33 22
33
11 22
22
11 11
VI. Tìm kiếm
Tìm kiếm tuần tự
Tìm kiếm chia đôi
Cây nhị phân tìm kiếm
58
VI. Tìm kiếm
59
• Tìm kiếm tuần tự (Linear Search)
• Áp dụng cho các mảng chưa sắp xếp
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 LinearSearch 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝑥 ∶ 𝑇𝑦𝑝𝑒 ∶ ℕ
𝒾 ≔ 1
𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝑛 ∧ 𝑎 𝒾 ≠ 𝑥 𝐝𝐨 𝒾++
𝐢𝐟 𝒾 ≤ 𝑛 𝐫𝐞𝐭𝐮𝐫𝐧 𝒾
𝐞𝐥𝐬𝐞 𝐫𝐞𝐭𝐮𝐫𝐧 0
VI. Tìm kiếm
60
• Tìm kiếm chia đôi (Binary Search)
• Áp dụng cho mảng đã được sắp xếp tăng dần
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 BinarySearch 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝑥 ∶ 𝑇𝑦𝑝𝑒 ∶ ℕ
𝓁 ≔ 1; 𝓇 ≔ 𝑛
𝐰𝐡𝐢𝐥𝐞 𝓁 ≤ 𝓇 𝐝𝐨
𝑚 ≔
𝓁+𝓇
2
𝐢𝐟 𝑎 𝑚 = 𝑥 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 𝑚
𝐢𝐟 𝑎 𝑚 > 𝑥
𝐭𝐡𝐞𝐧 𝓇 ≔ 𝑚 − 1
𝐞𝐥𝐬𝐞 𝓁 ≔ 𝑚 + 1
𝐫𝐞𝐭𝐮𝐫𝐧 0
VI. Tìm kiếm
61
• Mô hình kế thừa
A
B
D E
C
NullBST
InfoBST
BST
VI. Tìm kiếm
62
• Định nghĩa 𝐜𝐥𝐚𝐬𝐬 𝐵𝑆𝑇 và 𝐜𝐥𝐚𝐬𝐬 𝑁𝑢𝑙𝑙𝐵𝑆𝑇
𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐩𝐨𝐢𝐭𝐞𝐫 𝐭𝐨 𝐵𝑆𝑇
𝐜𝐥𝐚𝐬𝐬 𝐵𝑆𝑇 𝓁, 𝓇 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑙𝑒𝑓𝑡 = 𝓁: 𝐻𝑎𝑛𝑑𝑙𝑒
𝑟𝑖𝑔𝑕𝑡 = 𝓇 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 isEmpty ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 1
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 search 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 0
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 insert 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 remove 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 findMax ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 0
𝐜𝐥𝐚𝐬𝐬 𝑁𝑢𝑙𝑙𝐵𝑆𝑇 𝐢𝐧𝐡𝐞𝐫𝐢𝐭 𝐵𝑆𝑇 𝐨𝐟 𝑇𝑦𝑝𝑒
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 insert 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐫𝐞𝐭𝐮𝐫𝐧 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝐼𝑛𝑓𝑜𝐵𝑆𝑇(𝑒, 𝐭𝐡𝐢𝐬, 𝐭𝐡𝐢𝐬)
VI. Tìm kiếm
63
• Định nghĩa 𝐜𝐥𝐚𝐬𝐬 𝐼𝑛𝑓𝑜𝐵𝑆𝑇
𝐜𝐥𝐚𝐬𝐬 𝐼𝑛𝑓𝑜𝐵𝑆𝑇 𝑒 ∶ 𝑇𝑦𝑝𝑒; 𝓁, 𝓇 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐢𝐧𝐡𝐞𝐫𝐢𝐭 𝐵𝑆𝑇 𝐨𝐟 𝑇𝑦𝑝𝑒
𝑖𝑛𝑓𝑜 = 𝑒 ∶ 𝑇𝑦𝑝𝑒
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 isEmpty ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 0
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 search 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 0, 1
𝐢𝐟 𝑒 = 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 1
𝐞𝐥𝐬𝐞 𝐢𝐟 𝑒 < 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 𝑙𝑒𝑓𝑡 → search 𝑒
𝐞𝐥𝐬𝐞 𝐫𝐞𝐭𝐮𝐫𝐧 𝑟𝑖𝑔𝑕𝑡 → search 𝑒
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 insert 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐢𝐟 𝑒 < 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑙𝑒𝑓𝑡 = 𝑙𝑒𝑓𝑡 → 𝑖𝑛𝑠𝑒𝑟𝑡(𝑒)
𝐞𝐥𝐬𝐞 𝐢𝐟 𝑒 > 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑟𝑖𝑔𝑕𝑡 = 𝑟𝑖𝑔𝑕𝑡 → 𝑖𝑛𝑠𝑒𝑟𝑡(𝑒)
𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬
VI. Tìm kiếm
64
• Định nghĩa 𝐜𝐥𝐚𝐬𝐬 𝐼𝑛𝑓𝑜𝐵𝑆𝑇
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 remove 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐢𝐟 𝑒 < 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑙𝑒𝑓𝑡 = 𝑙𝑒𝑓𝑡 → remove(𝑒)
𝐞𝐥𝐬𝐞 𝐢𝐟 𝑒 > 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑟𝑖𝑔𝑕𝑡 = 𝑟𝑖𝑔𝑕𝑡 → remove(𝑒)
𝐞𝐥𝐬𝐞 𝑟 ≔ 𝑙𝑒𝑓𝑡 → findMax
𝐢𝐟 𝑟 = 0 𝐭𝐡𝐞𝐧 𝑟 ≔ 𝑟𝑖𝑔𝑕𝑡
𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝐭𝐡𝐢𝐬
𝐫𝐞𝐭𝐮𝐫𝐧 𝑟
𝐞𝐥𝐬𝐞 𝑖𝑛𝑓𝑜 ≔ 𝑟 → 𝑖𝑛𝑓𝑜
𝑙𝑒𝑓𝑡 ≔ 𝑙𝑒𝑓𝑡 → remove 𝑖𝑛𝑓𝑜
𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 findMax ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐫𝐞𝐭𝐮𝐫𝐧 𝑟𝑖𝑔𝑕𝑡 → 𝑖𝑠𝐸𝑚𝑝𝑡𝑦? 𝐭𝐡𝐢𝐬 ∶ 𝑟𝑖𝑔𝑕𝑡 → findMax
𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 findMin ∶ 𝐻𝑎𝑛𝑑𝑙𝑒
𝐫𝐞𝐭𝐮𝐫𝐧 𝑙𝑒𝑓𝑡 → 𝑖𝑠𝐸𝑚𝑝𝑡𝑦? 𝐭𝐡𝐢𝐬 ∶ 𝑙𝑒𝑓𝑡 → findMin

More Related Content

What's hot

chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boolekikihoho
 
Chuyên đề Toán Tích phân - Megabook.vn
Chuyên đề Toán Tích phân - Megabook.vnChuyên đề Toán Tích phân - Megabook.vn
Chuyên đề Toán Tích phân - Megabook.vnMegabook
 
Tai lieu luyen thi mon toan de thi dh mon toan khoi a - nam 2008
Tai lieu luyen thi mon toan   de thi dh mon toan khoi a - nam 2008Tai lieu luyen thi mon toan   de thi dh mon toan khoi a - nam 2008
Tai lieu luyen thi mon toan de thi dh mon toan khoi a - nam 2008Trungtâmluyệnthi Qsc
 
C2 tim kiem
C2 tim kiemC2 tim kiem
C2 tim kiemhiep0109
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excelltrioby2
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânHajunior9x
 
Chuong 03 cac cong logic va dai so boolean
Chuong 03 cac cong logic va dai so booleanChuong 03 cac cong logic va dai so boolean
Chuong 03 cac cong logic va dai so booleanAnh Ngoc Phan
 
chuyen de tich phan on thi dai hoc
chuyen de tich phan on thi dai hocchuyen de tich phan on thi dai hoc
chuyen de tich phan on thi dai hocHoàng Thái Việt
 
Bai tap theo tung chuyen de on thi dai hoc 2012 2013
Bai tap theo tung chuyen de on thi dai hoc 2012 2013Bai tap theo tung chuyen de on thi dai hoc 2012 2013
Bai tap theo tung chuyen de on thi dai hoc 2012 2013Thanh Bình Hoàng
 
Phuong phap tich phan
Phuong phap tich phanPhuong phap tich phan
Phuong phap tich phanphongmathbmt
 
Chuyên đề luyện thi đại học môn toán năm 2014
Chuyên đề luyện thi đại học môn toán năm 2014Chuyên đề luyện thi đại học môn toán năm 2014
Chuyên đề luyện thi đại học môn toán năm 2014Huynh ICT
 
Chuyên đề luyện thi đạo học
Chuyên đề luyện thi đạo họcChuyên đề luyện thi đạo học
Chuyên đề luyện thi đạo họcTít Thiện
 

What's hot (19)

02 dinh thuc
02 dinh thuc02 dinh thuc
02 dinh thuc
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boole
 
Chuyên đề Toán Tích phân - Megabook.vn
Chuyên đề Toán Tích phân - Megabook.vnChuyên đề Toán Tích phân - Megabook.vn
Chuyên đề Toán Tích phân - Megabook.vn
 
Tai lieu luyen thi mon toan de thi dh mon toan khoi a - nam 2008
Tai lieu luyen thi mon toan   de thi dh mon toan khoi a - nam 2008Tai lieu luyen thi mon toan   de thi dh mon toan khoi a - nam 2008
Tai lieu luyen thi mon toan de thi dh mon toan khoi a - nam 2008
 
Bt chuong 4,5,6
Bt chuong 4,5,6Bt chuong 4,5,6
Bt chuong 4,5,6
 
C2 tim kiem
C2 tim kiemC2 tim kiem
C2 tim kiem
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excell
 
Bt chương 2
Bt chương 2Bt chương 2
Bt chương 2
 
CHUYÊN ĐỀ: LTĐH TOÁN 2014
CHUYÊN ĐỀ: LTĐH TOÁN 2014CHUYÊN ĐỀ: LTĐH TOÁN 2014
CHUYÊN ĐỀ: LTĐH TOÁN 2014
 
Các thủ thuật casio
Các thủ thuật casioCác thủ thuật casio
Các thủ thuật casio
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
 
Chuong 03 cac cong logic va dai so boolean
Chuong 03 cac cong logic va dai so booleanChuong 03 cac cong logic va dai so boolean
Chuong 03 cac cong logic va dai so boolean
 
chuyen de tich phan on thi dai hoc
chuyen de tich phan on thi dai hocchuyen de tich phan on thi dai hoc
chuyen de tich phan on thi dai hoc
 
Bai tap theo tung chuyen de on thi dai hoc 2012 2013
Bai tap theo tung chuyen de on thi dai hoc 2012 2013Bai tap theo tung chuyen de on thi dai hoc 2012 2013
Bai tap theo tung chuyen de on thi dai hoc 2012 2013
 
Phuong phap tich phan
Phuong phap tich phanPhuong phap tich phan
Phuong phap tich phan
 
Nguyen ham
Nguyen hamNguyen ham
Nguyen ham
 
Chuyên đề luyện thi đại học môn toán năm 2014
Chuyên đề luyện thi đại học môn toán năm 2014Chuyên đề luyện thi đại học môn toán năm 2014
Chuyên đề luyện thi đại học môn toán năm 2014
 
Bt chương 1
Bt chương 1Bt chương 1
Bt chương 1
 
Chuyên đề luyện thi đạo học
Chuyên đề luyện thi đạo họcChuyên đề luyện thi đạo học
Chuyên đề luyện thi đạo học
 

Similar to Cơ sở dữ liệu và giải thuật Vũ Song Tùng

Dự đoán liên kết trong đồ thị tri thức
Dự đoán liên kết trong đồ thị tri thứcDự đoán liên kết trong đồ thị tri thức
Dự đoán liên kết trong đồ thị tri thứcThanh Minh Hoang
 
CTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfCTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfLmTrn286060
 
Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepNguyễn Ngọc Hà
 
Tìm kiếm và sắp nội
Tìm kiếm và sắp nộiTìm kiếm và sắp nội
Tìm kiếm và sắp nộikikihoho
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Hồ Lợi
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátTráng Hà Viết
 
Chuyen de tich phan cuc hay
Chuyen de tich phan cuc hayChuyen de tich phan cuc hay
Chuyen de tich phan cuc hayOanh MJ
 
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108mcbooksjsc
 
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116mcbooksjsc
 
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104mcbooksjsc
 
Bài tập CTDL và GT 4
Bài tập CTDL và GT 4Bài tập CTDL và GT 4
Bài tập CTDL và GT 4Hồ Lợi
 
Cẩm nang kết cấu xây dựng
Cẩm nang kết cấu xây dựngCẩm nang kết cấu xây dựng
Cẩm nang kết cấu xây dựngAn Nam Education
 

Similar to Cơ sở dữ liệu và giải thuật Vũ Song Tùng (20)

Dự đoán liên kết trong đồ thị tri thức
Dự đoán liên kết trong đồ thị tri thứcDự đoán liên kết trong đồ thị tri thức
Dự đoán liên kết trong đồ thị tri thức
 
CTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfCTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdf
 
Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xep
 
Gt12cb 50
Gt12cb 50Gt12cb 50
Gt12cb 50
 
Tìm kiếm và sắp nội
Tìm kiếm và sắp nộiTìm kiếm và sắp nội
Tìm kiếm và sắp nội
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13
 
Gt12cb 61
Gt12cb 61Gt12cb 61
Gt12cb 61
 
Toan roi rac.pptx
Toan roi rac.pptxToan roi rac.pptx
Toan roi rac.pptx
 
Emailing buoi 2 thuat toan
Emailing buoi 2   thuat toanEmailing buoi 2   thuat toan
Emailing buoi 2 thuat toan
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Chuyen de tich phan cuc hay
Chuyen de tich phan cuc hayChuyen de tich phan cuc hay
Chuyen de tich phan cuc hay
 
Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Gt de quy
Gt de quyGt de quy
Gt de quy
 
Baitap ktlt
Baitap ktltBaitap ktlt
Baitap ktlt
 
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 108
 
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 116
 
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104
Đề thi môn Toán THPT Quốc Gia năm 2017 mã đề 104
 
Đề thi Toán 104 chính thức THPT Quốc Gia 2017
Đề thi Toán 104 chính thức THPT Quốc Gia 2017Đề thi Toán 104 chính thức THPT Quốc Gia 2017
Đề thi Toán 104 chính thức THPT Quốc Gia 2017
 
Bài tập CTDL và GT 4
Bài tập CTDL và GT 4Bài tập CTDL và GT 4
Bài tập CTDL và GT 4
 
Cẩm nang kết cấu xây dựng
Cẩm nang kết cấu xây dựngCẩm nang kết cấu xây dựng
Cẩm nang kết cấu xây dựng
 

Cơ sở dữ liệu và giải thuật Vũ Song Tùng

  • 1. CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Vũ Song Tùng 1
  • 2. NỘI DUNG 2 Giới thiệu chung Danh sách tuyến tính Cây Đồ thị Sắp xếp Tìm kiếm
  • 3. I. Giới thiệu chung 3 Các kỹ thuật lập trình Ngôn ngữ giả lập trình Sơ lược về CTDL và giải thuật
  • 4. I. Giới thiệu chung 4 • Lập trình hàm – Chia các giai đoạn của chương trình vào các hàm – Thể hiện những đoạn mã tương tự trong một hàm – Ưu điểm • Dễ quản lý • Tiết kiệm dung lượng chương trình
  • 5. I. Giới thiệu chung 5 • Lập trình hướng đối tượng – Trừu tượng hóa các thành phần của chương trình – Đặc điểm • Tính đóng gói – các thuộc tính của một thành phần và các hàm xử lý các thuộc tính đó được định nghĩa trong cùng một khối • Tính đa hình – cho phép tạo ra nhiều hình thái của một loại thành phần • Tính kế thừa – cho phép sử dụng lại các định nghĩa đã có của một thành phần để tạo ra một thành phần mới
  • 6. I. Giới thiệu chung 6 • Các quy ước Các kiểu dữ liệu Mô tả ℝ, ℕ, ℤ Tập các số thực, nguyên và nguyên dương Type Kiểu bất kz 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 Mảng chứa 𝓇 – 𝓁 + 1 phần tử kiểu T 𝐒𝐞𝐪𝐮𝐞𝐧𝐜𝐞 𝐨𝐟 𝑇𝑦𝑝𝑒 Dãy 𝐒𝐞𝐭 𝐨𝐟 𝑇𝑦𝑝𝑒 Tập hợp
  • 7. I. Giới thiệu chung 7 • Các quy ước Toán tử Mô tả ≔ Gán =, ≠, <, >, ≤, ≥ So sánh ∧, ∨, ≦ And, Or, Not logic 𝑎++/𝑎−− 𝑎 ≔ 𝑎 ± 1 𝑥 , 𝑥 Làm tròn xuống và lên 𝐶? 𝐼 ∶ 𝐽 Nếu C đúng thực hiện I, C sai thực hiện J 𝑥1, 𝑥2, … , 𝑥 𝑛 Dãy các phần tử 𝑥1, 𝑥2, … , 𝑥 𝑛 Tập hợp các phần tử ; Ngắt các biểu thức
  • 8. I. Giới thiệu chung 8 • Biểu thức Loại Cú pháp Khai báo biến 𝑥 = 𝑣 ∶ 𝑇𝑦𝑝𝑒 Điều kiện 𝐢𝐟 𝐶 𝐭𝐡𝐞𝐧 𝐼 𝐢𝐟 𝐶 𝐭𝐡𝐞𝐧 𝐼 𝐞𝐥𝐬𝐞 𝐽 Lặp xác định 𝐟𝐨𝐫 𝑖 ≔ 𝑎 𝐭𝐨 𝑏 𝐝𝐨 𝐼 𝐟𝐨𝐫𝐞𝐚𝐜𝐡 𝑎 ∈ 𝑠 𝐝𝐨 𝐼 Lặp không xác định 𝐰𝐡𝐢𝐥𝐞 𝐶 𝐝𝐨 𝐼 𝐫𝐞𝐩𝐞𝐚𝐭 𝐼 𝐮𝐧𝐭𝐢𝐥 𝐶
  • 9. I. Giới thiệu chung 9 • Biểu thức Loại Cú pháp Tạo con trỏ 𝐩𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝑇𝑦𝑝𝑒 Cấp phát bộ nhớ 𝑝 ≔ 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝑇𝑦𝑝𝑒 𝑝 ≔ 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 Giải phóng bộ nhớ 𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝑝 Lấy địa chỉ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑝 Lấy nội dung trong con trỏ ∗ 𝑝 Truy cập thành viên của con trỏ 𝑝 → 𝑐
  • 10. I. Giới thiệu chung 10 • Hàm và thủ tục 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Power 𝑥 ∶ ℝ; 𝑛 ∶ ℤ; 𝐯𝐚𝐫 𝑟 ∶ ℝ 𝑟 = 1 ∶ ℝ 𝐟𝐨𝐫 𝑖 ≔ 1 𝐭𝐨 𝑛 𝐝𝐨 𝑟 ≔ 𝑟 ∗ 𝑥 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Power 𝑥 ∶ ℝ; 𝑛 ∶ ℤ ∶ ℝ 𝐢𝐟 𝑛 = 0 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 1 𝐞𝐥𝐬𝐞 𝐫𝐞𝐭𝐮𝐫𝐧 𝑥 ∗ Power 𝑥, 𝑛 − 1
  • 11. I. Giới thiệu chung 11 • Hướng đối tượng 𝐜𝐥𝐚𝐬𝐬 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 𝑥, 𝑦 ∶ ℝ 𝑟 = 𝑥 ∶ ℝ 𝑖 = 𝑦 ∶ ℝ 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 modul ∶ ℝ 𝐫𝐞𝐭𝐮𝐫𝐧 𝑟2 + 𝑖2 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 add 𝑐 ∶ 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 ∶ 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 𝐫𝐞𝐭𝐮𝐫𝐧 𝐶𝑜𝑚𝑝𝑙𝑒𝑥 𝑟 + 𝑐. 𝑟, 𝑖 + 𝑐. 𝑖
  • 12. I. Giới thiệu chung 12 • Cấu trúc mảng • Tập hợp các phần tử cùng kiểu – được sắp xếp liên tiếp trong bộ nhớ – được xác định vị trí bằng chỉ số • Thường dùng để lưu trữ các danh sách tuyến tính có kích thước cố định 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑐 ≔ 𝐬𝐢𝐳𝐞 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐿0 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑎[𝓁] 𝐿 𝒾 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑎[𝒾]  𝐿 𝒾 = 𝐿0 + 𝒾 − 𝓁 𝑐
  • 13. I. Giới thiệu chung 13 • Cấu trúc liên kết • Tập hợp các phần tử (item) lưu trữ dữ liệu (info) và địa chỉ liên kết (link) đến phần tử khác • Dùng để lưu trữ danh sách động hoặc các cấu trúc phi tuyến 𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐩𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝐼𝑡𝑒𝑚 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝑖 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑖𝑛𝑓𝑜 ∶ 𝑇𝑦𝑝𝑒 𝑙𝑖𝑛𝑘 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 … 𝑎 ≔ 𝐼𝑡𝑒𝑚 𝑥 𝑏 ≔ 𝐼𝑡𝑒𝑚 𝑦 𝑎. 𝑙𝑖𝑛𝑘 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑏 x y x y
  • 14. I. Giới thiệu chung 14 • Giải thuật đệ quy – Giải thuật gọi lại chính nó, gồm 2 thành phần: • Điều kiện dừng đệ quy • Gọi đệ quy – Áp dụng giải thuật đệ quy khiến cho thuật toán trở nên mạch lạc
  • 15. I. Giới thiệu chung 15 • Độ phức tạp của thuật toán O(…) – Số lượng trung bình (Tcp) của phép toán phức tạp nhất trong thuật toán – Độ phức tạp của các thuật toán sắp xếp và tìm kiếm trong dãy n phần tử: Thuật toán Độ phức tạp SelectSort O(n2) InsertSort O(n2) BubbleSort O(n2) QuickSort O(nlog2n) HeapSort O(nlog2n) LinearSearch O(n) BinarySearch O(log2n)
  • 16. II. Danh sách tuyến tính 16 Ngăn xếp Hàng đợi Danh sách liên kết
  • 17. II. Danh sách tuyến tính 17 • Dãy các phần tử được thêm vào (push) và lấy ra (pop) tại cùng một đầu của dãy 𝑆 = 𝑒1, 𝑒2, … , 𝑒𝑡−1, 𝑒𝑡 𝑒 ↦ 𝑆 ⇒ 𝑆 ≔ 𝑒1, 𝑒2, … , 𝑒𝑡, 𝑒𝑡+1 𝑒 ↤ 𝑆 ⇒ 𝑒, 𝑆 ≔ 𝑒𝑡, 𝑒1, 𝑒2, … , 𝑒𝑡−1
  • 18. II. Danh sách tuyến tính 18 • Định nghĩa ngăn xếp bằng mảng 𝐜𝐥𝐚𝐬𝐬 Stack 𝑛 ∶ ℕ 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑡 = 0 ∶ ℕ 𝑠 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Push 𝑒 ∶ Type 𝑡++; 𝑠 𝑡 ≔ 𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Pop ∶ Type 𝑡′ = 𝑡; 𝑡−− 𝐫𝐞𝐭𝐮𝐫𝐧 𝑠 𝑡′ 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 IsEmpty ∶ 0,1 𝐫𝐞𝐭𝐮𝐫𝐧 𝑡 < 1? 1 ∶ 0
  • 19. II. Danh sách tuyến tính 19 • Dãy các phần tử được thêm vào (enqueue) và lấy ra (dequeue) tại hai đầu khác nhau của dãy 𝑄 = 𝑒𝑓, 𝑒𝑓+1, … , 𝑒 𝑟 𝑒 ↦ 𝑄 ⇒ 𝑄 ≔ 𝑒𝑓, 𝑒𝑓+1, … , 𝑒 𝑟, 𝑒 𝑟+1 𝑒 ↤ 𝑄 ⇒ 𝑒, 𝑄 ≔ 𝑒𝑓, 𝑒𝑓+1, … , 𝑒 𝑟
  • 20. II. Danh sách tuyến tính 20 • Định nghĩa hàng đợi bằng mảng 𝐜𝐥𝐚𝐬𝐬 Queue 𝑛 ∶ ℕ 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑓 = 𝓇 = 0 ∶ ℕ 𝑐 = 0 ∶ ℕ 𝑞 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Inc 𝐯𝐚𝐫 𝒾 ∶ ℕ 𝒾 = 𝑛? 𝒾 ≔ 1 ∶ 𝒾++ 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Enqueue 𝑒 ∶ Type 𝑐 = 0? 𝑓 ≔ 𝓇 ≔ 1: Inc 𝓇 ; 𝑞 𝓇 ≔ 𝑒; 𝑐++ 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Dequeue ∶ Type 𝑓′ = 𝑓; 𝑐 = 1? 𝑓 ≔ 𝓇 ≔ 0 ∶ Inc 𝑓 ; 𝑐−− 𝐫𝐞𝐭𝐮𝐫𝐧 𝑞 𝑓′ 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Count ∶ ℕ; 𝐫𝐞𝐭𝐮𝐫𝐧 𝑐
  • 21. II. Danh sách tuyến tính 21 • Danh sách liên kết 2 chiều • Dãy các phần tử liên kết với phần tử phía sau (next) và phía trước (prev) trong dãy 𝐿 = 𝑓𝑖𝑟𝑠𝑡, … , 𝑝, 𝑞, … , 𝑙𝑎𝑠𝑡 𝑝 → 𝑛𝑒𝑥𝑡 = 𝑞 𝑞 → 𝑝𝑟𝑒𝑣 = 𝑝
  • 22. II. Danh sách tuyến tính 22 • Mô hình Danh sách rỗng 𝑕. 𝑛𝑒𝑥𝑡 – phần tử đầu danh sách 𝑕. 𝑝𝑟𝑒𝑣 – phần tử cuối danh sách 𝑕 … … 𝑕
  • 23. II. Danh sách tuyến tính 23 • Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝑖 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑖𝑛𝑓𝑜 = 𝑖 ∶ 𝑇𝑦𝑝𝑒 𝑛𝑒𝑥𝑡 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝑝𝑟𝑒𝑣 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 insertAfter 𝑝 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝑝 → 𝑛𝑒𝑥𝑡 ≔ 𝑛𝑒𝑥𝑡 𝑛𝑒𝑥𝑡 → 𝑝𝑟𝑒𝑣 ≔ 𝑝 𝑛𝑒𝑥𝑡 ≔ 𝑝 𝑝 → 𝑝𝑟𝑒𝑣 ≔ 𝐭𝐡𝐢𝐬
  • 24. II. Danh sách tuyến tính 24 • Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 remove 𝑝 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 p → 𝑝𝑟𝑒𝑣 → 𝑛𝑒𝑥𝑡 ≔ 𝑝 → 𝑛𝑒𝑥𝑡 p → 𝑛𝑒𝑥𝑡 → 𝑝𝑟𝑒𝑣 ≔ 𝑝 → 𝑝𝑟𝑒𝑣 𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝑝 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 makeEmpty 𝑝 ≔ 𝑛𝑒𝑥𝑡 𝐰𝐡𝐢𝐥𝐞 𝑝 ≠ 𝐭𝐡𝐢𝐬 𝑛𝑒𝑥𝑡 ≔ 𝑝 → 𝑛𝑒𝑥𝑡 𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝑝 𝑝 ≔ 𝑛𝑒𝑥𝑡 𝑝𝑟𝑒𝑣 ≔ 𝐭𝐡𝐢𝐬
  • 25. II. Danh sách tuyến tính 25 • Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐿𝑖𝑠𝑡 𝐜𝐥𝐚𝐬𝐬 𝐿𝑖𝑠𝑡 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑕 ∅ ∶ 𝐼𝑡𝑒𝑚 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 newItem 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝐼𝑡𝑒𝑚 𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 pushBegin 𝑒 ∶ 𝑇𝑦𝑝𝑒 𝑕. insertAfter newItem 𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 pushBegin 𝑒 ∶ 𝑇𝑦𝑝𝑒 𝑕. 𝑝𝑟𝑒𝑣 → insertAfter newItem 𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 popBegin 𝑝 ≔ 𝑕. 𝑛𝑒𝑥𝑡; 𝑕. remove 𝑝 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 popEnd 𝑝 ≔ 𝑕. 𝑝𝑟𝑒𝑣; 𝑕. remove 𝑝 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 removeAll 𝑕. makeEmpty
  • 26. III. Cây 26 Các khái niệm Cây nhị phân Một vài ứng dụng
  • 27. III. Cây 27 𝑇 ∶ 𝑇1, 𝑇2, … , 𝑇𝑛 | 𝑇 𝑖−𝑠𝑢𝑏𝑡𝑟𝑒𝑒 A C H D E F G B Các khái niệm Gốc A Cành B, C, D, G Lá C, E, F, H Cấp 3 Chiều cao 4 Mức 0 A Mức 1 B, C, D Mức 2 E, F, G Mức 3 H
  • 28. III. Cây 28 𝑇 ∶ 𝑇𝑙𝑒𝑓𝑡, 𝑇𝑟𝑖𝑔𝑕𝑡 A D B C Cây lệch phải A D B C Cây zíc-zắc A C FD E B Cây gần đầy A C FD E B Cây đầy đủ A C F GD E B Cây ho{n chỉnh
  • 29. III. Cây 29 • Mô hình lưu trữ • Mỗi nút trên cây được coi là một cây con gồm một trường chứa dữ liệu (info) và hai địa chỉ liên kết với cây con trái (left) và phải (right) A B D E C Tree
  • 30. III. Cây 30 • Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐏𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝐜𝐥𝐚𝐬𝐬 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝑖 ∶ 𝑇𝑦𝑝𝑒; 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑒 = 𝑖 ∶ 𝑇𝑦𝑝𝑒 𝑙𝑒𝑓𝑡 = 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝑟𝑖𝑔𝑕𝑡 = 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 𝑖𝑠𝐸𝑚𝑝𝑡𝑦 ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 𝑒 = ∅? 1 ∶ 0 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 postOrderTraverse 𝐢𝐟 ≦𝑖𝑠𝐸𝑚𝑝𝑡𝑦 𝐭𝐡𝐞𝐧 𝑙𝑒𝑓𝑡 → postOrderTraverse; 𝑟𝑖𝑔𝑕𝑡 → postOrderTraverse; do something
  • 31. III. Cây 31 • Biểu diễn cây tổng quát • Con đầu tiên (First Child)  left • Em liền kề (Next Sibling)  right A C H D E F G B A C H D E F B G
  • 32. III. Cây 32 • Sắp xếp vun đống • Có thể coi mảng là cây nhị phân đầy đủ (hoặc hoàn chỉnh) • Đối với mảng 𝑎 𝓁..𝓇 = 33,44,11,66,55,22 – 𝑎[𝓁] là nút gốc – 𝑎[𝒾] có các con 𝑎 𝒿 , 𝑎 𝒿 + 1 , 𝒿 = 2𝒾 − 𝓁 + 1 • Vun đống là thuật toán để cây có tính chất của đống (heap – nút cha > nút con) 33 44 11 66 55 22 33 66 22 44 55 11 66 55 22 44 33 11
  • 33. III. Cây 33 • Cây nhị phân tìm kiếm • Tất cả các nút của cây con trái phải nhỏ hơn gốc và nhỏ hơn tất cả các nút của cây con phải • Sử dụng trong các danh sách thường xuyên phải xử l{ các thao tác thêm, xóa dữ liệu 8 1 9 3 4 6 8 1 9 3 4 6 8 1 9 3 7 4 7 - 6+ 7
  • 34. IV. Đồ thị Khái niệm Lưu trữ đồ thị Duyệt đồ thị Các ứng dụng 34
  • 35. IV. Đồ thị 35 • Đồ thị (graph) được xác định bằng tập các đỉnh (vertex) và tập các cung (edge) giữa các đỉnh 𝐺 = 𝑉, 𝐸 𝑒 = 𝑢, 𝑣 | 𝑢,𝑣∈𝑉;𝑒∈𝐸
  • 36. IV. Đồ thị 36 • Phân loại Graph Undirected Directed Vertex- Labeled Edge- Labeled a d b e c Undirected graph a d b e c Directed graph a d b e c Edge-Labeled graph 6 km 12 km 15km 5km
  • 37. IV. Đồ thị 37 • Danh sách các cung (Edge List) 𝐺 ∶ 𝐿𝑖𝑠𝑡 𝐨𝐟 𝐸𝑑𝑔𝑒 𝐸𝑑𝑔𝑒 𝑢, 𝑣 ∶ 𝐏𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝑉𝑒𝑟𝑡𝑒𝑥 a d b e c aa ab be ca cd da de ec a b c d e
  • 38. IV. Đồ thị 38 • Ma trận lân cận kề (Adjacency Matrix) 𝐺 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝐸𝑑𝑔𝑒 𝐸𝑑𝑔𝑒 𝑢, 𝑣 = 𝐺 𝑢, 𝑣 a b c d e a 1 1 0 0 0 b 0 0 0 0 1 c 1 0 0 0 1 d 1 0 0 0 1 e 0 0 1 0 0 a d b e c
  • 39. IV. Đồ thị 39 • Danh sách lân cận kề (Adjacency List) 𝐺 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝐿𝑖𝑠𝑡 𝐨𝐟 𝑉𝑒𝑟𝑡𝑒𝑥 a d b e c a a b b e c a d d a e e c
  • 40. IV. Đồ thị 40 • Tìm theo chiều sâu (Depth-First Search) 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 𝐷𝐹𝑆 𝑣 ∶ 𝑉𝑒𝑟𝑡𝑒𝑥 𝐢𝐟 𝑣 is not marked 𝐭𝐡𝐞𝐧 mark 𝑣 𝐟𝐨𝐫𝐞𝐚𝐜𝐡 𝑣, 𝑤 ∈ 𝐸 𝐝𝐨 𝐢𝐟 𝑤 is not marked 𝐭𝐡𝐞𝐧 𝐷𝐹𝑆 𝑤
  • 41. IV. Đồ thị 41 • Tìm theo chiều rộng (Breadth-First Search) 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 𝐵𝐹𝑆 𝑣 ∶ 𝑉𝑒𝑟𝑡𝑒𝑥 𝑞 ∶ 𝑄𝑢𝑒𝑢𝑒(𝑛) 𝐨𝐟 𝑉𝑒𝑟𝑡𝑒𝑥 mark 𝑣 𝑞. 𝐸𝑛𝑞𝑢𝑒𝑢𝑒(𝑣) 𝐰𝐡𝐢𝐥𝐞 ≦𝑞. 𝐼𝑠𝐸𝑚𝑝𝑡𝑦 𝐝𝐨 𝑢 ≔ 𝑞. 𝐷𝑒𝑞𝑢𝑒𝑢𝑒 𝐟𝐨𝐫𝐞𝐚𝐜𝐡 𝑢, 𝑤 ∈ 𝐸 𝐝𝐨 𝐢𝐟 𝑤 is not marked 𝐭𝐡𝐞𝐧 𝑚𝑎𝑟𝑘 𝑤 𝑞. 𝐸𝑛𝑞𝑢𝑒𝑢𝑒 𝑤
  • 42. IV. Đồ thị 42 • Ví dụ a db e c f g DFS(a)  a, b, d, e, g, f, c a d b e c f g BFS(a)  a, b, c, d, e, f, g
  • 43. IV. Đồ thị 43 • Kiểm tra kết nối giữa hai đỉnh (Connectedness) • Tìm đường đi ngắn nhất giữa hai đỉnh • Tìm chi phí thấp nhất (Min Cose Spanning Tree) • Sắp xếp topo (Topological Sorting)
  • 44. V. Sắp xếp Các thuật toán đơn giản Sắp xếp nhanh Sắp xếp vun đống Thuật toán hòa nhập 44
  • 45. V. Sắp xếp 45 • Thuật toán lựa chọn 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 SelectSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐟𝐨𝐫 𝒾 ≔ 𝓁 𝐭𝐨 𝓇 − 1 𝐝𝐨 𝑚 ≔ 𝒾 𝐟𝐨𝐫 𝒿 ≔ 𝒾 + 1 𝐭𝐨 𝓇 𝐝𝐨 𝐢𝐟 𝑎 𝒿 < 𝑎 𝑚 𝐭𝐡𝐞𝐧 𝑚 ≔ 𝒿 𝐢𝐟 𝑚 ≠ 𝒾 𝐭𝐡𝐞𝐧 Swap 𝑎 𝒾 , 𝑎 𝑚
  • 46. V. Sắp xếp 46 • Ví dụ - SelectSort i m a 1 2 3 4 5 6 33 44 11 66 55 22 1 1, 3 11 44 33 66 55 22 2 2, 3, 6 11 22 33 66 55 44 3 3 11 22 33 66 55 44 4 4, 5, 6 11 22 33 44 55 66 5 5 11 22 33 44 55 66 𝑇 = 6 × 6 − 1 2 = 15
  • 47. V. Sắp xếp 47 • Thuật toán chèn 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 InsertSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐟𝐨𝐫 𝒾 ≔ 𝓁 + 1 𝐭𝐨 𝓇 𝐝𝐨 𝑒 ≔ 𝑎 𝒾 𝒿 ≔ 𝒾 − 1 𝐰𝐡𝐢𝐥𝐞 𝒿 ≥ 𝓁 ∧ 𝑎 𝒿 < 𝑒 𝐝𝐨 𝑎 𝒿 + 1 ≔ 𝑎 𝒿 ; 𝒿−− 𝑎 𝒿 + 1 ≔ 𝑒
  • 48. V. Sắp xếp 48 • Ví dụ - InsertSort i e j a 1 2 3 4 5 6 33 44 11 66 55 22 2 44 1 33 44 3 11 2 → 0 11 33 44 4 66 3 11 33 44 66 5 55 4 → 3 11 33 44 55 66 6 22 5 → 1 11 22 33 44 55 66 𝑇 = 11
  • 49. V. Sắp xếp 49 • Thuật toán nổi bọt 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 BubbleSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝓁. . 𝓇 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐟𝐨𝐫 𝒾 ≔ 𝓁 𝐭𝐨 𝓇 − 1 𝐝𝐨 𝑐 = 0 ∶ 0, 1 𝐟𝐨𝐫 𝒿 ≔ 𝓇 𝐝𝐨𝐰𝐧𝐭𝐨 𝒾 + 1 𝐝𝐨 𝐢𝐟 𝑎 𝒿 − 1 < 𝑎 𝒿 𝐭𝐡𝐞𝐧 Swap 𝑎 𝒿 − 1 , 𝑎 𝒿 ; 𝑐 ≔ 1 𝐢𝐟 𝑐 = 0 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧
  • 50. V. Sắp xếp 50 • Ví dụ - BubbleSort i j và j – 1 a 1 2 3 4 5 6 33 44 11 66 55 22 1 6↔5↔4, 3↔2↔1 11 33 44 22 66 55 2 6↔5, 4↔3↔2 11 22 33 44 55 66 3 6, 5, 4, 3 𝑇 = 12
  • 51. V. Sắp xếp 51 • Chia đôi mảng sao cho 𝑎 𝓁, … , 𝑎 𝒿−1 < 𝑎 𝒿 < 𝑎 𝒿+1, … , 𝑎 𝓇 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 QuickSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝓁, 𝓇 ∶ ℕ 𝐢𝐟 𝓁 < 𝓇 𝐭𝐡𝐞𝐧 𝒿 ≔ Part 𝑎, 𝓁, 𝓇 QuickSort 𝑎, 𝓁, 𝒿 − 1 QuickSort 𝑎, 𝒿 + 1, 𝓇
  • 52. V. Sắp xếp 52 • Thuật toán phân đoạn 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Part 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝓁, 𝓇 ∶ ℕ 𝒾 ≔ 𝓁 + 1; 𝒿 ≔ 𝓇 𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝒿 𝐝𝐨 𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝒿 ∧ 𝑎 𝒾 < 𝑎 𝓁 𝐝𝐨 𝒾++ 𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝒿 ∧ 𝒾 = 𝒿 ∨ 𝑎 𝒿 > 𝑎 𝓁 𝐝𝐨 𝒿−− 𝐢𝐟 𝒾 < 𝒿 𝐭𝐡𝐞𝐧 Swap 𝑎[𝒾], 𝑎[𝒿] Swap 𝑎[𝓁], 𝑎[𝒿] 𝐫𝐞𝐭𝐮𝐫𝐧 𝒿
  • 53. V. Sắp xếp 53 • Ví dụ - Part i j a 1 2 3 4 5 6 33 44 11 66 55 22 2 6 22 44 3 → 4 3 ← 5 11 22 33 66 55 44 𝑇 = 5
  • 54. V. Sắp xếp 54 • Sắp xếp 𝑎1, … , 𝑎 𝑛 sao cho 𝑎 𝒾 > 𝑎2𝒾, 𝑎2𝒾+1 ∀ 𝒾 ∈ 1, 𝑛 2 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 HeapSort 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲[1. . 𝑛] 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐟𝐨𝐫 𝒾 = 𝑛/2 𝐝𝐨𝐰𝐧𝐭𝐨 1 𝐝𝐨 BuildHeap 𝑎, 𝒾 𝐰𝐡𝐢𝐥𝐞 𝑛 > 1 𝐝𝐨 // sorting Swap 𝑎[1], 𝑎[𝑛] ; 𝑛−− 𝐰𝐡𝐢𝐥𝐞 𝑛 > 1 𝐭𝐡𝐞𝐧 BuildHeap 𝑎, 1
  • 55. V. Sắp xếp 55 • Thuật toán vun đống 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 BuildHeap 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝒾 ∶ ℕ 𝑒 ≔ 𝑎 𝒾 ; 𝒿 ≔ 𝒾 × 2 𝐰𝐡𝐢𝐥𝐞 𝒿 ≤ 𝑛 𝐝𝐨 𝐢𝐟 𝒿 + 1 ≤ 𝑛 ∧ 𝑎 𝒿 < 𝑎 𝒿 + 1 𝐭𝐡𝐞𝐧 𝒿++ 𝐢𝐟 𝑎 𝒿 > 𝑒 𝐭𝐡𝐞𝐧 𝑎 𝒾 ≔ 𝑎 𝒿 𝒾 ≔ 𝒿; 𝒿 ≔ 𝒾 × 2 𝐞𝐥𝐬𝐞 𝐞𝐱𝐢𝐭 𝐰𝐡𝐢𝐥𝐞 𝑎 𝒾 ≔ 𝑒
  • 56. V. Sắp xếp 56 • Ví dụ – BuildHeap 𝑎, 𝑖|𝑖=3;2;1 n i e j a 1 2 3 4 5 6 33 44 11 66 55 22 6 3, 6 11 6, 12 22 11 6 2, 4 44 4, 8 66 44 55 6 1, 5 33 2, 4+1, 10 66 55 22 44 33 11 33 44 11 66 55 22 33 66 22 44 55 11  66 55 22 44 33 11 
  • 57. V. Sắp xếp 57 • Ví dụ – sorting 11 55 22 44 33 55 44 22 11 33  33 44 22 11 44 33 22 11   11 33 22 33 11 22 22 11 11
  • 58. VI. Tìm kiếm Tìm kiếm tuần tự Tìm kiếm chia đôi Cây nhị phân tìm kiếm 58
  • 59. VI. Tìm kiếm 59 • Tìm kiếm tuần tự (Linear Search) • Áp dụng cho các mảng chưa sắp xếp 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 LinearSearch 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝑥 ∶ 𝑇𝑦𝑝𝑒 ∶ ℕ 𝒾 ≔ 1 𝐰𝐡𝐢𝐥𝐞 𝒾 ≤ 𝑛 ∧ 𝑎 𝒾 ≠ 𝑥 𝐝𝐨 𝒾++ 𝐢𝐟 𝒾 ≤ 𝑛 𝐫𝐞𝐭𝐮𝐫𝐧 𝒾 𝐞𝐥𝐬𝐞 𝐫𝐞𝐭𝐮𝐫𝐧 0
  • 60. VI. Tìm kiếm 60 • Tìm kiếm chia đôi (Binary Search) • Áp dụng cho mảng đã được sắp xếp tăng dần 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 BinarySearch 𝑎 ∶ 𝐀𝐫𝐫𝐚𝐲 1. . 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒; 𝑥 ∶ 𝑇𝑦𝑝𝑒 ∶ ℕ 𝓁 ≔ 1; 𝓇 ≔ 𝑛 𝐰𝐡𝐢𝐥𝐞 𝓁 ≤ 𝓇 𝐝𝐨 𝑚 ≔ 𝓁+𝓇 2 𝐢𝐟 𝑎 𝑚 = 𝑥 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 𝑚 𝐢𝐟 𝑎 𝑚 > 𝑥 𝐭𝐡𝐞𝐧 𝓇 ≔ 𝑚 − 1 𝐞𝐥𝐬𝐞 𝓁 ≔ 𝑚 + 1 𝐫𝐞𝐭𝐮𝐫𝐧 0
  • 61. VI. Tìm kiếm 61 • Mô hình kế thừa A B D E C NullBST InfoBST BST
  • 62. VI. Tìm kiếm 62 • Định nghĩa 𝐜𝐥𝐚𝐬𝐬 𝐵𝑆𝑇 và 𝐜𝐥𝐚𝐬𝐬 𝑁𝑢𝑙𝑙𝐵𝑆𝑇 𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐩𝐨𝐢𝐭𝐞𝐫 𝐭𝐨 𝐵𝑆𝑇 𝐜𝐥𝐚𝐬𝐬 𝐵𝑆𝑇 𝓁, 𝓇 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑙𝑒𝑓𝑡 = 𝓁: 𝐻𝑎𝑛𝑑𝑙𝑒 𝑟𝑖𝑔𝑕𝑡 = 𝓇 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 isEmpty ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 1 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 search 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 0 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 insert 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 remove 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 findMax ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 0 𝐜𝐥𝐚𝐬𝐬 𝑁𝑢𝑙𝑙𝐵𝑆𝑇 𝐢𝐧𝐡𝐞𝐫𝐢𝐭 𝐵𝑆𝑇 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 insert 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝐚𝐥𝐥𝐨𝐜𝐚𝐭𝐞 𝐼𝑛𝑓𝑜𝐵𝑆𝑇(𝑒, 𝐭𝐡𝐢𝐬, 𝐭𝐡𝐢𝐬)
  • 63. VI. Tìm kiếm 63 • Định nghĩa 𝐜𝐥𝐚𝐬𝐬 𝐼𝑛𝑓𝑜𝐵𝑆𝑇 𝐜𝐥𝐚𝐬𝐬 𝐼𝑛𝑓𝑜𝐵𝑆𝑇 𝑒 ∶ 𝑇𝑦𝑝𝑒; 𝓁, 𝓇 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐢𝐧𝐡𝐞𝐫𝐢𝐭 𝐵𝑆𝑇 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑖𝑛𝑓𝑜 = 𝑒 ∶ 𝑇𝑦𝑝𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 isEmpty ∶ 0, 1 𝐫𝐞𝐭𝐮𝐫𝐧 0 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 search 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 0, 1 𝐢𝐟 𝑒 = 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 1 𝐞𝐥𝐬𝐞 𝐢𝐟 𝑒 < 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝐫𝐞𝐭𝐮𝐫𝐧 𝑙𝑒𝑓𝑡 → search 𝑒 𝐞𝐥𝐬𝐞 𝐫𝐞𝐭𝐮𝐫𝐧 𝑟𝑖𝑔𝑕𝑡 → search 𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 insert 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐢𝐟 𝑒 < 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑙𝑒𝑓𝑡 = 𝑙𝑒𝑓𝑡 → 𝑖𝑛𝑠𝑒𝑟𝑡(𝑒) 𝐞𝐥𝐬𝐞 𝐢𝐟 𝑒 > 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑟𝑖𝑔𝑕𝑡 = 𝑟𝑖𝑔𝑕𝑡 → 𝑖𝑛𝑠𝑒𝑟𝑡(𝑒) 𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬
  • 64. VI. Tìm kiếm 64 • Định nghĩa 𝐜𝐥𝐚𝐬𝐬 𝐼𝑛𝑓𝑜𝐵𝑆𝑇 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 remove 𝑒 ∶ 𝑇𝑦𝑝𝑒 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐢𝐟 𝑒 < 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑙𝑒𝑓𝑡 = 𝑙𝑒𝑓𝑡 → remove(𝑒) 𝐞𝐥𝐬𝐞 𝐢𝐟 𝑒 > 𝑖𝑛𝑓𝑜 𝐭𝐡𝐞𝐧 𝑟𝑖𝑔𝑕𝑡 = 𝑟𝑖𝑔𝑕𝑡 → remove(𝑒) 𝐞𝐥𝐬𝐞 𝑟 ≔ 𝑙𝑒𝑓𝑡 → findMax 𝐢𝐟 𝑟 = 0 𝐭𝐡𝐞𝐧 𝑟 ≔ 𝑟𝑖𝑔𝑕𝑡 𝐝𝐢𝐬𝐩𝐨𝐬𝐞 𝐭𝐡𝐢𝐬 𝐫𝐞𝐭𝐮𝐫𝐧 𝑟 𝐞𝐥𝐬𝐞 𝑖𝑛𝑓𝑜 ≔ 𝑟 → 𝑖𝑛𝑓𝑜 𝑙𝑒𝑓𝑡 ≔ 𝑙𝑒𝑓𝑡 → remove 𝑖𝑛𝑓𝑜 𝐫𝐞𝐭𝐮𝐫𝐧 𝐭𝐡𝐢𝐬 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 findMax ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝑟𝑖𝑔𝑕𝑡 → 𝑖𝑠𝐸𝑚𝑝𝑡𝑦? 𝐭𝐡𝐢𝐬 ∶ 𝑟𝑖𝑔𝑕𝑡 → findMax 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 findMin ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐫𝐞𝐭𝐮𝐫𝐧 𝑙𝑒𝑓𝑡 → 𝑖𝑠𝐸𝑚𝑝𝑡𝑦? 𝐭𝐡𝐢𝐬 ∶ 𝑙𝑒𝑓𝑡 → findMin