SlideShare a Scribd company logo
1 of 33
PriorityQueue
MeaningfulTransitions
KháiniệmQueue
 Hàng đợi (Queue) là một cấu trúc dữ liệu dùng
để chứa các đối tượng làmviệc theo cơ chế FIFO
(First In First Out)
 Việc thêm một đối tượng luôn diễn ra ở cuối
hàng đợi và một phần tử luôn được lấy ra từ đầu
hàng đợi.
`QueueVídụ:
 Hàng đợi (Queue) là một cấu trúc dữ liệu dùng
để chứa các đối tượng làmviệc theo cơ chế FIFO
(First In First Out)
 Việc thêm một đối tượng luôn diễn ra ở cuối
hàng đợi và một phần tử luôn được lấy ra từ đầu
hàng đợi.
ThaotáctrênQueue
TrênQueuecócác thao tácsau:
Thêmphần tử vào cuốiQueue(Push)
Xóa phần tử đầu Queue(Pop)
Front
Rear
ThaotáctrênQueue
Thêmphần tử vào cuốiQueue(Push)
Xóa phần tử đầu Queue (Pop)
XâydựngQueue
 Nếuxây dựng Queuebằngmảng thì sẽ nhận thấy rằng:
- Khi xoá một phần tử front tăng lên 1, khi thêm một
phần tử rear tăng lên 1,đến một lúc nào đó ta không
thể thêm vào hàng được nữa (rear=maxlength-1) dù
mảng còn nhiều chỗ trống (các vị trí trước front)
→Trường hợp này ta gọi là hàng bị tràn
 Để khắc phục điều này chúng ta có thể coi mảng
đó như 1 mảng với các phân tử được xếp vòng tròn
để việc push và pop dễ dànghơn.
Queue Circular(Hàng đợi vòng)
KháiniệmPriorityQueue
 Hàng đợi ưutiên (Priority Queue)là một kiểu dữ liệu trừu tượng tập hợp
đặc biệt, trong đó mỗi phần tử cómột độưu tiên nàođó.
 Hàng đợi ưutiên là cấutrúc dữ liệu tổng hợpcủa stack và queue.
 Hàng đợi ưutiên không theo cơ chế FIFO.
 Độ ưu tiên của phần tử thường là một số, theo đó, phần tử cóđộưu tiên
nhỏ nhất sẽ được ‘ưu tiên’ nhất.
 Ví dụ tại bệnh viện, cácbệnh nhân xếphàng để chờ phục vụnhưng không
phải người đếntrước thì được phục vụ trước mà họ cóđộ ưu tiên theo tình
trạng khẩn cấpcủa bệnh.
PriorityQueue
 Mỗi nút gồm:
+Value (Giá trị)
+ Priority (Độ ưu tiên)
 Chẳng hạn:
 Ta thấy rằng:nút cóđộ ưutiên cao nhất sẽ đượclấy ra trước trong queue
CàiđặtPriorityQueue
CàiđặtPriorityQueue
CàiđặtPriorityQueue
 Ta không thể cài đặt Priority Queue bằng bảng băm vì bảng băm không
thuận lợi trong việc tìm kiếm phần tử nhỏ nhất
→Nên cách cài đặt Priority Queue khá thuận lợi đó là cài đặt bằng cây có
thứ tự từng phần (TreeHeap).
Câycàiđặtbằngmảng
Nút mẹ thứ i gồm:
Nút conbên trái: = 2*i+ 1
Nút conbên phải: =2*i + 2
Nút mẹ cuối cùngtrong cây: (n-1)/2 vớin là sốlượng phần tử
 Giả sử ta cónút thứ i trong mảng:
-> Nút mẹ của nút này là (i-1)/2
 Các nút mẹ trong cây: từ i=0-> (n-1)/2
Câycàiđặtbằngmảng
Ví dụvềcâycài bằngmảng:
A[0]
A[9]
A[4]
A[5]
A[2]
A[3]
A[6]
A[8]A[7]
A[1]
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
TreeHeap
Địnhnghĩa cây cóthứ tự từng phần ( Treeheap)
Cây cóthứ tự từng phần là cây nhị phân mà giá trị tại mỗi nút mẹ có1 quan
hệ thứ tự nào đó với2 nút con của nó.
Có 2loại cây heap thường dùng: Max-Heap , Min-Heap
Max-Heap:cây nhị phân mà giá trị tại mỗi nút mẹ đều lớn hơn
hoặc bằng giá trị của hai con.
Min-Heap: cây nhị phân mà giá trị tại mỗi nút mẹ đều nhỏ hơn
hoặc bằng giá trị của hai con.
TreeHeap
3
9
8
9
9
6
10
1610
5
Min-Heap
Nhậnxét
 Trêncây cóthứ tự từng phần, nút gốc là nút cógiá trị nhỏ nhất
 Từ nhận xét này, ta thấy cóthể sử dụng cây cóthứ tự từng phần để cài
đặt hàng đợiưu tiên
 Trongđómỗi phần tử được biểu diễn bởi một nút trên câymà độ ưu
tiên của phần tử là giá trị của nút
CácthaotáctrênTreeHeap
Vì TreeHeap dùng để biểu diễn Priority Queue nên sẽ cócácthao tác tương tự
Queue:
-Tìm phần tử lớnnhất/nhỏ nhất (Find Min/Max)
- Xóa phần tử đầu tiên của cây (RemoveMiin)
- Thêm phầntử vào cuốicây (Insert)
FindMin
3
9
8
9
9
6
10
1610
5
Min-Heap
Dễ dàng nhận thấy rằngNút gốc của cây chính là Max/ Min
Remove
Chiếnlược: Xét cây Min-Heap
Lấynútlá tạimứccaonhấtvà nằmbênphảinhấtthaythếchonútgốc.
 Như vậy cây vẫn "cân bằng" nhưng nó không còn đảm bảo tính thứ tự
từng phần.
Để xây dựng lại cây từng phần ta thực hiện việc "đẩy nút này xuống dưới".
Tức là ta đổi chổ nó với nút con nhỏ nhất của nó, nếu nút con này có độ
ưu tiên nhỏ hơn nó.
Đâylà 1 quátrìnhđệquy.Quá trình đó sẽ dừng khi đã nổi lên đến nút gốc hoặc
cây thỏa mãn tính chất có thứ tự từng phần.
RemoveMin
Giải thuật: Xétcây Min-Heap
 Bước 1:Tathaythếnútgốcbằngnútlá cuối cùng trongcây
 Bước 2: Taxéttừnútgốc:
Nếugiátrịnúttráinhỏhơn nútphảivà nhỏhơn cảnútgốcthì tađổichỗnút
tráivới nútgốc.
Nếugiá trịnútphảinhỏhơn núttráivà nhỏhơn cảnútgốcthì tađổichỗnút
phảivới nútgốc.
 Bước 3:
Sau khi đẩy nút gốc xuống một con nào đó (trái hoặc phải) thì
phải tiếp tục xét con đó xem có phải đẩy xuống nữa hay không ?
Quá trình đẩyxuốngsẽ kết thúckhiđã đẩyđến nútlà hoặc cây thỏamãn tính chấtcó thứ
tự từng phần
RemoveMin
3
5
9
8 9
9
6 10
1610
Min Heap
Demo
Insert
Chiến lược:
Để thêm một phần tử vào cây ta bắt đầu bằng việc tạo một nút lá mới nằm
ở mức cao nhất.
Nếu tất cả các lá ở mức cao nhất đều đang có mặt thì ta thêm nút mới vào
bên trái nhất ở mức mới.
->Khinàycâybịmấtđi tínhchấtthứtựtoànphần
Tiếp đó ta cho nút này "nổi dần lên" bằng cách đổi chổ nó với nút mẹ của
nó nếu nút mẹ có độ ưu tiên nhỏ hơn.
Đâycũng là 1 quátrìnhđệquy.Quá trình đó sẽ dừng khi đã nổi lên đến nút gốc
hoặc cây thỏa mãn tính chất có thứ tự từng phần.
Insert
Thuậttoán:Xét vớiMin-Heap
 Bước 1:
Tathêm nútcầnthêm vàocâyởmứccuối cùng củacây.
 Bước 2:
Tasosánhnútnàyvới nútmẹcủanó:
Nếu giá trịnútnàynhỏhơn nútmẹthì đổichỗ2 nút.
Ngược lạithì kếtthúcvì câyđãthỏathứtựtoànphần.
 Bước 3:
Nếu nhưđổi chỗ2 núttaphảixéttiếpnútmẹvừa đổi.
XétlạiBước 2 với Nútmẹ vừa đổichỗ.
Insert
3
5
9
8 9
9
6 10
1610 4
Min Heap
Demo
Xây dựng Tree Heap
Để việc xây dựng được hiệu quả, ta phải cố
gắng sao cho cây tương đối ‘cân bằng’.
Mọi nút trung gian (trừ nút là cha của nút lá) đều
có hai con
Đối với các nút mẹ của nút là có thể chỉ có một
con và trong trường hợp đó ta quy ước là con trái
(không có con phải).
XâydựngTreeHeap
Có 2 cách xâydựng Tree Heap:
Rebuild (Xây dựng từ một câykháckhông có thứ tự).
Build (Xây dựng trực tiếp từ mảng giá trị cho trước) .
XâydựngTreeHeap
Build:
Đầutiên:takhởi tạocâyrỗng
Sauđó:TaápdụngthuậttoánInsertđểthêmtừngnútvàocây.
ReBuild:
Taphảixâydựngcâyhiện tạisaochocâyđócóthứtựtoànphần.
Tacầnphảixéttừnútmẹthứ0 => nútmẹ cuốicùng (n-1)/2.
HeapSort
Chiến lược: Dựa vào tính chất Tree Heap để sắp xếp lại mảng.
Nhận xét ta thấy rằng:
+ Nút gốc của min-Heap sẽ nhỏ nhất trong cây.
+ Nếu ta lấy nút gốc ra và đưa vào 1 mảng mới ta sẽ được phần
tử nhỏ nhất
 Vậy ta lại lấy phần tử nhỏ tiếp theo khi đã loại bỏ phần tử nhỏ
nhất khỏi cây đưa vào mảng mới ta sẽ được mảng đc sắp xếp
tăng dần
HeapSort
Thuật toán:
+Bước 1: Ta xây dựng Tree Heap từ mảng ban đầu.(Rebuild hoặc Build)
+Bước 2: Ta lấy phần tử nút gốc ra khỏi cây (Phần tử a[0])
+Để lấy phần tử nút gốc ra khỏi cây ta chỉ cần đổi chỗ nút gốc vs nút là cuối
cùng ( Đổi chỗ a[0] với a[n-1])
+Bước 3:
 Ta xây dựng lại cây với n-1 phần tử.
Ta áp dụng thuật toán RemoveMin để cân bằng lại cây
 Lặp lại bước 2 khi vẫn còn phần tử trong mảng.
Sau khi kết thúc:Ta thấy rằng mảng sẽ được sắp xếp giảm dần.
ỨngdụngPriorityQueue
Ứng dụng
– Quản lý băng thông
- Thuật toán Huffman
- Thuật toán Dijkstra là một thuật toán giải quyết bài toán đường đi ngắn nhất dùng
trong công nghệ Hệ thống định vị toàn cầu (GPS)
- Dùng các bài toán có nhiều lựa chọn để xét độ ưu tiên để đạt hiểu quá tối ưu nhất.
Thankyou!
Question&Answer

More Related Content

What's hot

Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)iwanttoit
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql. .
 
Cây và cây nhị phân
Cây và cây nhị phân Cây và cây nhị phân
Cây và cây nhị phân kikihoho
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátTráng Hà Viết
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Nguyễn Công Hoàng
 
Bai03 he thong tap tin fat
Bai03   he thong tap tin fatBai03   he thong tap tin fat
Bai03 he thong tap tin fatVũ Sang
 
C3 stack queue
C3 stack queueC3 stack queue
C3 stack queuehiep0109
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtHưởng Nguyễn
 
Trí tueeuj nhân tạo
Trí tueeuj nhân tạoTrí tueeuj nhân tạo
Trí tueeuj nhân tạoThuần Phong
 
Hỗ trợ ra quyết định
Hỗ trợ ra quyết địnhHỗ trợ ra quyết định
Hỗ trợ ra quyết địnhlmphuong06
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cậnDiên Vĩ
 
Báo cáo bài tập lớn
Báo cáo bài tập lớnBáo cáo bài tập lớn
Báo cáo bài tập lớnhung le
 
Baitapmangmaytinh
BaitapmangmaytinhBaitapmangmaytinh
BaitapmangmaytinhĐấy Vợ
 

What's hot (20)

Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
Cây và cây nhị phân
Cây và cây nhị phân Cây và cây nhị phân
Cây và cây nhị phân
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
 
Bai03 he thong tap tin fat
Bai03   he thong tap tin fatBai03   he thong tap tin fat
Bai03 he thong tap tin fat
 
C3 stack queue
C3 stack queueC3 stack queue
C3 stack queue
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Trí tueeuj nhân tạo
Trí tueeuj nhân tạoTrí tueeuj nhân tạo
Trí tueeuj nhân tạo
 
Hỗ trợ ra quyết định
Hỗ trợ ra quyết địnhHỗ trợ ra quyết định
Hỗ trợ ra quyết định
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
 
Báo cáo bài tập lớn
Báo cáo bài tập lớnBáo cáo bài tập lớn
Báo cáo bài tập lớn
 
C4 1 tuan 14
C4 1 tuan 14C4 1 tuan 14
C4 1 tuan 14
 
Baitapmangmaytinh
BaitapmangmaytinhBaitapmangmaytinh
Baitapmangmaytinh
 
Cây Nhị Phân
Cây Nhị PhânCây Nhị Phân
Cây Nhị Phân
 
Đè tài: Phân tích thiết kế hệ thống quản lí phòng trọ, HAY
Đè tài: Phân tích thiết kế hệ thống quản lí phòng trọ, HAYĐè tài: Phân tích thiết kế hệ thống quản lí phòng trọ, HAY
Đè tài: Phân tích thiết kế hệ thống quản lí phòng trọ, HAY
 
Đề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAY
Đề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAYĐề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAY
Đề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAY
 
Ngân hàng hệ thống phân tán PTIT
Ngân hàng hệ thống phân tán PTITNgân hàng hệ thống phân tán PTIT
Ngân hàng hệ thống phân tán PTIT
 
Pt04 de qui
Pt04 de quiPt04 de qui
Pt04 de qui
 

Similar to Thuyết trình Cây Nhị Phân

trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdfNguynVnTun74
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Hồ Lợi
 
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTBài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTMasterCode.vn
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyNguyen Van Hung
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Hồ Lợi
 

Similar to Thuyết trình Cây Nhị Phân (6)

trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3
 
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTBài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copy
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 

Thuyết trình Cây Nhị Phân

  • 3. KháiniệmQueue  Hàng đợi (Queue) là một cấu trúc dữ liệu dùng để chứa các đối tượng làmviệc theo cơ chế FIFO (First In First Out)  Việc thêm một đối tượng luôn diễn ra ở cuối hàng đợi và một phần tử luôn được lấy ra từ đầu hàng đợi.
  • 4. `QueueVídụ:  Hàng đợi (Queue) là một cấu trúc dữ liệu dùng để chứa các đối tượng làmviệc theo cơ chế FIFO (First In First Out)  Việc thêm một đối tượng luôn diễn ra ở cuối hàng đợi và một phần tử luôn được lấy ra từ đầu hàng đợi.
  • 5. ThaotáctrênQueue TrênQueuecócác thao tácsau: Thêmphần tử vào cuốiQueue(Push) Xóa phần tử đầu Queue(Pop) Front Rear
  • 6. ThaotáctrênQueue Thêmphần tử vào cuốiQueue(Push) Xóa phần tử đầu Queue (Pop)
  • 7. XâydựngQueue  Nếuxây dựng Queuebằngmảng thì sẽ nhận thấy rằng: - Khi xoá một phần tử front tăng lên 1, khi thêm một phần tử rear tăng lên 1,đến một lúc nào đó ta không thể thêm vào hàng được nữa (rear=maxlength-1) dù mảng còn nhiều chỗ trống (các vị trí trước front) →Trường hợp này ta gọi là hàng bị tràn  Để khắc phục điều này chúng ta có thể coi mảng đó như 1 mảng với các phân tử được xếp vòng tròn để việc push và pop dễ dànghơn. Queue Circular(Hàng đợi vòng)
  • 8. KháiniệmPriorityQueue  Hàng đợi ưutiên (Priority Queue)là một kiểu dữ liệu trừu tượng tập hợp đặc biệt, trong đó mỗi phần tử cómột độưu tiên nàođó.  Hàng đợi ưutiên là cấutrúc dữ liệu tổng hợpcủa stack và queue.  Hàng đợi ưutiên không theo cơ chế FIFO.  Độ ưu tiên của phần tử thường là một số, theo đó, phần tử cóđộưu tiên nhỏ nhất sẽ được ‘ưu tiên’ nhất.  Ví dụ tại bệnh viện, cácbệnh nhân xếphàng để chờ phục vụnhưng không phải người đếntrước thì được phục vụ trước mà họ cóđộ ưu tiên theo tình trạng khẩn cấpcủa bệnh.
  • 9. PriorityQueue  Mỗi nút gồm: +Value (Giá trị) + Priority (Độ ưu tiên)  Chẳng hạn:  Ta thấy rằng:nút cóđộ ưutiên cao nhất sẽ đượclấy ra trước trong queue
  • 12. CàiđặtPriorityQueue  Ta không thể cài đặt Priority Queue bằng bảng băm vì bảng băm không thuận lợi trong việc tìm kiếm phần tử nhỏ nhất →Nên cách cài đặt Priority Queue khá thuận lợi đó là cài đặt bằng cây có thứ tự từng phần (TreeHeap).
  • 13. Câycàiđặtbằngmảng Nút mẹ thứ i gồm: Nút conbên trái: = 2*i+ 1 Nút conbên phải: =2*i + 2 Nút mẹ cuối cùngtrong cây: (n-1)/2 vớin là sốlượng phần tử  Giả sử ta cónút thứ i trong mảng: -> Nút mẹ của nút này là (i-1)/2  Các nút mẹ trong cây: từ i=0-> (n-1)/2
  • 15. TreeHeap Địnhnghĩa cây cóthứ tự từng phần ( Treeheap) Cây cóthứ tự từng phần là cây nhị phân mà giá trị tại mỗi nút mẹ có1 quan hệ thứ tự nào đó với2 nút con của nó. Có 2loại cây heap thường dùng: Max-Heap , Min-Heap Max-Heap:cây nhị phân mà giá trị tại mỗi nút mẹ đều lớn hơn hoặc bằng giá trị của hai con. Min-Heap: cây nhị phân mà giá trị tại mỗi nút mẹ đều nhỏ hơn hoặc bằng giá trị của hai con.
  • 17. Nhậnxét  Trêncây cóthứ tự từng phần, nút gốc là nút cógiá trị nhỏ nhất  Từ nhận xét này, ta thấy cóthể sử dụng cây cóthứ tự từng phần để cài đặt hàng đợiưu tiên  Trongđómỗi phần tử được biểu diễn bởi một nút trên câymà độ ưu tiên của phần tử là giá trị của nút
  • 18. CácthaotáctrênTreeHeap Vì TreeHeap dùng để biểu diễn Priority Queue nên sẽ cócácthao tác tương tự Queue: -Tìm phần tử lớnnhất/nhỏ nhất (Find Min/Max) - Xóa phần tử đầu tiên của cây (RemoveMiin) - Thêm phầntử vào cuốicây (Insert)
  • 19. FindMin 3 9 8 9 9 6 10 1610 5 Min-Heap Dễ dàng nhận thấy rằngNút gốc của cây chính là Max/ Min
  • 20. Remove Chiếnlược: Xét cây Min-Heap Lấynútlá tạimứccaonhấtvà nằmbênphảinhấtthaythếchonútgốc.  Như vậy cây vẫn "cân bằng" nhưng nó không còn đảm bảo tính thứ tự từng phần. Để xây dựng lại cây từng phần ta thực hiện việc "đẩy nút này xuống dưới". Tức là ta đổi chổ nó với nút con nhỏ nhất của nó, nếu nút con này có độ ưu tiên nhỏ hơn nó. Đâylà 1 quátrìnhđệquy.Quá trình đó sẽ dừng khi đã nổi lên đến nút gốc hoặc cây thỏa mãn tính chất có thứ tự từng phần.
  • 21. RemoveMin Giải thuật: Xétcây Min-Heap  Bước 1:Tathaythếnútgốcbằngnútlá cuối cùng trongcây  Bước 2: Taxéttừnútgốc: Nếugiátrịnúttráinhỏhơn nútphảivà nhỏhơn cảnútgốcthì tađổichỗnút tráivới nútgốc. Nếugiá trịnútphảinhỏhơn núttráivà nhỏhơn cảnútgốcthì tađổichỗnút phảivới nútgốc.  Bước 3: Sau khi đẩy nút gốc xuống một con nào đó (trái hoặc phải) thì phải tiếp tục xét con đó xem có phải đẩy xuống nữa hay không ? Quá trình đẩyxuốngsẽ kết thúckhiđã đẩyđến nútlà hoặc cây thỏamãn tính chấtcó thứ tự từng phần
  • 23. Insert Chiến lược: Để thêm một phần tử vào cây ta bắt đầu bằng việc tạo một nút lá mới nằm ở mức cao nhất. Nếu tất cả các lá ở mức cao nhất đều đang có mặt thì ta thêm nút mới vào bên trái nhất ở mức mới. ->Khinàycâybịmấtđi tínhchấtthứtựtoànphần Tiếp đó ta cho nút này "nổi dần lên" bằng cách đổi chổ nó với nút mẹ của nó nếu nút mẹ có độ ưu tiên nhỏ hơn. Đâycũng là 1 quátrìnhđệquy.Quá trình đó sẽ dừng khi đã nổi lên đến nút gốc hoặc cây thỏa mãn tính chất có thứ tự từng phần.
  • 24. Insert Thuậttoán:Xét vớiMin-Heap  Bước 1: Tathêm nútcầnthêm vàocâyởmứccuối cùng củacây.  Bước 2: Tasosánhnútnàyvới nútmẹcủanó: Nếu giá trịnútnàynhỏhơn nútmẹthì đổichỗ2 nút. Ngược lạithì kếtthúcvì câyđãthỏathứtựtoànphần.  Bước 3: Nếu nhưđổi chỗ2 núttaphảixéttiếpnútmẹvừa đổi. XétlạiBước 2 với Nútmẹ vừa đổichỗ.
  • 25. Insert 3 5 9 8 9 9 6 10 1610 4 Min Heap Demo
  • 26. Xây dựng Tree Heap Để việc xây dựng được hiệu quả, ta phải cố gắng sao cho cây tương đối ‘cân bằng’. Mọi nút trung gian (trừ nút là cha của nút lá) đều có hai con Đối với các nút mẹ của nút là có thể chỉ có một con và trong trường hợp đó ta quy ước là con trái (không có con phải).
  • 27. XâydựngTreeHeap Có 2 cách xâydựng Tree Heap: Rebuild (Xây dựng từ một câykháckhông có thứ tự). Build (Xây dựng trực tiếp từ mảng giá trị cho trước) .
  • 29. HeapSort Chiến lược: Dựa vào tính chất Tree Heap để sắp xếp lại mảng. Nhận xét ta thấy rằng: + Nút gốc của min-Heap sẽ nhỏ nhất trong cây. + Nếu ta lấy nút gốc ra và đưa vào 1 mảng mới ta sẽ được phần tử nhỏ nhất  Vậy ta lại lấy phần tử nhỏ tiếp theo khi đã loại bỏ phần tử nhỏ nhất khỏi cây đưa vào mảng mới ta sẽ được mảng đc sắp xếp tăng dần
  • 30. HeapSort Thuật toán: +Bước 1: Ta xây dựng Tree Heap từ mảng ban đầu.(Rebuild hoặc Build) +Bước 2: Ta lấy phần tử nút gốc ra khỏi cây (Phần tử a[0]) +Để lấy phần tử nút gốc ra khỏi cây ta chỉ cần đổi chỗ nút gốc vs nút là cuối cùng ( Đổi chỗ a[0] với a[n-1]) +Bước 3:  Ta xây dựng lại cây với n-1 phần tử. Ta áp dụng thuật toán RemoveMin để cân bằng lại cây  Lặp lại bước 2 khi vẫn còn phần tử trong mảng. Sau khi kết thúc:Ta thấy rằng mảng sẽ được sắp xếp giảm dần.
  • 31. ỨngdụngPriorityQueue Ứng dụng – Quản lý băng thông - Thuật toán Huffman - Thuật toán Dijkstra là một thuật toán giải quyết bài toán đường đi ngắn nhất dùng trong công nghệ Hệ thống định vị toàn cầu (GPS) - Dùng các bài toán có nhiều lựa chọn để xét độ ưu tiên để đạt hiểu quá tối ưu nhất.