Bài giảng Thiết kế và đánh giá thuật toán - Cây tìm kiếm nhị phân - Lê Nguyên Khôi

Tóm tắt Bài giảng Thiết kế và đánh giá thuật toán - Cây tìm kiếm nhị phân - Lê Nguyên Khôi: ... Tìm  = 4: 6 Tìm  = 4: 6 → 2 → 4 Tìm  = 7: 6 → 9 → 8 → NIL 7 6 92 41 8 Truy Vấn – Nhỏ/Lớn Nhất Tree-Minimum() 1 while .  ≠ NIL 2  ← .  3 return  Nhỏ nhất: 6 → 2 → 1 Tree-Maximum() 1 while . ℎ ≠ NIL 2  ← . ℎ 3 return  Lớn nhất: 6 → 9 8 6 92 41 8 ... - cây, 3 trường hợp  . không có con xóa .  . chỉ có 1 con trái hoặc phải chuyển con đó lên thay .  . có cả con trái và phải chuyển lớn nhất cây con trái hoặc nhỏ nhất cây con phải (.′) lên thay . xóa .′  Lưu ý: khi xóa . nên giảm độ cao của cây - nếu có thể 12 Dựng Cây TKNP  C... elseif ..  < .  12 .  = . 13 else . ℎ = . Cây TKNP Cân Bằng  Độ cao của cây TKNP cần nhỏ để các thao tác chính thực hiện nhanh  Nếu cây TKNP “cân bằng” thực hiện các thao tác trong 1(log )  Tính chất “cân bằng” có thể bị phá vỡ với thao tác sửa đổi (Chèn/Xóa)  Sửa...

pdf22 trang | Chia sẻ: havih72 | Lượt xem: 312 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Thiết kế và đánh giá thuật toán - Cây tìm kiếm nhị phân - Lê Nguyên Khôi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Thiết Kế & Đánh Giá Thuật Toán
Cây Tìm Kiếm Nhị Phân
TS. Lê Nguyên Khôi
Trường Đại Học Công Nghệ - ĐHQGHN
Nội Dung
 Cây tìm kiếm nhị phân (TKNP)
 Dựng cây TKNP
 Cây TKNP cân bằng
 Cây Đỏ - Đen
 Cây AVL
 Cây Treap
1
Định Nghĩa
 Cây TKNP:
 cây nhị phân 
 lưu khóa ở đỉnh trong
 lá rỗng
 thỏa mãn tính chất:
  ≤   ≤  
 trong cây con trái của 
 trong cây con phải của 
2
6
92
41 8


Thao Tác Chính
 Cây TKNP thực hiện các tao thác chính
 Truy vấn: không thay đổi cấu trúc cây TKNP
Tìm kiếm (SEARCH)
Nhỏ nhất (MINIMUM)
Lớn nhất (MAXIMUM)
Trước (PREDECESSOR)
Sau (SUCCESSOR)
 Sửa đổi: thay đổi cấu trúc cây TKNP
Chèn (INSERT)
Xóa (DELETE)
3
Tính Chất
  trong cây con trái của ,  trong cây con phải của 
  ≤   ≤  
 Duyệt cây TKNP theo thứ tự trong, thăm các khóa theo
thứ tự tăng dần
 Sử dụng cây TKNP cho
 cài đặt từ điển
 Cây thứ tự bộ phận (heap)
 là cây tìm kiếm
 là cây nhị phân
 không phải cây TKNP
 dùng quản lý hàng đợi ưu tiên
4
Độ Phức Tạp Thời Gian
 ℎ đô cao của cây
 	 độ lớn của cây (số đỉnh trong)
 Thời gian 
(ℎ), với các thao tác chính
 Cây TKNP đầy đủ ℎ = log 	
 Cây TKNP là một xích 	 nút ℎ = 	
5
6
92
41 8 10
6
9
8
Truy Vấn – Tìm Kiếm
Tree-Search(,)
1 if  = NIL or  = . 
2 return 
3 if  < . 
4 return Tree-Search(. ,)
5 else return Tree-Search(. ℎ,)
 = 4: 6
 = 4: 6 → 2 → 4
 = 7: 6 → 9 → 8 → NIL
6
6
92
41 8
Truy Vấn – Tìm Kiếm
Iterative-Tree-Search(,)
1 while  ≠ NIL and  ≠ . 
2 if  < . 
3 	  ← . 
4 else  ← . ℎ
5 return 
Tìm  = 4: 6
Tìm  = 4: 6 → 2 → 4
Tìm  = 7: 6 → 9 → 8 → NIL
7
6
92
41 8
Truy Vấn – Nhỏ/Lớn Nhất
Tree-Minimum()
1 while .  ≠ NIL
2 	  ← . 
3 return 
Nhỏ nhất: 6 → 2 → 1
Tree-Maximum()
1 while . ℎ ≠ NIL
2 	  ← . ℎ
3 return 
Lớn nhất: 6 → 9
8
6
92
41 8
Truy Vấn – Trước
Tree-Predecessor()
1 if .  ≠ NIL
2 return Tree-Maximum(. )
3  = . +,	
4 while  ≠ NIL and  = . 
5  = 
6  = . +,	
7 return 
Trước:  = 6: 6 → 2 → 4
Trước:  = 8: 8 → 9 → 6
9
6
92
41 8
Truy Vấn – Sau
Tree-Succesor()
1 if . ℎ ≠ NIL
2 return Tree-Minimum(. ℎ)
3  = . +,	
4 while  ≠ NIL and  = . ℎ
5  = 
6  = . +,	
7 return 
Sau:  = 6: 6 → 9 → 8
Sau:  = 4: 4 → 2 → 6
10
6
92
41 8
Sửa Đổi – Chèn
Tree-Insert(-,.)
1  = NIL
2  = -. //
3 while  ≠ NIL
4  = 
5 if ..  < . 
6  = . 
7 else  = . ℎ
8 .. +,	 = 
9 if  = NIL
10 -. // = .
11 elseif ..  < . 
12 .  = .
13 else . ℎ = .
11
6
92
41 8
7
Sửa Đổi – Xóa
 Xóa nút . khỏi cây - cây, 3 trường hợp
 . không có con
