1. Trang chủ
  2. » Giáo án - Bài giảng

Bai 4 cay nhi phan

45 148 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 45
Dung lượng 502,08 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các khái niệmCác CTDL mảng, danh sách đã nghiên cứu trong bài 3 được gọi là các cấu trúc tuyến tính, nghĩa là quan hệ lân cận giữa các thành phần được hiển thị ra.Trên thực tế, có nhiều đối tượng mà quan hệ lân cận giữa các phần tử không được hiển thị ra, gọi là các cấu trúc phi tuyến. Các CTDL cây, cấu trúc đồ thị, cấu trúc đa danh sách, danh sách tổng quát đều là các cấu trúc phi tuyến.Trong đó cây là 1 CTDL phi tuyến được ứng dụng rất nhiều trong các mô hình tin học.Khái niệm về cây: Cây (tree) là 1 tập hợp hữu hạn các nút trong đó có 1 nút đặc biệt gọi là nút gốc (root). Giữa các nút có 1 quan hệ phân cấp gọi là Quan hệ cha con.

Trang 1

BÀI 4: CÂY NH Ị PHÂN

4.1 Các khái niệm

4.2 Cây nhị phân

4.3 Một số ứng dụng

4.4 Bài tập

Trang 2

4.1 Các khái niệm

Các CTDL mảng, danh sách đã nghiên cứu trong bài 3

được gọi là các cấu trúc tuyến tính , nghĩa là quan hệ lân cận giữa các phần tử được hiển thị ra

Trên thực tế, có nhiều đối tượng mà quan hệ lân cận giữa các phần tử không được hiển thị ra, gọi là các cấu trúc phi tuyến Các CTDL cây , cấu trúc đồ thị, cấu trúc

đa danh sách, danh sách tổng quát đều là các cấu trúc phi

tuyến.

Trong đó cây là 1 CTDL phi tuyến được ứng dụng rất nhiều trong các mô hình tin học.

Trang 3

Khái niệm

Khái niệm: Cây (tree) là 1 tập hợp hữu hạn các nút

trong đó có 1 nút đặc biệt gọi là nút gốc ( root ) Giữa các nút có 1 quan hệ phân cấp gọi là “ quan hệ cha con ”.

Quy ướ c: Cây có 0 nút gọi là cây rỗng (null tree)

Trang 5

Cấp cao nhất của 1 nút trên cây gọi là cấp của cây đó.

Ví dụ: cây đã cho là cây cấp 3

Gốc của cây người ta gán cho số mức là 1, nếu nút cha

có mức là i thì nút con sẽ có mức là i+1.

Ví dụ: nút A có số mức là 1, D có số mức là 2, G có số

mức là 3 và J có số mức là 4

Trang 6

Mức của các nút trên cây

Trang 7

4.1 Các khái niệm

Chiều cao hay chiều sâu của 1 cây là số mức lớn nhất của nút có trên cây đó.

Ví dụ: cây đã cho có chiều cao là 4

Nếu n1, n2, …, nk là dãy các nút mà ni là cha của ni+1 với

1 ≤ i < k thì dãy đó gọi là đường đi từ n1 đến nk Độ dài của đường đi bằng số nút trên đường đi trừ đi 1.

Ví dụ: độ dài đường đi từ A tới G là 2, từ A tới K là 3

Nếu thứ tự các cây con của 1 nút được coi trọng thì cây

đó là cây có thứ tự , ngược lại là cây không có thứ tự

Thứ tự các cây con của 1 nút được đặt từ trái sang phải

Tập hợp các cây phân biệt được gọi là rừng (forest), 1 cây cũng là 1 rừng Nếu bỏ nút gốc trên cây thì sẽ tạo

Trang 8

được lưu trữ ở các nút lá, các toán tử được lưu trữ ở cácnút nhánh, mỗi nhánh là 1 biểu thức con.

Trang 9

Cây biểu diễn biểu thức số học

Toán hạng được lưu trữ ở các nút lá

Toán tử (hay phép toán ) được lưu trữ ở các nút nhánh Mỗi nhánh là 1 biểu thức con.

Ví dụ: Cây biểu diễn biểu thức (A / B + C) * (D – E)

Trang 10

4.2.1 Khái niệm và tính chất

4.2.2 Biểu diễn cây nhị phân

4.2.3 Phép duyệt cây nhị phân

Trang 11

4.2.1 Khái niệm và tính chất

Khái niệm: Cây nhị phân là 1 dạng quan trọng của cấu trúc cây, có đặc điểm là mọi nút trên cây chỉ có tối đa 2 nhánh con Với 1 nút, ta phân biệt cây con trái và cây con phải của nút đó.

