Post on 15-Feb-2015
BÀI BÁO CÁOMÔN: CẤU TRÚC DỮ LIỆU NÂNG CAO
Giảng viên hướng dẫn: TS. Nguyễn Mạnh Hùng
Nhóm học viên thực hiện: Lê Thu Hà Phạm Thị Thanh TânTrương Thị Hồng Thúy
1
Đề tài:
Splay tree và ứng dụng trong
Data Compression
2
Giới thiệu về Splay Trees
- Được các tác giả D.D.Sleator và R.E.Tarjan đưa ra năm 1983
3
- Có thể truy nhập nhanh chóng các nút vừa mới xét trước đó.
- Chi phí khấu hao thấp.- Rõ ràng, dễ hiểu, dễ thực hiện với
các thao tác cơ bản: tìm kiếm, xoá, chèn, …
• Cây splay là cây nhị phân tìm kiếm, sử dụng các phép quay để quay nút được xét về gốc.
• Sắp xếp các nút vừa được xét, có tần suất sử dụng cao về gốc
4
Một ví dụ về splay treesvới phép quay đặc trưng
5
Di chuyển nút được truy nhập x về gốc bởi phép quay
x
Ay
B C
<===>
y
x
B
C
A
Hai phương pháp quay
- Bottom Up: XuÊt ph¸t tõ nót ® îc truy cËp, ta quay nót nµy tõ d íi lªn trªn cho ®Õn khi nã trë thµnh nót gèc.
- Top Down: XuÊt ph¸t tõ gèc cña c©y, ta quay nót nµy tõ trªn xuèng d íi ®Õn khi ®Õn nót ®ang ® îc truy cËp.
6
(Nếu x là gốc thì không phải làm gì)
- Trªn c©y splay, c¸c phÐp quay ® îc ®Þnh nghÜa b»ng c¸c quy t¾c quay ®Ó quay dÇn nót ® îc xÐt vÒ gèc
Phương pháp Bottom up
7
Các phép quay
8
- Cã 3 quy t¾c quay: phô thuéc vµo cÊu tróc cña ® êng dÉn truy cËp và lu«n ®¶m b¶o vÉn lµ BSTs:
D¹ng 1: ZigD¹ng 2: Zig-ZigD¹ng 3: Zig-Zag
- Gi¶ sö x lµ nót ® îc truy cËp
Dạng 1: ZIGCha cña nót x lµ gèc cña c©y
Thực hiện: Quay nót x quanh nót cha cña x
9
Quay x quanh y
Dạng 2: ZIG - ZIG- Cha cña nót x kh«ng ph¶i lµ gèc, nót x vµ cha cña nót x ®Òu lµ con tr¸i (hoÆc con ph¶i)
- Thùc hiện: quay cha cña x quanh «ng cña x
quay x quanh cha cña x
10
Quay y quanh z
Quay x quanh y
Dạng 3: ZIG - ZAG- Cha cña nót x kh«ng lµ gèc cña c©y, nót x lµ con tr¸i (ph¶i), cha cña nót x lµ con ph¶i (tr¸i)
- Thùc hiện: quay x quanh cha cña x quay x quanh «ng cña x
11
Quay x quanh y
Quay x quanh z
VÍ DỤ¸p dông c¸c quy t¾c ®Ó quay nót a trë thµnh nót gèc
i
h
H
g
f
e
d
c
b
a
I
J
G
A
B
C
D
E F
Cha cña a lµ nót b, kh«ng ph¶i lµ nót gèc,b vµ a ®Òu lµ con ph¶i,¸p dông quy t¾c zig-zig
i
h
g
f
e
d
a
b
c
i
h
HHf
e
d
a
b
c
II
JJ
GG
AA
BB
F
D
EE
DCC
i
h
H
g
f
a
d e
b
c
J
G
A
B F
E
DC
i
h
Hf
a
d e
b
c
I
J
G
A
B F
E
DC
Cha cña a lµ nót d, kh«ng ph¶i lµ nót gèc,d lµ con tr¸i, cßn a lµ con ph¶i,¸p dông quy t¾c zig-zag
12
VÍ DỤ - tiếp¸p dông c¸c quy t¾c ®Ó quay nót a trë thµnh nót gèc
13
i
h
H
g
f
a
d e
b
c
J
G
A
B F
E
DC
i
h
Hf
a
d e
b
c
I
J
G
A
B F
E
DC
i
h
H
a
f g
d e
b
c
I
J
G
A
BF
E
DC
i
h
H
a
f
d e
b
c
I
J
G
A
BF
E
DC
f
d
b
c
A
B
E
DC
a
h
i
I JH
g
e
GF
f
d
b
c
A
B
E
DC
a
h
i
I JHe
GF
Cha cña a lµ nót f, kh«ng ph¶i lµ nót gèc,f lµ con tr¸i, cßn a lµ con ph¶i,¸p dông quy t¾c zig-zag
Cha cña a lµ nót h, kh«ng ph¶i lµ nót gèc,a vµ h ®Òu lµ con tr¸i,¸p dông quy t¾c zig-zig
Ph ¬ng ph¸p Top - down
Ph ¬ng ph¸p Top - down - Cã 4 quy t¾c quay: phô thuéc vµo cÊu
tróc cña ® êng dÉn truy cËp và lu«n ®¶m b¶o vÉn lµ BSTs:
D¹ng 1: Zig D¹ng 2: Zig-Zig D¹ng 3: Zig-Zag D¹ng 4: Reasembling
Dạng 1: ZIGCha cña nót Y lµ gèc cña c©y.
Thùc hiÖn: Quay nót Y quanh nót cha cña Y. Nót Y trë thµnh nót chó cña X.
16
Dạng 2: ZIG - ZIGCha cña nót Z kh«ng ph¶i lµ gèc, nót Z vµ cha cña nót Z cïng lµ con tr¸i (hoÆc con ph¶i)
Thùc hiÖn: Quay cha cña Z quanh «ng cña Z
Quay Z quanh cha cña Z
17
Dạng 3: ZIG - ZAGCha cña nót Z kh«ng lµ gèc cña c©y, nót Z lµ con tr¸i (ph¶i), cha cña nót Z lµ con ph¶i (tr¸i)
Thùc hiÖn: Quay cha cña Z quanh «ng cña Z
18
Dạng 4: Reassemblingthực hiện: sắp xếp lại cây
19
VÍ DỤ¸p dông c¸c quy t¾c ®Ó quay nót 18 trë thµnh nót gèc
20
Zig-Zag Zig-Zig
Reasemble
Zig
22
C¸c phÐp to¸n trªn Splay Tree
23
1. Find (i, T) - Tìm kiếm node i trên cây T2. Catenate (T1,T2) – Nối 2 cây3. Split (i,T) – Tách cây T tại node i4. Insert (i,T) – Chèn node i vào cây T5. Delete (i,T) – Xoá node i khỏi cây T
C¸c phÐp to¸n trªn Splay tree
24
Find (i, T) - Tìm kiếm nút i trên cây T
- Tìm kiếm nút i trên T, như BST- Nếu tìm thấy, quay nút i về gốc- Nếu không có i, quay nút cuối cùng được
thăm trên đường dẫn tìm kiếm về gốc.
Find (i, T) - Tìm kiếm nút i trên cây T
25
VÝ dô tim nót 65 trªn c©y T
50
60
70
65
63 66
40
4320
16 25
50
60
70
65
63
66
40
43
20
16
D¹ng zig
=>quay nót 65 quanh nót 70, quay nót 65 quanh 60
70
65
66
60
63
50
40
43
20
16
D¹ng zig-zag
=> quanh 65 quanh 50
65
Find (i, T) - Tìm kiếm nút i trên cây T
26
VÝ dô tim nót 42 trªn c©y T
50
60
70
65
63 66
40
4320
16 25
D¹ng zig-zag
=>quay nót 43 quanh nót 40, quay nót 43 quanh 50
Nót 42 kh«ng tim thÊy trªn c©y, nót 43 ® îc thăm lÇn cuèi cïng trªn ® êng dÉn tim kiÕm => quay nót 43
43
40
20
16
43
50
60
70
65
63
66
C¸c phÐp to¸n trªn Splay trees
27
Catenate (T1,T2) – Nối 2 cây T1 và T2 được 1 cây BST
• Tìm nút i lớn nhất trong cây T1• Quay i về làm gốc T1• Nối T2 làm con phải của nút gốc i
Lưu ý: giá trị của các nút trong cây T1 nhỏ hơn giá trị các nút trong cây T2
T1 T2
i
T1T2
i
T1 T2
C¸c phÐp to¸n trªn Splay tree
28
Nót lín nhÊt lµ 29, quay nót 29 (d¹ng zig-zig)
10
25
29
823
5
60
55
75
90
65
Nèi c©y T2 thµnh con ph¶i cña 29
60
55
75
90
65
VÝ dô nèi 2 c©y sau
10
25
29
8
23
5
C©y T1
C©y T2
29
C¸c phÐp to¸n trªn Splay tree
29
Tr êng hîp 1: i T
• Quay nót i vÒ làm gèc cña T• C¾t liªn kÕt tr¸i hoÆc liªn kÕt ph¶i cña nót i => c©y T ® îc t¸ch t¹i nót i thµnh 2 c©y :
T1, T2
Split (i,T) – Tách cây T tại node i
Quay i vÒ gèc
TT2
i
T1
iC¾t liªn kÕt ph¶i
cña i
C¾t liªn kÕt tr¸i cña i
T2T1
ii
T2T1
i
C¸c phÐp to¸n trªn Splay tree
30
Tr êng hîp 2: iT
• Quay nót i- (nót cã gi¸ trÞ liÒn tr íc i) hoÆc i+ ( nót cã gi¸ trÞ liÒn sau i) vÒ gèc cña T
• C¾t liªn kÕt ph¶i cña nót i- hoÆc liªn kÕt tr¸i cña i+
• => c©y T ® îc t¸ch t¹i nót i- hoÆc i+ thµnh 2 c©y: T1, T2
Split (i,T) – Tách cây T tại node i
T1
Quay i- vÒ gèc
T
T2
i
T1
i-
C¾t liªn kÕt ph¶i cña i-
C¾t liªn kÕt tr¸i cña i +
T2T1
ii-
Quay i + vÒ gèc
T2T1
i+
T2T1
i+
C¸c phÐp to¸n trªn Splay tree
31
C¾t liªn kÕt tr¸i cña nót 60
VÝ dô t¸ch c©y T t¹i nót 60 5
0
60
70
65
63
66
40
43
20
16
50
40
43
20
16
60
70
65
63
66
C©y T1
50
40
43
20
16 C©y T2
60
70
65
63
66
Quay nót 60 (d¹ng zig)
C¸c phÐp to¸n trªn Splay tree
32
C¾t liªn kÕt tr¸i cña nót 43
VÝ dô t¸ch c©y T t¹i nót 42
50
60
70
65
63
66
40
43
20
16
Quay nót 43 (42+)
(d¹ng zig-zag)
40
20
16
43
50
60
70
65
63
66
C©y T1
40
20
16 C©y
T2
43
50
60
70
65
63
66
43
C¸c phÐp to¸n trªn Splay tree
33
Insert (i,T) – Chèn nút i vào cây T
- Chèn nút vào như trong BST - Quay nút vừa được chèn về gốc- Nếu đã có i trong T thì quay nút đó về gốc
1
C¸c phÐp to¸n trªn Splay tree
34
- Thùc hiÖn Split(i,T) ta ® îc 2 c©y con T1, T2 - Nèi c©y T1 thµnh con bªn tr¸i cña nót i, T2
thµnh con bªn ph¶i cña nót i
Split(i,T)Nèi T2 thµnh con ph¶i cña i
T1 T2 T2T1
ii
T
Nèi T1 thµnh con tr¸i cña i
Insert (i,T) – Chèn nút i vào cây T2
C¸c phÐp to¸n trªn Splay tree
35
VÝ dô chÌn nót 42 vµo c©y T 5
0
60
70
65
63
66
40
43
20
16
Split(42,T)
42
C©y T1
40
20
16
C©y T2
43
50
60
70
65
63
66
40
20
16
43
50
60
70
65
63
66
Nèi c©y T1 thµnh con tr¸i cña 42Nèi c©y T2 thµnh con ph¶i cña 42
C¸c phÐp to¸n trªn Splay tree
36
• Quay nót i vÒ nót gèc cña c©y T (nÕu nót i kh«ng cã trªn c©y T thi quay nót ® îc thăm lÇn cuèi cïng trªn ® êng dÉn tim kiÕm)
• C¾t bá liªn kÕt tr¸i vµ liªn kÕt ph¶i cña nót i, ta ® îc hai c©y T1 vµ T2
• Xãa nót i• Catenate(T1, T2)
Quay nót i
C¾t liªn kÕt tr¸i vµ liªn kÕt ph¶i cña nót i, xãa
nót i T’T2T1
ii
T
Catenate(T1, T2)
T2T1
ii
Delete (i,T) – Xoá nút i khỏi cây T
C¸c phÐp to¸n trªn Splay tree
37
Quay nót 40 vÒ gèc
C¾t bá liªn kÕt tr¸i cña nót 40C¾t bá liªn kÕt ph¶i cña nót 40
VÝ dô xãa nót 40 khái c©y T
50
60
70
65
63 66
40
4320
16 25
40
20
16 25
50
60
70
65
63
66
43
Xãa nót 40 ® îc 2 c©y T1 vµ T2
50
60
70
65
63
66
43
T1
T2
Quay nót 25 cña c©y T1
20
16
25
Nèi T2 thµnh con ph¶i cña 25
40
C¸c phÐp to¸n trªn Splay tree
38
Nót 80 kh«ng cã trªn c©y T, nót 70 lµ nót ® îc th¨m lÇn cuèi cïng trªn ® êng dÉn t×m kiÕm => quay nót 70 (d¹ng zig-zig)
VÝ dô xãa nót 80 khái c©y T
50
60
70
65
63 66
40
4320
16 25 50
60
70
65
63 6640
4320
16 25
70
Phân tích khấu hao
39
Phân tích khấu hao
- KÝch th í c cña mét nót x trªn c©y splay kÝ hiÖu lµ s(x): s(x)=
xTy
)y(w
40
Gọi W(i) là trọng lượng nút i, w(i) dương, là hằng số bất kỳ
Bậc của nút x là r(x) = log 2 (s(x)) (thế năng của nút) Hàm thế năng: = tổng các bậc của các nút trong cây
- Hµm thÕ n ng cña mét c©y Splay: pf()=
Tx
)x(r
Trong ®ã T lµ toµn bé c c nót cña c©y splay, x lµ mét nót thuéc T
= ΔФ ≥ 0 mọi x € T do mỗi nút dịch chuyển dần về gốc nên bậc sau quay >= bậc trước quay
Thời gian của phép quay = tổng số lần quay trong phép quay đó.
Định nghĩa: kích thước nút x là s(x) = tổng trọng lượng các nút trong các cây con của x
Chi phí khấu hao = chi phí thực sự + hiệu thế năng
Chi phí khấu hao cho 1 bước trong phép quay cơ bản
41
Фend: thế năng của cây sau khi quay
Фo: thế năng của cây trước khi quay
- Cộng thêm hằng số 1 là chi phí thực sự của cây ban đầu biến
thành cây sau khi thực hiện phép quay.
Hay
Chi phí khấu hao cho 1 bước trong phép quay cơ bản
42
Delta phi = tổng rank của những nút bị biến đổi sau quay – tổng ranh của các nút đó trước quay
Trong đó: Y: nútT: cây trước khi quayR: cây sau khi quayrank+(y): thế năng của nút y sau khi quayRank-(y): thế năng của nút y trước khi quay
Chi phí khấu hao cho phép quaynút i về gốc r trong phép quay cơ bản
43
Chiều cao cây ban đầu = 2 (trong phép quay cơ bản), nút gốc có chiều cao là 0.Chi phí thực sự = 1
Trong đó: A: chi phí khấu hao quay nút i về gốcrank(r): thế năng của nút gốc Rank(y): thế năng của nút i trong cây trước
quay
Chi phí khấu hao cho phép quay nút i về gốc trong cây
splay
44
Tại bước j trong quá trình quay i về gốc:
Trong đó: Aj: chi phí khấu hao bước jtj: chi phí thời gian thực sự cho bước jФ(j-1): thế năng của cây trước bước truy cập jФ(j): thế năng của cây sau bước truy cập j
Chi phí khấu hao cho phép quay nút i về gốc trong cây
splay
45
Sau đó áp dụng cho m thao tác trong quá trình quay i về gốc, vậy tổng chi phí khấu hao là:
Chi phí khấu hao cho phép quay nút j về gốc trong cây
splay
46
Hiệu thế năng cực đại cay splay là:
Bæ ®Ò truy nhËp
Bæ ®Ò truy nhËp: Thêi gian khÊu hao tèi ®a ®Ó quay mét nót x trong mét c©y splay cã nót gèc t lµ:
3(r(t) - r(x)) + 1 = )))x(s)t(s
(log(O
47
Thời gian khấu trừ tối đa để quay nút x trong cây gốc t là:
Bổ đề :
Bæ ®Ò truy nhËp
48
Chứng minh:
Đối với mỗi phép quay cơ bản: •Gọi s, s’ và r, r’ tương ứng là kích thước và bậc của nút trước và sau quay.•Ta có thời gian khấu hao tối đa của mỗi phép quay: Zig là: 3.(r’(x) - r(x)) + 1 Zig – zig hoặc zig – zag là: 3.(r’(x) - r(x))
Bæ ®Ò truy nhËp
tgkh = 1 + = 1 + r’(x) + r’(y) - r(x) - r(y) 1 + r’(x) + r(y) - r(x) - r(y) (do
r’(y) r(y)) 1 + r’(x) - r(x) 1 + 3(r’(x) - r(x)) (do
r(x) r’(x))
Quay x quanh y
Thêi gian khÊu hao cña phÐp zig
49
Bæ ®Ò truy nhËp
tgkh = 2 +
= 2 + r’(x) + r’(y) + r’(z) - r(x) - r(y) - r(z)
= 2 + r’(y) + r’(z) - r(x) - r(y) do r’(x)= r(z)
2 + r’(x) + r’(z) - 2r(x) do r’(y) r’(x), r(x) r(y)
2r’(x) - r(x) - r’(z) + r’(x) + r’(z) - 2r(x) do 2 2r’(x) - r(x) - r’(z)
3(r’(x) - r(x))
Thêi gian khÊu hao cña PHÉP zig- zig
Quay y quanh z
Quay x quanh y
50
Bæ ®Ò truy nhËp
tgkh = 2 + r’(x) + r’(y) + r’(z) - r(x) - r(y) - r(z)
= 2 + r’(y) + r’(z) - r(x) - r(y) do r’(x) = r(z)
2 + r’(y) + r’(z) - 2r(x) do r(x) r(y)
2r’(x) - r’(y) - r’(z) + r’(y) + r’(z) - 2r(x) do 2 2r’(x) - r(y) - r’(z)
2(r’(x) - r(x)) 3(r’(x) - r(x)) do r(x) r’(x)
Thêi gian khÊu hao cña phÐp zig- zag
Quay x quanh y
Quay x quanh z
51
ĐÞnh lý c©n b»ng
52
Định lý:
Thời gian để truy cập m nút trong cây splay n nút là: 0((m+n)log n)
Chứng minh định lý cân bằng
53
ĐÞnh lý tèi u tÜnh häc
54
Định lý:
Nếu tất cả các nút được truy cập ít nhất 1 lần thì tổng thời gian truy cập là:
O(m + q(i) log (m/q(i)) )Trong đó: q(i): tổng thời gian – số lần - truy cập tới nút iN: số nút của cây splayM: số nút được truy cập
Chứng minh Định lý tối ưu tĩnh học
55
Mà theo gt: mỗi nút được truy cập ít nhất 1 lần nên ta có:
Chứng minh Định lý tối ưu tĩnh học
56
Ứng dụng: Nén dữ liệu qua cây splay
57
Ứng dụng: Nén dữ liệu qua cây splay
58
Mã hoá - Giả sử cần nén văn bản xuất từ một bảng chữ cái - Xây dựng cây nhị phân biểu diễn các ký tự của tại các nút lá - Để mã hoá ký tự x:
+ Trên đường dẫn từ gốc tới x, mã hoá là 0 nếu đi sang trái và mã hoá là 1 nếu đi sang phải.
+ Quay nút cha của x được cây mới, sử dụng cây này để mã hoá ký tự tiếp theo.
Ví dụ: mã hoá chuỗi ký tự aabg...
59
X©y dùng c©y nhÞ ph©n mµ c¸c chữ c¸i ë l¸ cña nã
e f g ha b c d e f g ha b c d
0
0
0
M· hãa kÝ tù a
aabg...
000
a
Ví dụ - tiếp60
Quay nót cha cña a, ® îc c©y míi
M· hãa kÝ tù a tiÕp theoe f g h
a
b
c d
e f g h
a
b
c d
0
aabg...000 0 a
Ví dụ - tiếp61
Vì nút cha của a đã là gốc nên không phải quay
M· hãa kÝ tù b
aabg...0000
e f g h
a
b
c d
e f g h
a
b
c d
1
0
10 b
Ví dụ - tiếp62
Quay nót cha cña b, ta ® îc c©y míi
M· hãa kÝ tù g
aabg...0000101110
e f g h
c d
a b
e f g h
c d
a b
1
1
1
0
1110
g
Ứng dụng: Nén dữ liệu qua cây splay
63
Gi¶i m·C©n ®èi.Gi¶i m· vµ m· hãa ph¶i thèng nhÊt víi nhau vÒ c©y ban ®Çu.
Phân tích việc nén dữ liệu thông qua cây splay
64
- Việc nén dữ liệu qua cây splay hiệu quả như thế nào?
- Giả sử m là # của các ký tự trong xâu gốc
- Chiều dài của xâu sau nén = m+chi phí các phép quay
mà chi phí các phép quay, theo định lý tối ưu tĩnh học được
xác định: O(m + q(i) log (m/q(i)) )
có m + O(m + q(i) log (m/q(i)) )
=O(m + q(i) log (m/q(i)) )
Khi xây dựng theo mã hoá Huffman, ≥ q(i) log (m/q(i))
và cần phải biết trước tần suất xuất hiện của các ký
tự.
65
D. Jones (88) chỉ ra rằng kỹ thuật nén qua cây semi-splay (một biến thể của cây splay) có thể cạnh tranh được với mã hoá Huffman động (Vitter 87)
66
Semi - splaying
==>Semi-splay zig - zig
z
y
x
A B
C
D
==>
Regular zig - zig
*
x
y
z
DC
B
A
*
z
y
x
A B
C
D
*
y
z
DC
x
A B
*
Tiếp tục xét quay với y …
Nén dữ liệu qua semi-splay
67
Mã hoá
- Mã hoá ký tự x: trên đường dẫn từ gốc tới x, mã hoá là 0 nếu đi sang trái và mã hoá là 1 nếu đi sang phải.- Nếu là semi play zig-zig thì bán quay theo quy tắc trên - Xoắn cây sao cho ký tự được mã là lá cực trái
Ví dụ:
VÝ dô m· hãa aabg
e f g ha b c d
0
0
0
M· hãa kÝ tù a
aabg...
000
a
68
a lµ nót cùc tr¸i nªn kh«ng ph¶i xo¾n c©y
Ví dụ:
e f g ha b c d
D¹ng semi zig-zig
e f g h
a
b
c d
e f g h
a
b
c d
D¹ng semi zig- zig
69
Ví dụ
e f g h
a
b
c d
0
M· hãa kÝ tù a tiÕp theo
aabg...000 0 a
70
Do nót cha cña a ë gèc nªn ta kh«ng ph¶i quay nã
Ví dụ
e f g h
a
b
c d
1
0
0
M· hãa kÝ tù b
aabg...0000 100 b
71
Ví dụ:
72
e f g h
a
b
c d e f g h
b
c d
axo¾n c©y ®Ó
nót
b trë thµnh l¸ cùc tr¸i
e f g h
b
c d
a
e f g h
b
c d
aD¹ng semi zig-
zig
D¹ng semi zig- zig
Ví dụ:
e f g h
b
c d
a
1
1
1
0
0
M· hãa kÝ tù g
aabg...0000100 10110
g
73