Trang 4 Định nghĩa cây1.Tốn học: thơng qua đồ thị định hướng Trang 6 Cây & Đồ thịđịnh hướng Câylà một đồ thị định hướng thỏa mãn các tính chất sau Có một đỉnh đặc biệt được gọi làgốc
Trang 1Bài 1: Cây
Trang 3Giới thiệu
Ví dụ: tập hợp các thành
viên trong một dòng họ với quan hệ cha –con
Trong ngành công nghệ
thông tin, cây là mô hình trừu tượng của một cấu trúc phâncấp
Trang 4Định nghĩa cây
1 Toán học: thông qua đồ thị định hướng
Trang 5 Mỗi cung là một cặp có thứ tự các đỉnh khác nhau (u,v)
(u,v) và (v,u) là hai cung khác nhau
Trang 6Cây & Đồ thịđịnh hướng
Cây là một đồ thị định hướng thỏa mãn các tính chất sau
Có một đỉnh đặc biệt được gọi làgốc cây
Mỗi đỉnh Cbất kỳ không phải là gốc, tồn tại duy nhất một đỉnh P
có cung đi từ P đến C Đỉnh P được gọi là cha của đỉnh C, và C là
Trang 7Các thuật ngữ (1/2)
Trong cây nếu có đường đi từ đỉnh A tới đỉnh B
thì Ađược gọi là tổ tiên của B, hay B là con cháu
củaA
Cácđỉnh cùng cha được xem là anh em
Cácđỉnh không có con được gọi là lá
Một đỉnh bất kỳ Acùng với tất cả các con cháu
của nó lập thành một cây gốc là A Cây này được gọi là cây con của cây đã cho.
Độ cao của một đỉnh là độ dài đường đi dài nhất
từ đỉnh đó tới một lá.
Độ cao của lá bằng0.
Độ cao của cây là độ cao của gốc
Độ sâu của một đỉnh là độ dài đường đi từ gốc
Trang 8 Cây được sắp : các đỉnh concủa
mỗi đỉnhđược sắp sếp theo một thứ thứ tự xác định
A
Trang 10 tùy theo CTDL đượcsử dụng
để cài đặt KDLTT cây
Trang 13Bài tập: Điền vào chỗ trống trong bảng
Địachỉ Data FirstChild NextSibling
Trang 17Duyệt theo thứ tự trước
Trang 19Duyệt theo thứ tự trong
Trang 20AlgorithminOrder(r)
if isInternal (r)then
inOrder (leftChild(r)) visit(r)
if isInternal (r)then
s ←leftChild(r)
while hasNextSibling(s)do
s←nextSibling(s) inOrder(s)
Trang 21Duyệt theo thứ tự sau
Duyệt lần lượt các cây
con T1, Tk theo thứ tự sau
Trang 22todo.txt 1K
Trang 24Cây nhị phân
Cây nhị phân là cây đượcsắp
với các tính chấtsau:
Mỗi đỉnh có nhiều nhất 2 con
Đỉnh con của một đỉnh được gọi là con trái hoặc con phải
Đỉnh con trái đứng trước đỉnh con phải
Cây nhị phân được gọilà
chuẩn (proper) nếu mỗiđỉnh
có 2 con hoặc không có con nào
tức là mỗi đỉnh trong có chính xác 2con
cây nhị phân không có tính chất này thì gọi là không chuẩn (improper)
Trang 26Cây quyết định
Cây nhị phân biểu diễn quy trình ra một quyết định
đỉnh trong: câu hỏi với câu trả lời yes/no
lá: quyết định
Ví dụ: quyết định chọn cửa hàng ăn
Want a fast meal?
How aboutcoffee? On expense account?
Trang 27Tính chất của cây nhịphân chuẩn
Trang 28KDLTT cây nhị phân BinaryTree
KDLTT cây nhị phân BinaryTree thừa kế KDLTT câyTree
Trang 29Cài đặt cây nhị phân
root
A
F E
T data;
Node<T>* left; Node<T>* right; };
Node<char>* root;
Trang 30Bài tập: Vẽ cây có root = 60
Trang 31Duyệt cây nhị phân theo thứ tự giữa
y(v) = độ sâu củav
AlgorithminOrder(v)
if isInternal(v)
inOrder (leftChild(v)) visit(v)
if isInternal(v)
inOrder (rightChild(v))
31
Trang 33Vấn đề
chức cấu trúc dữ liệu để thực hiện các phép toán sau một cách hiệu quả
Trang 34Cây tìm kiếm nhịphân
Cây tìm kiếm nhị phân là cây
nhị phân lưu khóa (hoặc cặp khóa -dữ liệu) ở các đỉnh trong của nó và thỏa mãn tính chất sau:
Gọi u, v, w là 3 đỉnh sao chou
nằm trong cây con tráicủa v và
w nằm trong cây con phảicủa
v Tacó key(u) £ key(v) £key(w)
Cáclá tạm thời không lưu dữ
liệu
Duyệt cây tìm kiếm nhị phân theo thứ tự trong sẽ thăm các khóa theo thứ tự tăng dần
6
9 2
4
Trang 35 Nếu ta tiến tới một lá thì kết
luận không thấy khóa và trả
Trang 36w
5
Trang 379 2
<
>
Trang 38 sao key(w) vào đỉnh v
ta loại đỉnh w và con tráiz của
2
Trang 39Phân tích độ phứctạp
Xét tập hợp có n phần tử cài đặt
bởi cây tìm kiếm nhị phân độ caoh
không gian sử dụnglà O(n)
các hàm find , insert và erase thực hiện trong thời gianO(h)
Độ cao h bằng O(n) trongtrường hợp xấu nhấtvà O(log n) trong
trường hợp tốtnhất
Trang 41Bài 2: Bảng băm
Trang 43KDLTT từ điển
Là tập hợp trong đó mỗi phần
tử là một cặp(khóa, dữ liệu)
Có thể tìm kiếm theo khóa
Được sắp hoặc không được sắp
Ứng dụng
Từ vựng –nghĩa
Tên miền – địa chỉIP
Mã sinh viên – hồsơ SV
Các phép toán
find(k) trả về 1 phần tử có khóa k Nếu không thấy trả
về NULL.
insert(k, v) thêm phần tử (k, v) và trả về con trỏ tới nó
erase(k) loại bỏ phần tử bất
kì có khóa bằngk
erase(p) loại bỏ phần tử trỏ bởi p
size() trả về số lượng phần tử
empty() kiểm tra xem từ điển rỗng haykhông
Trang 44Phương án cài KDLTT từ điển
Trang 45Cài KDLTT từ điển bằngmảng
Nếu khoá của dữ liệu là số nguyên không âm và nằm trong khoảng[0 SIZE-1]
có thể sử dụng một mảng data có cỡ SIZE
dữ liệu có khoá k sẽ được lưu trong data[k]
tìm kiếm, xen, loại đều thực hiện trong thời gian O(1)
Thực tế không khả thi vì
số phần tử dữ liệu có thể rất nhỏ so với SIZE
khoá có thể không phải là số nguyên
Tamuốn lợi dụng tính ưu việt của phép truy cập trực tiếp củamảng
Trang 46Phương pháp băm
Lưu tập dữ liệu trong mảng Tvới cỡ là SIZE
Hàm băm: là hàm ứng với mỗi giá trị khoá k của dữ liệu với một chỉ
số i (0 <= i<= SIZE-1)
Dữ liệu này sẽ được lưu trongT[i]
h : K à {0,1,…,SIZE-1}
0 1
i
SIZE-1
… Hàm băm h
Tập các giá trị khoá
Trang 50Khóa là số nguyên khôngâm
số nguyên tố có dạng đặc biệt, chẳng hạn có dạng 4k+3
Phương pháp nhân
Ø h(k) = ë(ak -ëakû) SIZEû
Ø Ký hiệu ëxûchỉ phầnnguyên của số thực x
Ø Thực tế thườngchọn
a = F- 1 » 0,61803399
Trang 51Khoá là xâu kýtự
Trước tiên, đổi các xâu ký tự thành các số nguyên, dùng bảng mãASCII
Xâu ký tự có thể xem như một số trong hệ đếm cơ số 128
Sau đóchuyển sang hệ đếm cơ số 10
Trang 52Giải quyết vachạm
Dữ liệu d1với khoá k1 đã được lưu trong T[i], h(k1)=i
Ta cần thêm dữ liệu d2 với khoák2
nếu h(k2) = i thì dữ liệu d2 cần được đặt vào vị trí nào?
Phương pháp tạodây chuyền (separate chaining)
tạo ra một CTDLlưu giữ tất cả các dữ liệu có cùng vị trí i và
“gắn” CTDLnày vào vị trí đó trong bảng
Trang 53Phương pháp định địa chỉmở
Giả sử vị trí ứng với khoá k là i, i=h(k)
Từ vị trí này, lần lượt xem xét các vị trí i0,i1, i2,…, im,…
Trong đó i0= i, im là vị trí thăm dò lần thứ m.
Dãy này được gọi là dãy thăm dò.
Xác định dãy thăm dò
Thăm dò tuyến tính (linear probing)
Dãy thăm dò là i , i+1, i+2 , …
Thăm dò bình phương (quadratic probing)
Dãy thăm dò là i , i + 1 2 ,i + 2 2 ,… , i + m 2 ,…
Băm kép (double hashing)
Dãy thăm dò là h1(k) + m h2(k), với m = 0, 1,2, …
Trang 54có data}
Trang 55Nhận xét (1/2)
Thăm dò tuyếntính
Ưu điểm: cho phép xét tất cả các vị trí trong mảng
phép insert luôn thực hiện được, trừ khi mảng đầy
Nhược điểm:
dữ liệu tập trung thành các đoạn
tìm kiếm tuần tự trong từng đoạn
Trang 56 phép insert có thể không thực hiện được
nếu cỡ của mảng là số nguyên tố, thì thăm dò bình phương cho phép ta tìm đến một nửa số vị trí trong mảng
Băm kép
nếu cỡ của mảng và bước thăm dò h2(k) nguyên tố cùng nhau thì phương pháp băm kép cho phép tìm đến tất cả các vị trí trong mảng
Trang 57Phương pháp tạo dâychuyền
Trang 58Hiệu quả của phương phápbăm
Tham số a
Băm đ/c mở: mức độ đầy (load factor)
a tăng thì khả năng va chạm tăng
Khi thiết kế, cần đánh giá max của N để lựa chọn SIZE
a không nên vượt quá 2/3
Băm dây chuyền: độ dài trung bình của một dây chuyền
SIZE
N
a =
Băm đ/c mở, Thăm dò tuyến tính
Băm đ/c mở, Thăm dò bình phương
Băm dây chuyền
Thời gian
trung
bình
Tìm kiếm thành công
Trang 59Bài 3: Hàng ưu tiên
Trang 60Nội dung chính
1 KDLTT hàng ưu tiên
2 Các phương pháp cài đặt
Trang 61 Các phép toán
insert(k, o) xen vào hàng
ưu tiên đối tượng o có giá trịưu tiên k
findMin()tìm đối tượng có giá trị ưu tiên nhỏ nhất
Thực hiện được nếu hàng không rỗng
removeMin() loại bỏvà trả
về đối tượng có giá trị ưu tiên nhỏ nhất.Thực hiệnđược nếu hàng khôngrỗng
findMinKey() tìm giá trị ưutiên nhỏ nhất.Thực hiệnđược nếu hàng khôngrỗng
Trang 63Wikipedia: priority queue
Trang 64NIST’s DADS: priority queue
Trang 65Standard Template Library
Trang 66Nội dung chính
2 Các phương pháp cài đặt
Trang 68Cài đặt hàng ưu tiên bởi mảng
Mảng không
sắp
Q = {(7,D), (3,B), (9,C), (5,A)} 7,D 3,B 9,C 5,A
Trang 69Cài đặt hàng ưu tiên bởi cây tìm kiếm
5,A
7,D
9,C 3,B
Trang 70Cây thứ tựbộ phận (heap)
Cây nhị phân hoàn toàn
có tất cả các mức của câyđều không thiếu đỉnh nào, trừ mức thấp nhất được lấp đầy kể từ bên trái
Min heap là một cây nhị phân
hoàn toàn với tính chất
khóa của một đỉnh bất kỳ nhỏ hơn hoặc bằng khóa của các đỉnh con của nó
Trang 71Cài đặt hàng ưu tiên bởi heap
7,D 9,C
0
2,F 5,A 3,B 9,C 7,D 8,E
Trang 72Xen thêm vàoheap
Phép insert của hàng ưu
tiên tương ứng với phép xen thêm một phần tử có
7 9
2
6 5
7
z
z
Trang 73Thuật toán upheap
Sau khi xen thêm một khóa k mới, heap có thể mất đi tính chất thứ tự bộ
phận
Thuật toán upheap khôi phục lại tính chất này bằng cáchđảo chỗ k dọc theo
đường đi từ đỉnh mới hướng tới gốc
Upheap dừng lại khi k tiến tới gốc hoặc một đỉnh có khóa của cha ≤ k
2
1 5
7
1
2 5
7
Trang 74Loại một phần tử khỏi heap
Phép removeMin của
hàng ưu tiên tươngứng với phép loại gốc của heap
7 9
đỉnh cuối
w
7
6 5
9
w
Trang 75Thuật toán downheap
9
Sau khi thay thế đỉnh gốc với đỉnh cuối (có khóa k), heap có thể mất
đi tính chất thứ tự bộ phận
Thuật toán downheap khôi phục lại tính chất này bằng cách đảo chỗ
đỉnh có khóa k dọc theo đường đi từ gốc xuống
Downheap dừng khi k tiến tới một lá hay một đỉnh có các khóa con
Trang 76Cập nhật con trỏ tới đỉnh cuối
Dùng trong cài đặt heap bằng cấu trúc liên kết
Có thể tìm chỗ cho đỉnh sẽ thêm vào bằng cách đi theo hành trình
Đi lên tới khi gặp một con trái hoặc gặp gốc
Nếu gặp một con trái thì chuyển sang con phải
Đi xuống tới khi gặp một lá
Áp dụng thuật toán tương tự cho cập nhật con trỏ tới đỉnh cuối trong phép loại bỏ một đỉnh
Trang 77Minh họa cài đặt hàng ưu tiên
Trang 78(11,S)
Trang 79(6,Z)
Trang 80Đảo (2,T) và (20,B)
(18,W)
Trang 81(20,B) (18,W)
(11,S)
Đảo (2,T) và (6,Z)
Trang 82(20,B) (18,W)
(11,S)
Đảo (2,T) và (4,C)
Trang 83(20,B) (18,W)
(11,S)
Trang 84(11,S)
Trang 85(11,S)
Trang 86(11,S) Đảo(18,W)
và(5,A)
Trang 87(11,S)
Đảo(18,W) và(9,F) (18,W)
Trang 89Đỉnh cuối
Trang 90Độ phức tạp
Độ phức tạp khônggian
Cài bằng cấu trúc liên kết (dùng con trỏ): O(n)
Cài bằng cấu trúc vector (mảng): tỉ lệ với N (cỡ của mảng)
Độ phức tạp thờigian
findMin, findMinKey O(1)
Trang 91Tổng kết
Cây thứ tựbộ phận
Trang 92Nội dung chính
Trang 93Nén dữ liệu
Giả sử cần nén một tệp dữ liệu
chứa 100 ký tự từ bảng 6 chữ cái (từ a đếnf).
§ biểu diễn mỗi chữ cái bởi3 bit (thay vì 8 bit như thường lệ)
Trang 94 Thuật toán Huffman sử dụng
hàng ưu tiên để xây dựng mãtiền tố dưới dạng cây nhị phân
Mã sinh ra gọilà mã Huffman
Tần suất (K) 45 13 12 16 9 5 Từmã 0 101 100 111 1101 1100
13 (b)
14 16
(d)
5 (f)
9 (e)
Trang 95Thuật toán Huffman
Với mỗi ký tự xuất hiện trong xâu
nguồn, ta tạo ra một đỉnh chứa ký
Trang 96(a)
12 (c)
13 (b)
16 (d)
5 (f)
9 (e)
Trang 97(a)
12 (c)
13 (b)
14 16
(d)
5 (f)
9 (e)
Trang 98(a)
25
12 (c)
13 (b)
14 16
(d)
5 (f)
9 (e)
0
1
Trang 99(a)
12 (c)
13 (b)
14 16
(d)
5 (f)
9 (e)
0
1
1 1
Trang 10013 (b)
14 16
(d)
5 (f)
9 (e)
Trang 10113 (b)
14 16
(d)
5 (f)
9 (e)
Trang 102Mục tiêu bàihọc