Cây nhị phân là cây có thứ tự

Các khái niệm đối với cây đều có thể áp dụng đối với cây

Trang 12

Một số dạng cây nhị phân đặc biệt

Trang 13

Một số dạng cây nhị phân đặc biệt

Trang 14

Một số dạng cây nhị phân đặc biệt

Các cây con a, b, c, d được gọi là cây nhị phân suy biến

vì thực chất nó có dạng của 1 danh sách tuyến tính.

a gọi là cây lệch trái, b gọi là cây lệch phải, c và d gọi là

cây zic - zắc

Nhận xét: Trong các cây nhị phân có cùng số lượng nút

như nhau thì cây nhị phân suy biến có chiều cao lớn

nhất

Cây e, f gọi là cây nhị phân hoàn chỉnh

Các nút (trừ nút cu ố i cùng) đều đạt tối đa

f có các nút tối đa trên mọi mức, còn gọi là cây nhị phân

đầy đủ, đây 1 t/h đặc biệt của cây nhị phân hoàn chỉnh.Trong các cây nhị phân có cùng số lượng nút như nhauthì cây nhị phân hoàn chỉnh thì có chiều cao nhỏ nhất

Trang 15

4.2.2 Biểu diễn cây nhị phân

Có 2 cách để biểu diễn cây nhị phân:

Trang 18

Nhược điểm

Trong trường hợp cây nhị phân không đầy đủ, ta có thể:

1 Thêm vào 1 số nút giả để được cây nhị phân đầy đủ, vàgán những giá trị đặc biệt cho những phần tử trong mảng

T tương ứng với những nút này

2 Hoặc dùng thêm 1 mảng phụ để đánh dấu những nút nào

là nút giả mà tự ta thêm vào

Nhược điểm: Chính vì lý do này nên với cây nhị phân

không đầy đủ, sẽ gặp phải sự lãng phí bộ nhớ vì có thể sẽ phải thêm rất nhiều nút giả vào thì mới được cây nhị phân đầy đủ.

Ví dụ: với cây lệch trái có chiều cao 5, phải dùng 1 mảng

T có 31 phần tử để lưu cây nhị phân chỉ gồm 5 nút

Trang 19

Biểu diễn cây lệch trái bằng mảng

Trang 20

Biểu diễn bằng cấu trúc liên kết

Khi biểu diễn cây nhị phân bằng cấu trúc liên kết, mỗi nút của cây là 1 bản ghi ( record, struct ), gồm 3 trường:

1.info: Chứa giá trị lưu tại nút đó

2.left: Chứa liên kết tới nút con trái, nghĩa là chứa 1 thôngtin đủ để biết nút con trái của nút đó là nút nào, trong

trường hợp không có nút con trái: left == null

3.right: Chứa liên kết tới nút con phải, nghĩa là chứa 1thông tin đủ để biết nút con phải của nút đó là nút nào,trong trường hợp không có nút con phải: right == null

Đối với cây chỉ cần phải quan tâm đến nút gốc , bởi từ nút gốc, đi theo các hướng liên kết left , right có thể duyệt mọi nút khác của cây.

Trang 21

Cấu trúc nút của cây nhị phân

Cấu trúc nút của cây:

Khai báo cây nhị phân bằng cấu trúc liên kết:

typedef struct node

{

int info; //Dữ liệu của nút

node *left, *right; //Con trỏ trỏ tới nút con trái và phải

}

node* head; //Con trỏ trỏ tới nút gốc của cây

Trang 22

Biểu diễn bằng cấu trúc liên kết

Có thể biểu diễn cây nhị phân bằng cấu trúc liên kết, với cấu trúc nút đã trình bày như sau:

Trang 23

4.2.3 Phép duyệt cây nhị phân

Thường phải thực hiện các phép xử lý trên mỗi nút của cây theo 1 thứ tự nào đó.

Ví dụ: Đối với cây biểu diễn biểu thức số học, để xác

định giá trị của biểu thức ta sẽ phải xử lý ở mỗi nút trên

cây như sau:

1 Nếu là nút biểu diễn toán hạng ta sẽ xác định giá trị của

toán hạng đó

2 Nếu là nút biểu diễn dấu phép toán ta sẽ áp đặt phép

toán đó lên giá trị của các cây con của nút ấy

3 Ta không thể thực hiện phép toán này, nếu các cây con

chưa được xử lý Từ đó ta thấy: thứ tự xử lý nút trên cây

