Tải bản đầy đủ (.pdf) (20 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (724.63 KB, 20 trang )

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 đề
❖ />hms/

❖b/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 tố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 tố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 tốn:









Tính
Tính
Tính
Tính
Tính
Tính
Tính

vào (input)
ra (output)
đơn định (xác định / đơn nghĩa)
đúng đắn
dừng (tính kết thúc / tính đóng)
phổ dụng
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 ngun 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

Max= ai

ai>Max

Xuất 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;iif (resultreturn result;
}

Cấu trúc dữ liệu và giải thuật

18

9


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: q trình modun hóa bài tốn và thiết kế
kiểu top-down (từ bài tố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 tố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 tố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 tố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 tố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 <stdio.h>
#include <conio.h>
#include <stdlib.h>
int max(int *x,int n)
{ int result = x[0];
for (int i=1;iif (resultresult=x[i];
return result;
}

void main()
{
int n,*a;
printf("nhap so phan tu:"); scanf("%d",
&n);
a=(int*)malloc(n*sizeof(int));
if (a==NULL)

{
printf("khong du bo nho");
exit(0);
}
printf("\n nhap cac phan tu cua day:\n");
for (int i=0;iscanf("%d",&a[i]);
printf("gia tri max cua day
la:%d",max(a,n));
getch();
}

Cấu trúc dữ liệu và giải thuật

39

Chương 2 (12t)
2.1 Mảng
2.2 Danh sách
2.3 Ngăn xếp
2.4 Hàng đợi

Cấu trúc dữ liệu và giải thuật

40

20




×