xóa .
 . chỉ có 1 con trái hoặc phải
chuyển con đó lên thay .
 . có cả con trái và phải
chuyển lớn nhất cây con trái hoặc nhỏ nhất cây
con phải (.′) lên thay .
xóa .′
 Lưu ý: khi xóa . nên giảm độ cao của cây -
nếu có thể
12
Dựng Cây TKNP
 Các thao tác chính trong thời gian 
(ℎ)
 Dựng cây TKNP có độ cao (ℎ) càng nhỏ càng tốt
 Dựng cây TKNP:
 Chèn liên tục khóa vào cây, bắt đầu từ cây rỗng
 Tại mỗi nút, cây con trái và phải cân bằng
Chọn khóa  nào cho nút .
Vần đề tương tự như chọn phần tử chốt trong phân
hoạch của thuật toán Sắp Xếp Nhanh
 Chọn ngẫu nhiên khóa  chèn vào cây
Độ cao trung bình ℎ = 1(log 	)
13
Vấn Đề Khác
 Cần sửa Tree-Insert để
xử lý khóa trùng nhau trong
cây TKNP
 Cách 1: chọn ngẫu nhiên cây
con trái/phải
 Cách 2: dựa vào , để
chọn cây con trái/phải
 Cách 3: sử dụng danh sách
để lưu khóa trùng
14
Tree-Insert(-,.)
1  = NIL
2  = -. //
3 while  ≠ NIL
4  = 
5 if ..  < . 
6  = . 
7 else  = . ℎ
8 .. +,	 = 
9 if  = NIL
10 -. // = .
11 elseif ..  < . 
12 .  = .
13 else . ℎ = .
Cây TKNP Cân Bằng
 Độ cao của cây TKNP cần nhỏ để các thao tác
chính thực hiện nhanh
 Nếu cây TKNP “cân bằng” thực hiện các thao
tác trong 1(log 	)
 Tính chất “cân bằng” có thể bị phá vỡ với thao
tác sửa đổi (Chèn/Xóa)
 Sửa lại cấu trúc cây thông qua phép xoay
 Hai loại cây TKNP “cân bằng”
 Cây Đỏ - Đen
 Cây AVL
15
Cây Đỏ - Đen
 Mỗi nút cần thêm 1-bit màu
 Tính chất
 1. Mỗi nút là đỏ hoặc đen
 2. Gốc và lá (NIL) đen
 3. Nếu một nút đỏ, thì con của nó đen
 4. Mọi đường đi từ một nút đến các lá con có
cùng số lượng nút đen
 5. Không đường đi nào dài hơn gấp đôi
đường đi nào
 Độ cao của cây Đỏ - Đen với 	 nút
ℎ ≤ 2 log(	 + 	1)
16
Cây Đỏ - Đen – Ví Dụ
17
Cây Đỏ - Đen – Thao Tác
 Các thao tác chèn và xóa có thể làm thay
đổi tính chất của cây
 Do chính các thao tác này
 Đổi màu các nút
 Cấu trúc lại các kết nối nút
Phép xoay: đảm bảo thứ tự trong của khóa
Phép thực hiện trong thời gian 3(1)
18
Cây AVL
 Georgy Adelson-Velsky & Evgenil Landis 
đề xuất năm 1962
 Độ cao 2 cây của của một nút khác nhau
nhiều nhất 1
 Thời gian 3(log 	) cho các thao tác trong
cả 2 trường hợp trung bình & xấu nhất
 Cân bằng xây bằng phép xoay
19
Cây Treap
 Dựng cây TKNP ngẫu nhiên (slide 13) sẽ
được cây tương đối cân bằng
 Tuy nhiên nếu dữ liệu được cung cấp lần
lượt, khóa sẽ không lựa chọn ngẫu nhiên
 Cây Treap cung cấp giải pháp
 Là sự kết hợp của cây TKNP và cây thứ tự
bộ phận (min-heap)
 Khóa  thỏa mãn cây TKNP
Ưu tiên +/ thỏa mãn cây min-heap
20
Cây TKNP Cân Bằng – Phép Xoay
 Xem Mục 13.2 tr.312
21

File đính kèm:

  • pdfbai_giang_thiet_ke_va_danh_gia_thuat_toan_cay_tim_kiem_nhi_p.pdf