là rất quan trọng

Trang 24

Nếu 1 nút không có nút con trái (hoặc phải) thì liên kết left

(right) của nút đó được liên kết tới 1 nút đặc biệt là null

Nếu cây rỗng thì nút gốc của cây đó được gán bằng null.Khi thăm 1 cây rỗng thì duyệt nghĩa là không làm gì cả

Có 3 cách duyệt cây hay được sử dụng:

1.Duyệt theo thứ tự trước (preorder traversal)

2.Duyệt theo thứ tự giữa (inorder traversal)

3.Duyệt theo thứ tự sau (postorder traversal)

Trang 25

Duyệt theo thứ tự trước

Giá trị trong mỗi nút bất kỳ sẽ được liệt kê trước giá trị lưu trong 2 nút con của nó.

Quá trình duyệt bắt đầu bằng lời gọi: Visit(head)

Trang 26

Duyệt theo thứ tự giữa

Giá trị trong mỗi nút bất kỳ sẽ được liệt kê sau giá trị lưu

ở nút con trái và trước giá trị lưu ở nút con phải của nó

Quá trình duyệt bắt đầu bằng lời gọi: Visit(head)

Kết quả duyệt với cây đã cho: H D I B E J A K F C G L

Trang 27

Duyệt theo thứ tự sau

Giá trị trong mỗi nút bất kỳ sẽ được liệt kê sau giá trị lưu

Quá trình duyệt bắt đầu bằng lời gọi: Visit(head)

Trang 28

4.3.1 Cây biểu diễn biểu thức

4.3.2 Cây nhị phân tìm kiếm (BST)

4.3.3 Cây BST cân bằng hoàn toàn

4.3.4 Cây cân bằng (AVL)

Trang 29

4.3.1 Cây biểu diễn biểu thức

Bài toán tính toán giá trị của biểu thức số học có thể

được thực hiện bằng cây biểu diễn đa thức.

Ví dụ: Cây biểu diễn biểu thức (A / B + C) * (D – E)

Sau đó sử dụng 1 trong các phép duyệt cây để tính toán giá trị biểu thức.

Trang 30

Biểu thức số học gồm các toán tử 2 ngôi được biểu diễn

rất tự nhiên bằng cấu trúc cây nhị phân

Đối với các toán tử 1 ngôi (dấu âm -, dấu dương +, phép

phủ định): ta coi toán hạng luôn là con phải của nó

Trang 31

4.3.2 Cây nhị phân tìm kiếm

