Tổng hợp bài giảng môn Cấu trúc dữ liệu và thuật toán_Thầy Đỗ Tuấn Anh| Bài giảng môn Cấu trúc dữ liệu và thuật toán| Trường Đại học Bách Khoa Hà Nội

Chương 1 – Thiết kế và phân tích

1. Mở đầu
2. Từ bài toán đến chương trình
2.1 Modul hóa bài toán
2.2 Phương pháp tinh chỉnh từng bước
3. Phân tích giải thuật
3.1 Độ phức tạp về thời gian thực hiện GT
3.2 O-lớn, Omega-lớn, Theta-lớn
3.3 Xác định độ phức tạp về thời gian

Cu trúc d liu và gii thut
Người thc hin: Đỗ Tun Anh
Email: anhdt@it-hut.edu.vn
ĐT: 0989095167
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Tài liu tham kho
z Sách giáo trình: Đỗ Xuân Lôi, Cu trúc d
liu và Gii Thut, NXB ĐHQGHN
z R. Sedgewick, Algorithm in C, Addison
Wesley
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ni dung
z Chương 1 – Thiết kế phân tích
z Chương 2 – Gii thut đệ quy
z Chương 3 – Mng và danh sách
z Chương 4 – Ngăn xếp và hàng đợi
z Chương 5 – Cu trúc cây
z Chương 6 – Đồ th
z Chương 7 – Sp xếp
z Chương 8 – Tìm kiếm
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Chương 1 – Thiết kế phân tích
1. M đầu
2. T bài toán đến chương trình
2.1 Modul hóa bài toán
2.2 Phương pháp tinh chnh tng bước
3. Phân tích gii thut
3.1 Độ phc tp v thi gian thc hin GT
3.2 O-ln, Omega-ln, Theta-ln
3.3 Xác định độ phc tp v thi gian
CuuDuongThanCong.com https://fb.com/tailieudientucntt
1. M đầu
z Gii thut:
{Các bước gii quyết bài toán
{Mt dãy câu lnh xác định mt trình t các thao tác
trên mt s đối tượng nào đó sao cho sau mt s hu
hn bước thc hin ta đạt được kết qu mong mun.
z Đầu vào(Input): tp các đối tượng (d liu)
z Đầu ra(Output): mt tp các giá tr
z Cu trúc d liu:
{Tp hp d liu
{ mi quan h vi nhau trong bài toán xác định
z La chn cu trúc d liu và gii thut thích hp: rt
quan trng
{ d: viết chương trình tìm kiếm s đin thoi theo
tên đơn v
Chương trình = Gii thut + D liu
Các bước
thc hin
CuuDuongThanCong.com https://fb.com/tailieudientucntt
1. M đầu (tiếp)
z Biu din cu trúc d liu trong b nh:
{ Lưu tr trong
{ Lưu tr ngoài
z Din đạt gii thut:
{ Ngôn ng t nhiên
{ Gi ngôn ng
{ Lưu đồ
{ Ngôn ng lp trình
z Cài đặt gii thut: ngôn ng C/C++
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Gi ngôn ng
1. Chú thích: /*…*/ hoc //…
2. Đánh s th t các đon ca chương trình
3. Ký t biu thc
{ 26 ch cái Latin + 10 ch s
{ Phép toán s hc: +, -, *, /, ^(lũy tha), %
{ Phép toán quan h: <, >, ==, <=, >=, !=
{ Phép toán logic: &&, ||, !
{ Giá tr logic: true, false
{ Biến ch s: a[i], a[i][j]
{ Th t ưu tiên ca các phép toán: như C và các ngôn
ng chun khác
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Gi ngôn ng (tiếp)
z Lnh gán: a = b; c = d = 2;
z Khi lnh: { S1; S2; S3; }
z Lnh điu kin:
if (B) if (B)
S; {s1;s2;s3;}
if (B)
S1;
else
S2;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Gi ngôn ng
z Lnh lp
for (i = 0 ; i<n; i++)
S;
for ( i = n; i>= 0; i--)
S;
do S while (B);
while (B) do S;
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Gi ngôn ng (tiếp)
z Lnh vào/ra:
read (<danh sách biến>)
write (<danh sách biến hoc dòng ký t>)
z Chương trình con:
function <tên hàm> (<danh sách tham s>)
{
S1; S2; …Sn;
return; // nếu chương trình con tr li mt giá tr
}
z Gi chương trình con:
<tên hàm> (<danh sách tham s thc s>)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Sơ đồ
Lnh điu khincóth là:
{Khi lnh
{Lnh điu kin
{Lnh lp
Bt đầu hoc kết thúc
Lnh gán
Lnh vào, lnh ra
Điu kin
Lung thc hin
Ni tiếp đon lnh
Bt đầu
Kết thúc
R=n%2
Nhp n
R là chn
S l
S chn
ĐS
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Khi lnh
pháp:
{
S1;
S2;
S3;
}
S1
S2
S3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Lnh điu kin
z pháp
if(điu_kin)
hành_đng
điu kin
hành động
true
false
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Lnh điu kin
z Lnh điu kin
if (B) then
S1;
else
S2;
B
S1S2
truefalse
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Lnh lp:
z pháp:
while (B) do
S;
BS
true
false
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Lnh lp for
z pháp
for (khi_to; điu_kin; cp_nht)
hành_đng
điu kin
hành động
true
false
khi to
cp nht
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Lnh lp do-while
z pháp
do hành_động
while (điu_kin)
hành động
true
false
điu kin
CuuDuongThanCong.com https://fb.com/tailieudientucntt
2. T bài toán đến chương trình
đun hóa và vic gii quyết bài toán
{Chia bài toán ln (module chính) thành các bài
toán (module) nh hơn
{Mi module thc hin công vic c th nào đó
{Lp đi lp li cho đến khi các module là cô
đọng và biết cách gii quyết.
=> chiến thut “Chia để tr
CuuDuongThanCong.com https://fb.com/tailieudientucntt
2.1 Module hóa bài toán
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Module hóa bài toán
z Thiết kế Topdown – t đỉnh xung, hay t khái
quát đến chi tiết.
{Bước 1: Xác định d kin đầu vào, yêu cu đặt ra
{Bước 2
: Xác định các công vic ch yếu (mi công vic
tương đương vi 1 module)
{Bước 3
: Gii quyết tng công vic mt cách chi tiết
bng cách lp đi lp li bước 1 + 2
z d Bài toán: “Qun lý và bo trì các h sơ v
hc bng ca sinh viên, thường k lp báo cáo
tng kết”.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
| 1/565

Preview text:

Cấu trúc dữ liệu và giải thuật Người thực hiện: Đỗ Tuấn Anh Email: anhdt@it-hut.edu.vn ĐT: 0989095167 CuuDuongThanCong.com
https://fb.com/tailieudientucntt Tài liệu tham khảo
zSách giáo trình: Đỗ Xuân Lôi, Cấu trúc dữ
liệu và Giải Thuật, NXB ĐHQGHN
zR. Sedgewick, Algorithm in C, Addison Wesley CuuDuongThanCong.com
https://fb.com/tailieudientucntt Nội dung
zChương 1 – Thiết kế và phân tích
zChương 2 – Giải thuật đệ quy
zChương 3 – Mảng và danh sách
zChương 4 – Ngăn xếp và hàng đợi
zChương 5 – Cấu trúc cây zChương 6 – Đồ thị zChương 7 – Sắp xếp zChương 8 – Tìm kiếm CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Chương 1 – Thiết kế và phân tích 1. Mở đầu
2. Từ bài toán đến chương trình 2.1 Modul hóa bài toán
2.2 Phương pháp tinh chỉnh từng bước 3. Phân tích giải thuật
3.1 Độ phức tạp về thời gian thực hiện GT
3.2 O-lớn, Omega-lớn, Theta-lớn
3.3 Xác định độ phức tạp về thời gian CuuDuongThanCong.com
https://fb.com/tailieudientucntt 1. Mở đầu z Giải thuật:
{Các bước giải quyết bài toán
{Một dãy câu lệnh 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.
z Đầu vào(Input): tập các đối tượng (dữ liệu)
z Đầu ra(Output): một tập các giá trị Các bước thực hiện z Cấu trúc dữ liệu: {Tập hợp dữ liệu
{Có mối quan hệ với nhau trong bài toán xác định
z Lựa chọn cấu trúc dữ liệu và giải thuật thích hợp: rất quan trọng
{Ví dụ: viết chương trình tìm kiếm số điện thoại theo tên đơn vị
Chương trình = Giải thuật + Dữ liệu CuuDuongThanCong.com
https://fb.com/tailieudientucntt 1. Mở đầu (tiếp)
z Biểu diễn cấu trúc dữ liệu trong bộ nhớ: { Lưu trữ trong { Lưu trữ ngoài
z Diễn đạt giải thuật: { Ngôn ngữ tự nhiên { Giả ngôn ngữ { Lưu đồ { Ngôn ngữ lập trình
z Cài đặt giải thuật: ngôn ngữ C/C++ CuuDuongThanCong.com
https://fb.com/tailieudientucntt Giả ngôn ngữ
1. Chú thích: /*…*/ hoặc //…
2. Đánh số thứ tự các đoạn của chương trình 3. Ký tự và biểu thức
{ 26 chữ cái Latin + 10 chữ số
{ Phép toán số học: +, -, *, /, ^(lũy thừa), %
{ Phép toán quan hệ: <, >, ==, <=, >=, !=
{ Phép toán logic: &&, ||, !
{ Giá trị logic: true, false
{ Biến chỉ số: a[i], a[i][j]
{ Thứ tự ưu tiên của các phép toán: như C và các ngôn ngữ chuẩn khác CuuDuongThanCong.com
https://fb.com/tailieudientucntt Giả ngôn ngữ (tiếp)
z Lệnh gán: a = b; c = d = 2;
z Khối lệnh: { S1; S2; S3; } z Lệnh điều kiện: if (B) if (B) S; {s1;s2;s3;} if (B) S1; else S2; CuuDuongThanCong.com
https://fb.com/tailieudientucntt Giả ngôn ngữ zLệnh lặp for (i = 0 ; iS; for ( i = n; i>= 0; i--) S; do S while (B); while (B) do S; CuuDuongThanCong.com
https://fb.com/tailieudientucntt Giả ngôn ngữ (tiếp) z Lệnh vào/ra: read () write () z Chương trình con: function () { S1; S2; …Sn;
return; // nếu chương trình con trả lại một giá trị
} z Gọi chương trình con: () CuuDuongThanCong.com
https://fb.com/tailieudientucntt Sơ đồ
Lệnh điều khiển có thể là: {Khối lệnh Bắt đầu {Lệnh điều kiện {Lệnh lặp Nhập n
Bắt đầu hoặc kết thúc R=n%2 Lệnh gán S Đ R là chẵn
Lệnh vào, lệnh ra Điều kiện Số lẻ Số chẵn
Nối tiếp đoạn lệnh
Luồng thực hiện Kết thúc CuuDuongThanCong.com
https://fb.com/tailieudientucntt Khối lệnh Cú pháp: { S1 S1; S2; S2 S3; } S3 CuuDuongThanCong.com
https://fb.com/tailieudientucntt Lệnh điều kiện z Cú pháp if(điều_kiện) hành_động điều kiện false true hành động CuuDuongThanCong.com
https://fb.com/tailieudientucntt Lệnh điều kiện zLệnh điều kiện if (B) then false true S1; B else S2; S2 S1 CuuDuongThanCong.com
https://fb.com/tailieudientucntt Lệnh lặp: zCú pháp: while (B) do S; true B S false CuuDuongThanCong.com
https://fb.com/tailieudientucntt Lệnh lặp for zCú pháp
for (khởi_tạo; điều_kiện; cập_nhật) hành_động khởi tạo false điều kiện true hành động cập nhật CuuDuongThanCong.com
https://fb.com/tailieudientucntt Lệnh lặp do-while z Cú pháp do hành_động while (điều_kiện) hành động true điều kiện false CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2. Từ bài toán đến chương trình
Mô đun hóa và việc giải quyết bài toán
{Chia bài toán lớn (module chính) thành các bài toán (module) nhỏ hơn
{Mỗi module thực hiện công việc cụ thể nào đó
{Lặp đi lặp lại cho đến khi các module là cô
đọng và biết cách giải quyết.
=> chiến thuật “Chia để trị” CuuDuongThanCong.com
https://fb.com/tailieudientucntt 2.1 Module hóa bài toán CuuDuongThanCong.com
https://fb.com/tailieudientucntt Module hóa bài toán
z Thiết kế Topdown – từ đỉnh xuống, hay từ khái quát đến chi tiết.
{Bước 1: Xác định dữ kiện đầu vào, yêu cầu đặt ra
{Bước 2: Xác định các công việc chủ yếu (mỗi công việc
tương đương với 1 module)
{Bước 3: Giải quyết từng công việc một cách chi tiết
bằng cách lặp đi lặp lại bước 1 + 2
z Ví dụ Bài toán: “Quản lý và bảo trì các hồ sơ về
học bổng của sinh viên, thường kỳ lập báo cáo tổng kết”. CuuDuongThanCong.com
https://fb.com/tailieudientucntt