1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Một số khái niệm cơ bản về cấu trúc dữ liệu và giải thuật

12 42 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 456,94 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Một số khái niệm cơ bản về cấu trúc dữ liệu và giải thuật cung cấp cho người học các kiến thức: Các khái niệm, quan hệ giữa giải thuật và cấu trúc DL, vị trí cấu trúc dữ liệu trong một áp dụng tin học, tìm hiểu tổ chức một số CTDL cơ bản. Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

1

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Số tín chỉ: 3

2

Phân bổ thời gian

 Giảng lý thuyết trên lớp: 70%

 Thực hành : 30%

 Tự học/ nghiên cứu : 200 %

Nội Dung Chương Trình

Chương 1: Một số khái niệm cơ bản về cấu trúc

dữ liệu và giải thuật

Chương 2: Danh sách đặc (condensed list)

Chương 3: Danh sách liên kết (linked list)

Chương 4: Cây (tree)

Chương 5: Bảng băm

Chương 6: Đồ thị (Graph)

Tài Liệu Tham Khảo

Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật , Nxb

Khoa học Kỹ thuật, 1995

 Deshpande, Kakde, C & data structures,

Massachusetts, 2004(pdf)

 Introduction To Algorithms 2NdEdition

 Bài soạn của giảng viên

 Các tài liệu điện tử/ website

Trang 2

5

Đánh giá học phần

 Kiểm tra/ thi giữa kỳ: 30%

 Thi cuối kỳ : 60%

6

CHƯƠNG 1

MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ CTDL VÀ GIẢI THUẬT

Nội Dung

 1.1 Các khái niệm

 1.2 Quan hệ giữa giải thuật và cấu trúc DL

 1.3 Vị trí cấu trúc dữ liệu trong một áp dụng tin

học

1.1 Các khái niệm

 Môn học giới thiệu

 Các cấu trúc dữ liệu cơ bản

 Các giải thuật điển hình trên các cấu trúc dữ liệu đó

Cấu trúc dữ liệu là một kết hợp nhiều

thành phần dữ liệu khác nhau thành một thực thể thống nhất để thể hiện một kiểu dữ liệu

Trang 3

9

Cấu Trúc Dữ Liệu

 Cách tổ chức lưu trữ dữ liệu

 Phải biểu diễn đầy đủ thông tin

 Phải phù hợp với các thao tác trên đó

 Tiết kiệm tài nguyên hệ thống

10

Vai Trò Của Cấu Trúc Dữ Liệu

 Cấu trúc dữ liệu đóng vai trò quan trọng trong việc kết hợp và đưa ra cách giải quyết bài toán

 CTDL hỗ trợ cho các thuật toán thao tác trên đối tượng được hiệu quả hơn

Các kiểu cấu trúc dữ liệu cơ bản

 Bản ghi (struct)

 Danh sách liên kết (list)

Thuật toán

Thuật toán: Một dãy hữu hạn các chỉ thị có thể thi

hành để đạt mục tiêu đề ra nào đó

Ví dụ: Thuật toán tính tổng tất cả các số nguyên

dương nhỏ hơn n gồm các bước sau:

Bước 1: S=0, i=1;

Bước 2: nếu i<n thì s=s+i;

Ngược lại: qua bước 4;

Bước 3:

i=i+1;

Quay lại bước 2;

Bước 4: Tổng cần tìm là S.

Trang 4

13

Các Tiêu Chuẩn Của Thuật Toán

 Xác định rõ dữ liệu đầu vào

 Xác định rõ kết quả đầu ra

 Tính xác định: cùng một dữ liệu đầu vào thì cùng

đưa đến một kết quả đầu ra

 Tính khả thi: đơn giản, làm được, thời gian hữu

hạn

sẽ phải kết thúc

14

Sự Cần Thiết Của Thuật Toán

không thể hoàn thành được

 Nhờ vào sự tiến bộ của kỹ thuật: tăng cấu hình máy  chi phí cao 

và chi phí thấp 

“Một máy tính siêu hạng vẫn không thể cứu vãn một

thuật toán tồi!”

Biễu Diễn Thuật Toán

Biểu Diễn Bằng Ngôn Ngữ Tự Nhiên

