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

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

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 (2.71 MB, 609 trang )

1
_______________________________________________________________________
CÊu tróc d÷ liÖu vµ thuËt gi¶i - NguyÔn §×nh Hãa, ViÖn CNTT - §HQG HN



Ch−¬ng 1: C¸c kh¸i niÖm c¬ b¶n vÒ kiÓu d÷ liÖu trõu
t−îng vµ thuËt gi¶i


2
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

1. Trừu tợng hoá dữ liệu
1.1 Các bớc trừu tợng hoá
Từ dữ liệu thực tế đến dữ liệu của chơng trình máy tính
1- Dữ liệu thực tế (Data reality): dữ liệu thô, thông tin đầu vào.
2- Trừu tợng hoá dữ liệu (Data Abstraction)
3- Phân tích quan hệ (Data relatedness).
4- Biểu diễn mô hình dữ liệu (Data Representation)
5- Mã hoá (Data encoding)
Ví dụ: bài toán tìm đờng đi (ngắn nhất) từ ngã t Sở đến Hồ Hoàn Kiếm (Hà Nội).
- Dữ liệu thực tế: bản đồ đờng phố Hà Nội,
điểm đầu A (ngã t Sở),
điểm đích B (hồ Hoàn Kiếm).
3
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

Mô hình hóa


Trừu tợng hoá dữ liệu: Bản đồ đờng phố -> đồ thị.
Biểu diễn mô hình dữ liệu
Biểu diễn một đồ thị:
Vẽ ra giấy: tiện cho con ngời, máy tính không thể đọc và hiểu đợc.
Biểu diễn đồ thị trong chơng trình máy tính:
-ma trận kề
-danh sách kề.
là các cấu trúc dữ liệu khác nhau để biểu diễn đồ thị.

Mã hóa dữ liệu
4
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

1.2 Mô hình dữ liệu - Kiểu dữ liệu trừu tợng
Mô hình dữ liệu
Là kết quả trừu tợng hoá :
-loại bỏ các chi tiết không cần thiết,
-chỉ giữ lại các nét đặc trng bản chất, liên quan đến bài toán.
Các mô hình dữ liệu cơ bản
Mô hình tập hợp : cơ sở nhất, là nền tảng cho mọi mô hình khác, đơn giản nhất, giữa các
đối tợng cha xét một quan hệ nào.
Mô hình danh sách = mô hình dữ liệu tuyến tính: giữa các đối tợng có mối quan hệ là
trình tự đứng trớc, đứng sau.
Mô hình dữ liệu cây phân cấp :
-Khái quát từ : tổ chức của một doanh nghiệp, một đơn vị hành chính,
-Cấp trên (cha) chứa/quản lý nhiều cấp dới (con)
5
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN


-phi tuyến một phía : cha -> nhiều con

mô hình dữ liệu phi tuyến.
Mô hình đồ thị : mối quan hệ đa chiều, phi tuyến cả hai phía (so với mô hình cây hay mô
hình danh sách).
Kiểu dữ liệu trừu tợng
Mô hình dữ liệu là khái quát, trừu tợng hoá ở mức cao nhất.
Các kiểu dữ liệu trừu tợng (abstract data type) dẫn xuất từ mô hình chung ; có thêm
đặc điểm riêng.

Mô hình tập hợp : Kiểu tự điển và kiểu bảng
-kiểu tự điển (dictionary) = kiểu tập hợp có thứ tự (sorted set)
-kiểu bảng (table) : các đối tợng thuộc kiểu không có thứ tự hoặc thứ tự đó không
có ý nghĩa đối với bài toán.
6
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

Ví dụ kiểu bảng:
-tìm kiếm một mẫu dấu vân tay trong tập hợp dấu vân tay
-tìm thẻ tín dụng có nằm trong số thẻ bị đánh cắp hay không.


Mô hình danh sách : Kiểu ngăn xếp và kiểu hàng đợi
-kiểu danh sách FIFO (first in first out) = kiểu dữ liệu trừu tợng hàng đợi (queue).
-kiểu danh sách LIFO (last in first out) = kiểu dữ liệu trừu tợng ngăn xếp (stack).

Mô hình cây : Các kiểu cây :
-cây nhị phân,

- cây nhiều nhánh,
- cây nhị phân thứ tự bộ phận (heap),
- cây nhị phân tìm kiếm,
7
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

- cây AVL
- cây đỏ-đen


