- Trang Chủ
- Cơ sở dữ liệu
- Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Các khái niệm cơ bản về Cấu trúc dữ liệu và giải thuật
Xem mẫu
- 8/4/2020
BÀI GIẢNG ĐIỆN TỬ
HP:CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Số TC: 3
Bộ môn: Tin học
Cấu trúc dữ liệu và giải thuật 1
Giới thiệu học phần
Số tín chỉ: 3 (36,9)
Mục tiêu: Cung cấp:
▪ Một số khái niệm cơ bản về giải thuật và cấu trúc dữ
liệu; vai trò của cấu trúc dữ liệu và giải thuật (CTDL
và GT) trong hệ thống thông tin (HTTT); Một số cấu
trúc dữ liệu cơ bản bao gồm: Mảng (Array), Danh
sách (List), Danh sách liên kết (Linked List), Ngăn
xếp (Stack) và Hàng đợi (Queue), và Cây (Tree)
Cấu trúc dữ liệu và giải thuật 2
1
- 8/4/2020
Giới thiệu học phần
Nội dung chính:
Chương 1: Các khái niệm cơ bản về CTDL & GT (6t)
Chương 2: Mảng và danh sách (12t)
Chương 3: Cây (12t)
Chương 4: Một số giải thuật sắp xếp và tìm kiếm (15t)
Cấu trúc dữ liệu và giải thuật 3
Tài liệu tham khảo
❖Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật, NXB
ĐHQGHN, 2008
❖Nguyễn ĐÌnh Hóa, Cấu trúc dữ liệu và giải thuật, 2008,
NXB ĐHQGHN
❖Lê Minh Hoàng, Bài giảng chuyên đề
❖https://www.tutorialspoint.com/data_structures_algorit
hms/
❖https://www.e-
reading.club/bookreader.php/138793/Advanced_C.pdf.
Cấu trúc dữ liệu và giải thuật 4
2
- 8/4/2020
Chương 1. Các khái niệm cơ bản về CTDL & GT
1.1 Cấu trúc dữ liệu
1.2 Giải thuật
Cấu trúc dữ liệu và giải thuật 5
1.1 Cấu trúc dữ liệu (Data Structures)
1.1.1 Khái niệm chung
1.1.2 Các vấn đề liên quan
1.1.3 Một số cấu trúc dữ liệu cơ bản
Cấu trúc dữ liệu và giải thuật 6
3
- 8/4/2020
1.1.1 Khái niệm chung
❖Mục tiêu của tin học?
❖Dữ liệu là gì? →Kiểu dữ liệu ? (kiểu cơ sở/ kiểu có cấu
trúc phức tạp)
❖Khái niệm chung: CTDL là một cách thể hiện và tổ chức
dữ liệu trong máy tính sao cho nó được sử dụng một cách
có hiệu quả nhất.
❖Khái niệm khác: CTDL là một dữ liệu phức hợp, gồm
nhiều thành phần dữ liệu, mỗi thành phần hoặc là dữ liệu
cơ sở hoặc là một CTDL đã được xây dựng. Các thành
phần dữ liệu tạo nên một CTDL được liên kết với nhau theo
một cách nào đó.
Cấu trúc dữ liệu và giải thuật 7
1.1.2 Các vấn đề liên quan
Tầm quan trọng của việc lựa chọn CTDL
▪ Tổ chức dữ liệu : dl vào/ra/trung gian
▪ Xây dựng giải thuật
→Các cách cài đặt khác nhau
→Thực hiện thao tác thuận lợi/khôngthuận lợi
→CTDL thay đổi → Thuật toán thay đổi
Cấu trúc dữ liệu và giải thuật 8
4
- 8/4/2020
1.1.2 Các vấn đề liên quan
Các tiêu chuẩn khi lựa chọn CTDL
▪ CTDL phải biểu diễn được đầy đủ các thông tin của
bài toán. (in/out) → phản ánh đúng thực tế
▪ Cài đặt được trên máy tính và ngôn ngữ lập trình đang
sử dụng
▪ Phù hợp với các thao tác của thuật toán (đặc biệt thao
tác được sử dụng nhiều) → phát triển thuật toán đơn
giản và đạt hiệu quả.
▪ Tiết kiệm tài nguyên
Cấu trúc dữ liệu và giải thuật 9
1.1.3 Một số cấu trúc dữ liệu cơ bản
❖Mảng (array)
❖Bản ghi (record)/cấu trúc (struct)
❖Tập hợp (set)
❖Tệp (file)
❖Xâu (string)
❖….(bảng băm, danh sách liên kết)
Cấu trúc dữ liệu và giải thuật 10
5
- 8/4/2020
1.2 Giải thuật (Algorithm)
1.2.1 Khái niệm chung
1.2.2 Ngôn ngữ diễn đạt giải thuật
1.2.3 Thiết kế và phân tích giải thuật
1.2.4 Giải thuật đệ quy
Cấu trúc dữ liệu và giải thuật 11
1.2.1 Khái niệm chung
❖Thuật toán là một dãy hữu hạn các bước được
sắp xếp theo một trật tự xác định, mỗi bước mô
tả chính xác các phép toán hoặc hành động cần
thực hiện, để giải quyết một vấn đề.
❖Thuật toán là một dãy hữu hạn các thao tác, sắp
xếp theo một trật tự xác định, sau khi thực hiện,
từ Input ta nhận được Output cần tìm.
Cấu trúc dữ liệu và giải thuật 12
6
- 8/4/2020
1.2.1 Khái niệm chung
❖Các tính chất (đặc trưng) của thuật toán:
▪ Tính vào (input)
▪ Tính ra (output)
▪ Tính đơn định (xác định / đơn nghĩa)
▪ Tính đúng đắn
▪ Tính dừng (tính kết thúc / tính đóng)
▪ Tính phổ dụng
▪ Tính khả thi/hiệu quả
Cấu trúc dữ liệu và giải thuật 13
1.2.2 Ngôn ngữ diễn đạt giải thuật
❖Cách liệt kê: liệt kê các bước cần thực hiện
❖Sơ đồ khối: sử dụng các hình khối oval, chữ nhật,
hình thoi và mũi tên,…
❖Ngôn ngữ lập trình: dùng các ký hiệu và các quy
tắc của ngôn ngữ lập trình
Cấu trúc dữ liệu và giải thuật 14
7
- 8/4/2020
1.2.2 Ngôn ngữ diễn đạt giải thuật
Ví dụ:
- Input:N nguyên dương, dãy a 1,..., an.
- Output : Tìm Max của dãy đã cho.
Ý tưởng:
❖Giả thiết Max = a1. Với mỗi i, nếu ai > Max thì thay giá
trị Max= ai.
Cấu trúc dữ liệu và giải thuật 15
1.2.2 Ngôn ngữ diễn đạt giải thuật
❖Cách liệt kê
Bước 1. Nhập N và dãy a1, ..., an
Bước 2. Đặt Max = a1, i = 2;
Bước 3. Nếu i > N thì đến Bước 5;
Bước 4.
4.1. N ếu ai > Max thì Max = ai.
4.2. Đặt i=i+1 rồi quay B.3;
Bước 5. Đưa ra Max rồi kết thúc.
Cấu trúc dữ liệu và giải thuật 16
8
- 8/4/2020
1.2.2 Ngôn ngữ diễn đạt giải thuật
Bắt đầu
Nhập N, a1,a2, …an
Max=a1,i=2
i=i+1 i>N Xuất Max
Max= ai ai>Max
Kết thúc
Cấu trúc dữ liệu và giải thuật 17
1.2.2 Ngôn ngữ diễn đạt giải thuật
❖Dùng ngôn ngữ lập trình
int max(int *x,int n) //hàm tìm max
{
int result;
result=x[0];
for (int i=1;i
- 8/4/2020
1.2.3 Thiết kế và phân tích giải thuật
❖Thiết kế giải thuật
▪ Ý nghĩa: Sự đa dạng và phức tạp của các bài toán
→cần sử dụng nguồn nhân lực lớn hơn
→Thời gian để thử nghiệm, bảo trì và mở rộng hệ thống
chiềm phần đáng kể so với thời gian xây dựng CT.
Cấu trúc dữ liệu và giải thuật 19
1.2.3 Thiết kế và phân tích giải thuật
❖Module hóa và việc giải quyết bài toán
▪ Chiến thuật “chia để trị” (divide and conquer)
▪ Cách thiết kế “từ đỉnh xuống”(top-down)
❖Phương pháp tinh chỉnh từng bước (stepwise
refinement): là phương pháp thiết kế giải thuật
gắn liền với lập trình
→Phản ánh: quá trình modun hóa bài toán và thiết kế
kiểu top-down (từ bài toán đến chương trình)
Cấu trúc dữ liệu và giải thuật 20
10
- 8/4/2020
Ví dụ
❖ Quản lý học bổng của sinh viên, lập báo cáo tổng kết theo kỳ
❖ Thiết kế:
❖ B1: xác định input/ouput
▪ Input: file chứa thông tin HB của SV: mã SV, ĐTB, Mức HB
▪ Output: Tìm kiếm, cập nhập, hiển thị thông tin của SV, In bảng tổng kết
❖ B2: Xác định các công việc chủ yếu
▪ Đọc file vào bộ nhớ trong → lấy thông tin của SV
▪ Xử lý thông tin đọc được
▪ Ghi file → Lưu thông tin cập nhật vào file
❖ B3: Giải quyết từng công việc một cách chi tiết bằng cách lặp
lại B1 và B2
Cấu trúc dữ liệu và giải thuật 21
Ví dụ
Cấu trúc dữ liệu và giải thuật 22
11
- 8/4/2020
Ví dụ
❖ Đọc file:
▪ Input: file thông tin trên đĩa
▪ Output: đọc file và lưu vào mảng (mỗi ptử lưu thông tin một sinh viên)
❖ Ghi file
▪ Input: Mảng lưu thông tin các sinh viên
▪ Output: Lưu trở lại file
❖ Xử lý thông tin
▪ Input: Mảng lưu thông tin của các sinh viên
▪ Output:
• Tìm một sinh viên cho trước
• Hiển thị thông tin của sinh viên
• Cập nhật thông tin của sinh viên
• In bản tổng kết
Cấu trúc dữ liệu và giải thuật 23
Ví dụ
Cấu trúc dữ liệu và giải thuật 24
12
- 8/4/2020
1.2.3 Thiết kế và phân tích giải thuật
❖Các chiến lược thiết kế giải thuật:
▪ Module hóa→Chia để trị (divide and conquer/top-down)
▪ Phương pháp tham lam (greedy)
▪ Phương pháp quy hoạch động
▪ Phương pháp nhánh cận
▪ Phương pháp quay lui
Cấu trúc dữ liệu và giải thuật 25
1.2.3 Thiết kế và phân tích giải thuật
❖Phân tích giải thuật
▪ Tại sao cần phân tích giải thuật?
▪ Chương trình chạy đúng chưa đủ, cần xét tính hiệu
quả (kg/tg) với các tập dữ liệu khác nhau
▪ Lưu ý: chỉ phân tích các giải thuật đúng – là thuật
toán mà với một bộ dữ liệu vào bất kỳ thì thuật toán
dừng và cho kết quả đúng
Cấu trúc dữ liệu và giải thuật 26
13
- 8/4/2020
1.2.3 Thiết kế và phân tích giải thuật
❖Các lưu ý khi phân tích giải thuật
▪ Tính đúng đắn của giải thuật
▪ Tính đơn giản của giải thuật
▪ Tốc độ thực hiện (hoặc thời gian thực hiện) và dung
lượng bộ nhớ cần chiếm dụng của giải thuật (còn gọi
là tính hiệu quả của giải thuật )
→ chỉ đánh giá thời gian thực hiện giải thuật
Cấu trúc dữ liệu và giải thuật 27
1.2.3 Thiết kế và phân tích giải thuật
❖Đánh giá thời gian thực hiện giải thuật
▪ Thử nghiệm: không chính xác (vì phụ thuộc vào
nhiều yếu tố)
▪ Lý thuyết: Coi thời gian thực hiện giải thuật là một
hàm của cỡ dữ liệu vào. T(n)→ gọi là “độ phức tạp
của giải thuật”
▪ Cách xác định: tính số các phép toán sơ cấp mà giải
thuật cần dùng (lưu ý thao tác đặc trưng của giải
thuật)
Cấu trúc dữ liệu và giải thuật 28
14
- 8/4/2020
1.2.3 Thiết kế và phân tích giải thuật
❖Khái niệm hàm O lớn: Hàm T(n) được gọi là
Omega lớn của g(n), ký hiệu T(n) =O (g(n))
nếu c>0 và n0 sao cho với mọi n n0 :
T(n) c g(n)
Trong đó: g(n) là giới hạn trên của T(n).
Cấu trúc dữ liệu và giải thuật 29
1.2.3 Thiết kế và phân tích giải thuật
❖Quy tắc xác định độ phức tạp của giải thuật
▪ Quy tắc hằng số: Nếu P có T(n)= O(c1f(n)) →P có độ
phức tạp O(f(n)).
▪ Quy tắc lấy max: Nếu P có T(n)= O( f(n)+g(n)) thì P
có độ phức tạp là O( max ( f(n), g(n))).
▪ Quy tắc cộng: Nếu P1 có T1(n) = O(f(n)) và P2 có
T2(n)= O(g(n)), khi đó: T1(n) +T2(n) = O(f(n) +g(n)).
▪ Quy tắc nhân: Nếu P có T(n)= O(f(n)). Khi đó nếu
thực hiện k(n) lần P với k(n)=O(g(n)) thì độ phức tạp là
O(f(n) g(n)).
Cấu trúc dữ liệu và giải thuật 30
15
- 8/4/2020
1.2.3 Thiết kế và phân tích giải thuật
Áp dụng đánh giá chương trình
❖ Câu lệnh đơn thực hiện một thao tác
→QT hằng số
❖Câu lệnh hợp thành là một dãy các câu lệnh
→QT tổng
❖Câu lệnh rẽ nhánh dạng If ...else.
→QT Max
❖ Các câu lệnh lặp: while, do …while, for
→QT Nhân
Cấu trúc dữ liệu và giải thuật 31
1.2.3 Thiết kế và phân tích giải thuật
❖Ví dụ: chương trình lấy max ở trên
Cấu trúc dữ liệu và giải thuật 32
16
- 8/4/2020
1.2.4 Giải thuật đệ quy
❖Khái niệm: Ta nói một đối tượng là đệ quy nếu nó được
định nghĩa qua chính nó hoặc một đối tượng khác cùng
dạng với nó bằng quy nạp.
❖Ví dụ: Tính giai thừa/ tính tổ hợp
❖Giải thuật đệ quy: Nếu lời giải một bài toán P được thực
hiện bằng lời giải của bài toán P’ có dạng giống như P
thì đố là một lời giải đệ quy. Giải thuật tương ứng với lời
giải như vậy gọi là giải thuật đệ quy
Cấu trúc dữ liệu và giải thuật 33
1.2.4 Giải thuật đệ quy
❖Điều kiện:
▪ Có điểm dừng (trường hợp suy biến không cần đệ quy/
phần neo)
▪ Làm cho kích thước bài toán nhỏ hơn (để về gần TH
suy biến/ phần đệ quy)
❖Chú ý:
▪ P’ giống P
▪ P’ “nhỏ hơn” P theo nghĩa nào đó
Cấu trúc dữ liệu và giải thuật 34
17
- 8/4/2020
1.2.4 Giải thuật đệ quy
❖Thiết kế giải thuật đệ quy: 3bước
▪ Thông số hóa bài toán
▪ Tìm điều kiện dừng
▪ Phân rã bài toán
Cấu trúc dữ liệu và giải thuật 35
1.2.4 Giải thuật đệ quy
❖Ví dụ:
▪ Tìm từ trong từ điển
▪ Tìm tệp trong tệp trên máy tính
Cấu trúc dữ liệu và giải thuật 36
18
- 8/4/2020
1.2.4 Giải thuật đệ quy
❖Ưu điểm:
▪ Mạnh, rõ ràng, chặt chẽ
▪ Thiết kế TT đơn giản, ngắn gọn
▪ Trong một số giải thuật đệ quy cũng có hiệu quả cao (quick sort)
❖Nhược điểm:
▪ Lời gọi hàm tốn rất nhiều thời gian, không gian nhớ.
▪ Tốc độ chậm
▪ Thận trọng đừng để chạy vô hạn
❖Lưu ý: mọi giải thuật đệ quy đều có thể thay bằng một giải
thuật không đệ quy → khử đệ quy
Cấu trúc dữ liệu và giải thuật 37
1.2.4 Giải thuật đệ quy
❖Khử đệ quy (tự học)
Cấu trúc dữ liệu và giải thuật 38
19
- 8/4/2020
1.2.2 Ngôn ngữ diễn đạt giải thuật
#include void main()
#include {
#include int n,*a;
printf("nhap so phan tu:"); scanf("%d",
int max(int *x,int n) &n);
{ int result = x[0]; a=(int*)malloc(n*sizeof(int));
for (int i=1;i
nguon tai.lieu . vn