liệt kê để biễu diễn thuật toán

biểu diễn (mã giả, lưu đồ, )

 Đôi lúc khó hiểu, không diễn đạt được thuật toán

Trang 5

17

Lưu Đồ

thể hiện các chức năng khác nhau

A

B

A

Begin

End

Thực hiện A Gọi hàm A Vào / Ra dữ liệu

Điều kiện rẻ nhánh B

Đúng Sai

Nút giới hạn bắt đầu / kết thúc chương trình

18

Biểu Diễn Bằng Lưu Đồ

Bắt đầu a max = a 0

i<n

i = 1

a max là lớn nhất Kết thúc

a max < a i

i = i+1

a max =a i

S

S

Đ

Đ

Tìm phần tử mang giá trị lớn nhất trong mảng

Biểu Diễn Bằng Mã Giả

Pascal, C

Biểu Diễn Bằng Mã Giả

Một số quy ước

1 Các biểu thức toán học

2 Lệnh gán: “=” (AB)

3 So sánh: “==”, “!=”

4 Khai báo hàm (thuật toán)

Thuật toán <tên TT> (<tham số>) Input : <dữ liệu vào>

Output : <dữ liệu ra>

<Các câu lệnh>

End

Trang 6

21

Biểu Diễn Bằng Mã Giả

5 Các cấu trúc:

Cấu trúc chọn:

ifthen … [else …]

Vòng lặp:

while do

do while (…)

for do

6 Một số câu lệnh khác:

Trả giá trị về: return [giá trị]

Lời gọi hàm: <Tên>(tham số)

22

Biểu Diễn Bằng Mã Giả

Ví dụ: Tìm phần tử lớn nhất trong mảng một

chiều

amax=a0; i=1;

while (i<n)

if(amax<ai) amax= ai; i++;

end while;

Biểu Diễn Bằng Ngôn Ngữ Lập Trình

 Dùng ngôn ngữ máy tính (C, Pascal, ) để diễn tả

thuật toán, CTDL thành câu lệnh

 Kỹ năng lập trình đòi hỏi cần học tập và thực

hành (nhiều)

chuyển hoá bài toán sang mã chương trình cụ

thể

 Nhớ giải thuật (mã giả)

Trang 7

25

Độ Phức Tạp Của Thuật Toán

 Một thuật toán hiệu quả:

 Chi phí cần sử dụng tài nguyên thấp: Bộ nhớ,

thời gian sử dụng CPU, …

Nlà khối lượng dữ liệu cần xử lý

f(N)

thuật toán:

26

Phương Pháp Thực Nghiệm

 Cài thuật toán rồi chọn các bộ dữ liệu thử nghiệm

bộ dữ liệu đó

Ưu điểm: Dễ thực hiện.

Nhược điểm:

 Ảnh hưởng bởi trình độ của người lập trình

tất cả tập các dữ liệu vào của thuật toán: khó khăn và tốn nhiều chi phí

Phương Pháp Xấp Xỉ

 Đánh giá giá thuật toán theo hướng tiệm xấp xỉ

tiệm cận qua các khái niệm O()

Ưu điểm: Ít phụ thuộc môi trường cũng như phần

cứng hơn

Nhược điểm: Phức tạp.

Phương Pháp Xấp Xỉ

Ký pháp

Giả sử T(n) là thời gian thực hiện TT và f(n), g(n), h(n) là các hàm xác định dương

nếu  các hằng số dương c1 ,c2,n0 sao cho với mọi n>= n0:

c 1 g(n) <= T(n) <= c 2 g(n)

Trang 8

29

Phương Pháp Xấp Xỉ

 Hàm Omega lớn:

T(n) hàm Omega lớn của g(n):

T(n)= Ω(g(n)) nếu  c và n0 sao cho với

mọi n>= n0

T(n) >= c.g(n)

30

Phương Pháp Xấp Xỉ

nếu  c và n0sao cho với mọi n>= n0 :

T(n) <=c g(n)

 g(n) giới hạn trên của T(n).

Ví dụ, nếu T(n) = n2 + 1 thì T(n) = O(n2).

Chọn c=2 và n0 =1, khi đó với mọi n>=1, ta

có T(n)= n2+1 <= 2n2 =2g(n).