Kiểu dữ liệu trừu tợng là khái quát hóa của kiểu dữ liệu
- miền giá trị của kiểu.
- Các phép toán có thể thực hiện (với các dữ liệu đó).
- Nhiều phép toán thực sự là một thủ tục xử lí phức tạp.

Thiết kế các kiểu dữ liệu trừu tợng :
- Tạo ra một bộ các công cụ có hiệu năng tốt để giải quyết một cách có hiệu quả các loại
bài toán khác nhau gặp trong thực tế.
8
_______________________________________________________________________
CÊu tróc d÷ liÖu vµ thuËt gi¶i - NguyÔn §×nh Hãa, ViÖn CNTT - §HQG HN


1.3 CÊu tróc d÷ liÖu - biÓu diÔn kiÓu d÷ liÖu trõu t−îng
Kh¸i niÖm cÊu tróc d÷ liÖu
CÊu tróc d÷ liÖu lµ c¸i thÓ hiÖn cô thÓ cña mét kiÓu d÷ liÖu.

VÝ dô vÒ cÊu tróc d÷ liÖu
§Ó biÓu diÔn mét danh s¸ch cã thÓ sö dông c¸c c¸ch ‘cÊu tróc d÷ liÖu’ kh¸c nhau.

- Dïng mét m¶ng -> cÊu tróc danh s¸ch m¶ng.
- Mãc nèi qua con trá -> cÊu tróc danh s¸ch mãc nèi.
9
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

1.4 Tại sao cần nghiên cứu cấu trúc dữ liệu và kiểu dữ liệu trừu tợng
Lợi ích của trừu tợng hoá dữ liệu
- sử dụng lại nh các mô đun làm sẵn, giải các bài toán khác cùng loại.
- tách rời việc xây dựng cấu trúc dữ liệu với thiết kế chơng trình cần sử dụng chúng.
Ngời xây dựng cấu trúc dữ liệu, triển khai các phép toán độc lập với ngời sử dụng, miễn là
đúng nh đặc tả.
- che giấu thông tin, ngời sử dụng các kiểu dữ liệu làm sẵn không cần biết nó đợc
triển khai cụ thể ra sao.
- để chậm lại về sau phần triển khai cụ thể.
Các yêu cầu khi xây dựng kiểu dữ liệu và cấu trúc dữ liệu
phải cân nhắc giữa các mặt đối lập để có lựa chọn thiết kế tốt nhất, hợp lý nhất.
- Vừa đủ về chức năng: xu hớng tối đa >< xu hớng tối thiểu (các chức năng làm sẵn).
- Khái quát đúng mức : khái quát cao >< cụ thể cao (= khái quát thấp)
10
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

-> linh hoạt cao >< dễ sử dụng, sẵn dùng ngay.
- Hiệu quả cao : tiết kiệm chi phí về thời gian xử lí và không gian bộ nhớ.

2. Thuật giải
2.1 Các khái niệm cơ bản
Thuật giải là gì
Thuật giải hay thuật toán (Algorithm) là một khái niệm cơ sở

nôm na: là một dãy hữu hạn các quy tắc, thao tác, phép toán để giải quyết một vấn đề.
5 đặc trng (theo Knuth).
1- Xác định rõ dữ liệu đầu vào.
11
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

2- Xác định rõ kết quả đầu ra.
3- Tính xác định.
4- Tính khả thi.
5- Tính dừng.
Trình bày thuật giải
- liệt kê lần lợt các bớc, dùng ngôn ngữ tự nhiên thông thờng: mập mờ, hiểu sai
- sơ đồ khối = lu đồ (flow chart).
- ngôn ngữ lập trình: chính xác nhất. Nhng che lấp mất ý tởng chính của thuật giải.

-> Tựa ngôn ngữ lập trình = mã giả (pseudo code).

Tính hiệu quả của thuật giải
Giải một bài toán, có nhiều thuật giải khác nhau.
12
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

Thế nào một thuật giải "tốt". hai tiêu chí:
1 - Đơn giản, dễ hiểu, dễ lập trình;
2 - Cho lời giải nhanh, dùng ít tài nguyên máy tính.
Tiêu chuẩn 2 chính là tính hiệu quả của cấu trúc dữ liệu và thuật giải.
Tại sao cần xây dựng thuật giải hiệu quả
Tốc độ máy tính ngày càng nhanh. Liệu việc cải tiến thuật giải để giảm bớt đi một số