Khái niệm: Cây nhị phân tìm kiếm ( Binary Search Tree

nút đang xét lớn hơn khóa của tất cả các nút thuộc cây con trái và nhỏ hơn khóa của tất cả các nút thuộc cây con phải

Trang 32

Kết luận: Để có độ phức tạp giải thuật luôn là O(log2N)

cần có cải tiến cấu trúc của cây BST: cây nhị phân tìm kiếm cân bằng hoàn toàn, cây AVL,

Trang 33

4.3.2 Cây nhị phân tìm kiếm

Dãy số mô tả bằng cấu trúc cây nhị phân tìm kiếm:

Trang 34

4.3.3 Cây BST cân bằng hoàn toàn

Khái niệm: Cây nhị phân tìm kiếm cân bằng hoàn toàn

là cây nhị phân tìm kiếm ( BST ) mà tại mỗi nút của nó, số nút của cây con trái chênh lệch không quá 1 so với số nút của cây con phải.

Đ ánh giá:

Nếu cây cân đối thì việc tìm kiếm sẽ nhanh

Đối với cây cân bằng hoàn toàn có N nút, trong trường

hợp xấu nhất chỉ phải tìm qua log2N phần tử

Trang 35

4.3.3 Cây BST cân bằng hoàn toàn

Nhận xét:

Một cây BST rất khó đạt được trạng thái cân bằng hoàntoàn và cũng rất dễ mất cân bằng vì khi thêm hay xóa cácnút trên cây có thể làm cây mất cân bằng (xác suấ t r ấ t

Trang 36

This image cannot currently be display ed.

Trang 37

4.3.3 Cây BST cân bằng hoàn toàn

Nếu bổ sung thêm khóa 50 vào cây BST thì cây không còn cân bằng hoàn toàn nữa (do vi phạm điều kiện cân bằng ở 88 ).

Trang 38

4.4.4 Cây cân bằng AVL

Khái niệm: Cây nhị phân tìm kiếm cân bằng ( AVL ) là cây BST mà tại mỗi nút của nó độ cao của cây con trái

và của cây con phải chênh lệch không quá 1.

Cây nhị phân tìm kiếm cân bằng hoàn toàn là cây AVL,

nhưng điều ngược lại chưa chắc đúng

Lịch sử:

AVL là tên viết tắt của các tác giả người Nga là Velskii và Landis (1962) Thuật ngữ cây AVL thường

Adelson-được thay cho cây BST cân b ằ ng.

Ứng dụng trong nhiều bài toán khác nhau và thu hútnhiều nghiên cứu

Một số loại CTDL phát triển thêm từ cây AVL: cây đỏ

-đen (Red-Black Tree), B-Tree, …

Trang 39

4.4.4 Cây cân bằng AVL

Đ ánh giá:

Cây AVL là cấu trúc dữ liệu ổn định hơn hẳn cây nhị

phân tìm kiếm cân bằng hoàn toàn, vì chỉ khi thêm, xóacác nút làm cây thay đổi chiều cao, các trường hợp mấtcân bằng mới có khả năng xảy ra

Cây AVL với chiều cao được khống chế sẽ cho phép

thực thi các thao tác tìm thêm hủy với chi phí O(log2N)

và bảo đảm không suy biến thành O(N)

Phép xoay cây AVL: Khi xảy ra mất cân bằng, để đưa

cây về trạng thái cân bằng thì phải thực hiện các phép xoay tại nút xảy ra mất cân bằng.

Trang 40

4.4.4 Cây cân bằng AVL

Đây là cây AVL nhưng không phải là cây nhị phân tìm

kiếm cân bằng hoàn toàn.

Nếu bổ sung thêm khóa 50 vào cây AVL thì cây không còn cân bằng nữa (do vi phạm điều kiện cân bằng ở 88 ).

Trang 41

Kết luận

Rõ ràng đối với cây nhị phân bất kỳ thì cách tổ chức cây theo cấu trúc liên kết tỏ ra thích hợp hơn cách tổ chức bằng mảng 1 chiều.

Tuy nhiên, cách cài đặt này cũng có những nhược điểm nhất định:

1 Tốc độ xử lý chậm hơn do chỉ có nút gốc của cây có thểđược truy cập trực tiếp còn các nút khác chỉ được truy

cập sau khi đã qua 1 số bước duyệt cây

2 Tốn bộ nhớ hơn do ngoài trường info phải có thêm trường

left và right ở mỗi nút để lưu trữ địa chỉ nút con trái và nútcon phải của nút đó

Trang 42

4.4 Bài tập

1 Mối liên hệ giữa số nút, chiều cao và loại cây:

a) Trong các cây nhị phân có cùng số nút N, loại cây nào

có chiều cao lớn nhất và H = ?b) Trong các cây nhị phân có cùng số nút N, loại cây nào

có chiều cao nhỏ nhất và H = ?c) Trong các cây nhị phân có cùng chiều cao H, loại cây

nào có số nút lớn nhất và N = ?d) Trong các cây nhị phân có cùng chiều cao H, loại cây

nào có số nút nhỏ nhất và N = ?e) Có gì khác khi xét cây nhị phân biểu diễn biểu thức số

học chỉ gồm các phép toán 2 ngôi?

Trang 43

4.4 Bài tập

2 Cây nhị phân biểu diễn biểu thức:

Cho biểu thức số học: A + (B – C) * D / E + F

Vẽ cây nhị phân biểu diễn biểu thức số học Cho biết

chiều cao của cây?

Duyệt cây theo thứ tự trước (giữ a, sau).

Viết hàm đệ quy duyệt cây theo thứ tự trước (giữ a, sau)

và chỉ ra 3 đặc điểm của hàm đệ quy

Liên hệ với bài toán ký pháp Ba Lan

Trang 44

Duyệt cây theo thứ tự trước (giữ a, sau).

Viết hàm đệ quy duyệt cây theo thứ tự trước (giữ a, sau)

và chỉ ra 3 đặc điểm của hàm đệ quy

Trang 45

Chỉ rõ các trường hợp mất cân bằng trong quá trình bổ

sung các số vào cây AVL và cách xoay để cây trở lại

trạng thái cân bằng

Duyệt cây theo thứ tự trước (giữ a, sau).

Viết hàm đệ quy duyệt cây theo thứ tự trước (giữ a, sau)

và chỉ ra 3 đặc điểm của hàm đệ quy

Tại sao trên thực tế cây AVL được sử dụng rộng rãi câyBST?

Ngày đăng: 27/08/2019, 16:51

TỪ KHÓA LIÊN QUAN

w