Phương Pháp Xấp Xỉ

Các tính chất

O(h(n)) thì f(n)= O(h(n))

Trang 9

33

Xác định độ phức tạp

Quy tắc hằng số

Nếu P có T(n)= O(c1f(n)) P có độ

phức tạp O(f(n)).

CM: T(n)= O(c1f(n)) nên tồn tại c0>0 và n0>0

để T(n) <= c0.c1f(n) với mọi n>= n0.

Đặt c=c0.c1ta có điều cần CM

34

Xác định độ phức tạp

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))).

CM: T(n) = O( f(n)+g(n)) nên tồn tại n0>0 và c>0 để T(n) <= cf(n) + cg(n), với mọi n>= n0

vậy T(n) <= cf(n) +cg(n) <= 2c max (f(n),g(n)) với mọi n>=n0

Từ đó suy điều cần CM

Xác định độ phức tạp

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)).

CM: Vì T1(n)= O(f(n)) nên các hàng số c1và n1sao

cho T(n) <= c1.f(n) n: n>= n1

Vì T2(n) =O(g(n)) nên các hàng số c2và n2sao

cho T(n) <= c1.g(n) n: n>= n2

Chọn c= max (c1,c2) và n0= max(n1,n2) ta có n:

n>= n0:

T(n) = T1(n) + T2(n) <= c1f(n) + c2g(n)

Xác định độ phức tạp

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)).

CM: Thời gian thực hiện k(n) lần đoạn chương trình P sẽ là k(n) T(n), theo định nghĩa:

  ck>=0 và nk>0 để k(n) <= ck(g(n)) với mọi n>= nk

  cT>=0 và nT>0 để T(n) <= cTf(n) với mọi n>= nT Vậy với mọi n >= max(nT,nk) ta có k(n)T(n) <=

ckcT(f(n)g(n)).

Trang 10

37

4 Bài toán và thuật toán

e) Á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à dãy các câu lệnh

QT tổng

 Câu lệnh rẽ nhánh dạng If then else

QT Max

 Các câu lệnh lặp QT Nhân

38

Ví dụ 1

Analysing an Algorithm

• Simple statement sequence

s 1 ; s 2 ; … ; s k

• O(1) as long as kis constant

• Simple loops

for(i=0;i<n;i++) { s; }

where s is O(1)

• Time complexity is n O(1) or O(n)

• Nested loops

for(i=0;i<n;i++)

for(j=0;j<n;j++) { s; }

• Complexity is n O(n) or O(n2)

This part is

O(n)

Analysing an Algorithm

• Loop index doesn’t vary linearly

h = 1;

while ( h <= n ) { s;

h = 2 * h;

}

• h takes values 1, 2, 4, … until it exceedsn

• There are1 + log 2 n iterations

• Complexity O(log n)

Ví dụ 2

Ví dụ 3

Analysing an Algorithm

• Loop index depends on outer loop index

for(j=0;j<n;j++)

for(k=0;k<j;k++){

s;

}

• Inner loop executed

• 1, 2, 3, …., n times

Complexity O(n2)

n

i =

i =1

n(n+1)

2

Distinguish this case -where the iteration count increases (decreases) by a constant  O(n k )

from the previous one -where it changes by a factor

 O(log n)

Trang 11

41

Một số dạng hàm

Đa thức bậc k: P(n), O (nk).

 logaf(n), O(log f(n))

Hằng số, O(1)

 Hàm mũ O(2n.)

42

4 Bài toán và thuật toán

8

Sự Phân Lớp Theo Độ Phức Tạp Của Thuật Toán

Sử dụng ký hiệu BigO

Độ phức tạp tăng dần

Trang 12

45

1.2 Quan hệ giữa giải thuật và cấu trúc DL

 Niklaus Wirth:

CTDL + Thuật toán = Chương trình

Data structures + Algorithms =Program

 Cấu trúc dữ liệu cụ thể: chọn giải thuật

 Giải thuật cụ thể: chọn cấu trúc dữ liệu

46

1.3 Vị trí CTDL trong tin học

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

1.4 Tìm hiểu tổ chức một số CTDL cơ bản

Ngày đăng: 08/05/2021, 18:44

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w