phép toán có ý nghĩa gì không ?
Ví dụ minh họa tầm quan trọng của một thuật giải hiệu quả.
Bài toán tính định thức cấp n. det(M).
a) Thuật toán đệ quy: khai triển định thức theo hàng (cột).
n.(n-1).(n-2) 1 = n! phép tính nhân.
mất nhiều năm để tính định thức cấp 100 !!!

b) Thuật toán khử Gauss-Jordan: Đa ma trận về dạng đờng chéo
13
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

n
3
phép tính.

3. Đánh giá hiệu quả cấu trúc dữ liệu và thuật giải bằng phơng
pháp giải tích
3.1 Thời gian thực hiện thuật giải đo bằng tổng số phép toán sơ cấp
phép toán là một khái niệm rộng.
phải thống nhất quy định: những thao tác nào đợc tính là một phép toán -> khái niệm
phép toán sơ cấp.
Các phép toán sơ cấp
- các phép tính số học, lôgic, so sánh
14
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

- các phép chuyển chỗ, gán trị
- lời gọi hàm, thủ tục


thời gian thực hiện đủ ngắn, không vợt quá một hằng số nào đó, không phụ thuộc n.
Thời gian tính toán phụ thuộc kích thớc bài toán
kích thớc của bài toán = kích thớc của dữ liệu đầu vào.
là số nguyên dơng n = tổng số mục dữ liệu đầu vào.
Thuật giải (thủ tục) P để giải bài toán có kích thớc n sẽ cần tổng cộng C
P
(n) các phép
toán sơ cấp.
C
P
(n) là một hàm của tham số n.
là tính hiệu quả của thuật giải P.
là độ phức tạp (complexity) của thuật giải P.
15
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

3.2 Ước lợng tiệm cận thời gian thực hiện thuật giải
Kí hiệu O lớn và các bậc vô cùng lớn
Định nghĩa: f(n), g(n) là hai hàm số không âm, đồng biến theo n.
f(n) = O(g(n)) <=>

c để f(n)

c.g(n) kể từ n

n
o
nào đó.

Ví dụ: f(n) = 2n
2
+ 3n + 5.
f(n)

2n
2
+ 3n
2
+ 5n
2
= 12n
2
với mọi n

1.
-> f(n) = O(n
2
).
Viết C
P
(n) = O(g(n)) nghĩa là :
tốc độ tăng của C
P
(n) không vợt quá tốc độ tăng của g(n).

Lu ý: Cách viết C
P
(n) = O(g(n)) là một thói quen không chính xác.
Đúng ra, phải viết C

P


O(g).
16
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

O(g) là lớp các hàm có bậc lớn không quá g:
O(g) = { f

M : c, n
0
sao cho f(n)

c.g(n) n

n
o
},


Các đơn vị đo tốc độ tăng
Cố gắng ớc lợng g(n) sao cho sát với C
P
(n) nhất
Các hàm sau hay đợc sử dụng:
17
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN



Kí hiệu O lớn Tên thờng gọi của vô cùng lớn
O(1)
hằng số
O(log n)
O(n)
O(n log n )
O(n
2
)
O(n
3
)
O(n
k
)

logarit
tuyến tính
n log n
bình phơng
lập phơng

O(2
n
)
O(n!)
O(n
n

)

hàm mũ

18
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

Hình 1.1: Bảng các vô cùng lớn thờng dùng

Minh họa tốc độ tăng

Log

n n n.log n n
2
n
3
2
n
0
1
2
3
4
5
1
2
4
8

16
32
0
2
8
24
64
160
1
4
16
64
256
1024
1
8
64
512
4096
32768
2
4
16
256
65536
4,294,967,296

Các kí hiệu tiệm cận khác
Để đơn giản, xét giới hạn (nếu có)
L(f,g) = lim

