CẤU TRÚC DỮ LIÊU & GIẢI THUẬT
DÀNH CHO SINH VIÊN NGHÀNH CƠNG NGHỆ THƠNG TIN
Giảng viên: Kiều Cơng Chính Số điện thoại: 0963 909 060
Confidential
1
NỘI QUY KHĨA HỌC
Bỏ điện thoại xuống
ngay!!
Đúng giờ
Khơng hút thuốc
Giơ tay phát biểu
Không dùng ĐT
Giữ trật tự
Confidential
2
Chúng ta
mong đợi điều gì
khi tham gia Mơn học này?
MỤC TIÊU KHĨA HỌC
• Hiểu về thiết kế cấu trúc dữ liệu, phân
tích và đánh giá giải thuật, thuật tốn
• Vận dụng được một số thuật toán,
đánh giá được độ phức tạp của thuật
tốn. Sử dụng một ngơn ngữ lập trình,
cài đặt giải thuật
• Có ý thức tổ chức kỷ luật, tự học tập,
nghiêm túc trong học tập, tích cực
tham gia xây dựng bài học.
Confidential
4
NỘI DUNG CHƯƠNG TRÌNH
1. Phân tích và thiết kế giải thuật
2. Giải thuật đệ quy
NỘI
DUNG
3. Mảng, danh sách liên kết, ngăn xếp, hàng đợi
4. Cấu trúc cây
5. Sắp xếp và tìm kiếm
Confidential
5
NỘI DUNG CHƯƠNG TRÌNH
1. Phân tích và thiết kế giải thuật
2. Giải thuật đệ quy
NỘI
DUNG
3. Mảng, danh sách liên kết, ngăn xếp, hàng đợi
4. Cấu trúc cây
5. Sắp xếp và tìm kiếm
Confidential
6
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
Cấu
trúc dữ
liệu
Giải
thuật
Chươn
g trình
?
Giải thuật: Là một dãy các câu lệnh chặt chẽ và rõ ràng xác định một trình tự các thao
tác trên một số đối tượng nào đó sao cho sau một số hữu hạn bước thực hiện ta đạt được
kết quả mong muốn
Confidential
7
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
Tính chất của giải thuật:
Input/Output
Giá trị nhập vào từ
một tập nhất định
nào đó (input), tạo
ra những giá trị
xuất (output)
Hữu hạn
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
ở mỗi bước 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
Confidential
Hiệu quả
Các thao tác trong
giải thuật phải được
thực hiện trong một
khoảng thời gian
cho phép
Phổ dụng
giải thuật phải áp
dụng được cho lớp các
bài tốn cùng loại, chứ
khơng phải chỉ áp
dụng được cho một số
trường hợp đặc biệt
nào đó
8
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• 13 lối đi: AB, AC, AD, BA, BC, BD, DA,
• Ví dụ: Đèn giao thơng
DB, DC, EA, EB, EC, ED
• Đầo vào: Các lối đi tại ngã năm
• Đầu ra: nhóm lối đi có thể đi đồng thời
mà khơng xảy ra tai nạn giao thơng
• 13 lối điđược viết lên mặt phẳng, hai
lối đi nào nếu đi đồng thời sẽ xảy ra
đụng nhau, ta nối lại bằng một cung
Confidential
9
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• Phương pháp Modul hóa
• Bài tốn của ta như một modul
• Chia thành các modul con
• chia các modul đó thành các
modul nhỏ hơn nữa tới khi thu
được những modul ứng với phần
việc cơ bản mà ta đã biết cách giải
quyết
Confidential
10
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• Phương pháp tinh chỉnh từng bước
Chươn
g trình
Y/C
Bài tốn
Chi tiết hóa
dần dần
đến ngơn
ngữ lập
Giải thuật được trình
trình bày bằng
ngơn ngữ tự
nhiên
Thay thế bởi
các câu lệnh
của ngơn ngữ
lập trình
Confidential
Cài đặt
cụ thể
11
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• Phân tích, đánh giá độ phức tạp của giải thuật
Chương trình
Đầu vào
n
Thuật Tốn
Đầu ra
T
• Tài ngun máy tính
• Tấc độ xử lý máy tính
• Kiểu lệnh
• Ngơn ngữ, chương trình dịch
Hàm T(n): Thời gian thực hiện (T) của một giải thuật với dữ liệu vào (n)
Confidential
12
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• Độ phức tạp về thời gian của
của giải thuật có dạng: log2n, n, nlog2n,
giải thuật
n2, n3, 2n, n!, nn
• T1(n) = cn2 (c là hằng số)
• Hàm loại đa thức: log2n, n, nlog2n, n2, n3
• T2(n) = kn (k là hằng số)
• Hàm loại mũ: 2n, n!, nn
T1 > T2
• O(n ): độ phức tạp thuật tốn n
2
• Hàm thể hiện độ phức tạp về thời gian
2
• T(n) ≤ cn2 với n ≥ n0 (c > 0, n0 > 0)
• T(n): thời gian thực hiện của chương
trình trên mọi bộ dữ liệu vào kích thước
n (xấu nhất, tốt nhất, trung bình)
Confidential
13
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• Quy tắc tổng
• T1(n) + T2(n) = O(max(f(n), g(n)))
• T1(n) = O(f(n)): Thời gian thực hiện của hai đoạn chương trình P1
• T2(n) = O(g(n)): Thời gian thực hiện của hai đoạn chương trình P2
• Nếu g(n) ≤ f(n) với mọi n ≥ n0 thì O(f(n) + g(n)) cũng là O(f(n))
• Ví dụ:
• O(max(n3, nlog2n) =O(n3)
• O(n4 + n2) = O(n4)
Confidential
14
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT
• Quy tắc nhân
• T1(n) . T2(n) = O(max(f(n).g(n)))
• T1(n) = O(f(n)): Thời gian thực hiện của hai đoạn chương trình P1
• T2(n) = O(g(n)): Thời gian thực hiện của hai đoạn chương trình P2
• Ví dụ:
• O(n.n) = O(n2)
Confidential
15
NỘI DUNG CHƯƠNG TRÌNH
1. Phân tích và thiết kế giải thuật
2. Giải thuật đệ quy
NỘI
DUNG
3. Mảng, danh sách liên kết, ngăn xếp, hàng đợi
4. Cấu trúc cây
5. Sắp xếp và tìm kiếm
GIẢI THUẬT ĐỆ QUI
• Khái niệm về đệ qui: Một đối tượng được gọi là đệ qui nếu nó hoặc một phần
của nó được định nghĩa thơng qua chính nó
• Ví dụ:
• Định nghĩa hàm n giai thừa: n!
• 0! = 1
ã Nu n > 0 thỡ n! = nì(n-1)!
ã Như vậy khi n=1 ta có 1!=1×0!=1×1=1, khi n=2 ta có 2!=2×1!=2×1=2, …
Confidential
17
GIẢI THUẬT ĐỆ QUI
• Thiết kế giải thuật đệ qui và thủ tục đệ quy:
Thủ tục đệ qui
Thủ tục có thể
gọi chính nó
Đặc điểm
của thủ tục
đệ qui
gọi đệ qui thì
kích thước bài
toán phải nhỏ
hơn
Đệ qui trực tiếp
Nếu một thủ tục
chứa lời gọi đến
chính nó
Có một trường
hợp đặc biệt –
trường hợp suy
biến
Confidential
Đệ qui gián tiếp
Nếu một thủ tục
chứa lời gọi đến
một thủ tục khác,
mà thủ tục này
lại gọi đến thủ
tục ban đầu
18
GIẢI THUẬT ĐỆ QUI
• Hàm n!
• Giải thuật đệ qui
• int giaithua(int n)
{
if (n = = 0) return 1;
else return n × giaithua(n-1);
}
Confidential
19
GIẢI THUẬT ĐỆ QUI
• Dãy số Fibonacci
• Giải thuật đệ quy
Int Fibonacci(int n)
{
if (n = = 0 || n = = 1) return 1;
else return Fibonacci(n-1) + Fibonacci(n-2);
}
Confidential
20