n->


)(
)(
ng
nf

Các kí hiệu tiệm cận sau đây sẽ đợc áp dụng:


o(g) = { f M : L(f,g) = 0 }
O(g) = { f M : 0 L(f,g) < }
(g) = { f M : 0 < L(f,g) < }
(g) = { f M : 0 < L(f,g) }
(g) = { f M : L(f,g) = }
ý nghĩa:
o(g) là tập hợp các hàm có bậc lớn nhỏ hơn g;
O(g) là tập hợp các hàm có bậc lớn nhỏ hơn hay bằng g;

(g) là tập hợp các hàm có bậc lớn tơng đơng g;
19
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

20
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN



(g) là tập hợp các hàm có bậc lớn lớn hơn hay bằng g;

(g) là tập hợp các hàm có bậc lớn lớn hơn g.
Dễ thấy rằng
1- O(g) = o(g) (g); (g) = (g) (g)
2- (g) = O(g) (g).
3- là quan hệ tơng đơng: f (g) khi và chỉ khi g (f).
4- Nếu f O(g) , g O(f) thì f (g).
3.3 Cách ớc lợng thời gian thực hiện thuật giải
Quy tắc tổng
Nếu C
P1
(n) = O(f(n)), C
P2
(n) = O(g(n)),
thì C
P1
(n) + C
P2
(n) = O (max{f(n), g(n
)
}).

21
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

Ví dụ: Thuật giải gồm hai thủ tục kế tiếp nhau P = { P
1
, P

2
}
P
1
có thời gian là C
P1
(n
)
= O(f(n)),
P
2
có thời gian là C
P2
(n
)
= O(g(n)),
C
P
(n) = C
P1
(n) + C
P2
(n) = O (max {f(n), g(n
)
}).
Tính thời gian thực hiện các câu lệnh
quy ớc t(n), là thời gian thực hiện câu lệnh S,
t
i
(n) là thời gian thực hiện câu lệnh S

i

- Các lệnh đơn nh gán, đọc, viết, so sánh : O(1).
- Lệnh ghép: S = { S
1
, S
2
, , S
p
}, theo quy tắc tổng.
- Lệnh rẽ nhánh: IF <điều kiện> THEN S
1
ELSE S
2
ENDIF
O(max { t
1
(n),t
2
(n)})
- Lệnh lựa chọn: CASE <điều kiện> DO S
i
ENDCASE
tơng tự nh câu lệnh if .
- Lệnh vòng lặp: FOR <điều kiện> DO S ENDFOR
(số lần lặp) ì t(n)
- Các lệnh vòng lặp WHILE , REAPEAT tơng tự nh FOR.

Ví dụ
Tính e

x

e
x
= 1 +
!1
x
+
!2
2
x
+
!3
3
x
+ +
!n
x
n


Thuật giải 1 : tính từng số hạng rồi cộng lại

Exponential(x)
//Input: x số thực
//Output: return số thực
22
_______________________________________________________________________
Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN


S ← 1
for i ← 1 to n do
p ← 1
for j ← 1 to i do
p ← (p.x/j)
endfor
S ← S+p
endfor
return S

Vßng for bªn trong cã sè phÐp to¸n b»ng i.
Tæng sè phÐp to¸n C
P1
(n) = 1+2+ + n =
2
)1(

nn
= O(n
2
).


ThuËt gi¶i 2 : KÕ thõa, dïng kÕt qu¶ cña b−íc tr−íc, tÝnh sè h¹ng sau qua sè h¹ng tr−íc,
23
_______________________________________________________________________
CÊu tróc d÷ liÖu vµ thuËt gi¶i - NguyÔn §×nh Hãa, ViÖn CNTT - §HQG HN

!n
x

=
n
x
.
)!1(
1


n
x
n


S ← 1; p ← 1
for i ← 1 to n do
p ← (p*x/i)
S ← S+p
endfor
return S

Tæng sè phÐp to¸n C
P2
(n) = O(n).

24
_______________________________________________________________________
CÊu tróc d÷ liÖu vµ thuËt gi¶i - NguyÔn §×nh Hãa, ViÖn CNTT - §HQG HN

25
_______________________________________________________________________

Cấu trúc dữ liệu và thuật giải - Nguyễn Đình Hóa, Viện CNTT - ĐHQG HN

3.4 Các ớc lợng chi phí thời gian thực hiện thuật giải
Vấn đề hình trạng dữ liệu đầu vào
hình trạng dữ liệu -> bài toán dễ / khó !
bài toán sắp xếp một dãy số.
-nếu dãy đã có sẵn thứ tự mong muốn -> dễ
-dãy bất kì -> khó hơn
Các trờng hợp:
- Trờng hợp thuận lợi nhất, C
P
(n) là nhỏ nhất.
minCost
P
(n) = ớc lợng dới hay chi phí tối thiểu (best-case measure, best-case cost).
- Trờng hợp bất lợi nhất, C
P
(n) là lớn nhất.
maxCost
P
(n) = ớc lợng trên hay chi phí tối đa (worst-case measure, worst-case cost).
- Trờng hợp dữ liệu vào là ngẫu nhiên bất kì (ta cần cái này !)
Phân tích dới đây !

×