1. Trang chủ
  2. » Tất cả

Cấu trúc dữ liệu và Thuật toán - Nguyễn Văn Núi -Chương 3. [3.2 + 3.3] CayNP+NPTK

35 5 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 35
Dung lượng 1,23 MB

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

Nội dung

ĐỊNH NGHĨA CÂY NHỊ PHÂN  Cây nhị phân: là 1 cây trong đó mỗi đỉnh của cây có tối đa hai nút con và được sắp thành cây con trái và cây con phải... Các dạng cây NP đặc biệt => Gọi chung l

Trang 1

CHƯƠNG 3 <continue>

CÂY - TREE

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 1/35

Trang 3

3.2 CÂY NHỊ PHÂN

1 ĐỊNH NGHĨA CÂY NHỊ PHÂN

2 BIỂU DIỄN CÂY NHỊ PHÂN

3 CÁC PHÉP DUYỆT CÂY

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 3/35

Trang 4

ĐỊNH NGHĨA CÂY NHỊ PHÂN

Cây nhị phân: là 1 cây trong đó mỗi đỉnh của cây có tối đa hai nút con và được sắp thành cây con trái và cây con phải

Quy ước: vẽ nút con trái bên trái nút cha và nút con phải bên

phải nút cha

 Ví dụ:

Trang 6

Các dạng cây NP đặc biệt

=> Gọi chung là các cây nhị phân suy biến thành

danh sách

Cây zic zắc cây lệch trái cây lệch phải

Trang 7

Các dạng cây NP đặc biệt

Cây nhị phân hoàn chỉnh : có chiều

cao h thì mọi nút có mức < h-1 đều

Trang 8

(a) Cây nhị phân hoàn chỉnh (h=3)

Mọi đỉnh có mức <2 đều có 2 con

(b) Cây nhị phân đầy đủ (h=3)

Mọi đỉnh có mức 2 đều có 2 con

(c) Cây nhị phân (h=4)

+ Không hoàn chỉnh (D,E có <2 con) + Không đầy đủ

Trang 9

Nhận xét

+ Trong cây nhị phân có cùng số đỉnh

- Cây nhị phân suy biến có chiều cao lớn nhất

- Cây nhị phân đầy đủ có chiều cao nhỏ nhất

+ Với cây nhị phân đầy đủ cần chú ý tới một số tính chất

- Số lượng tối đa các đỉnh ở mức i là 2 i

- Số lượng tối đa các đỉnh trên cây có chiều cao h là:

2 h+1 - 1

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 9/35

Trang 10

a) BIỂU DIỄN CÂY NHỊ PHÂN ( NP) BỞI MẢNG

b) BIỂU DIỄN CÂY NP BỞI CON TRỎ

c) ỨNG DỤNG CÂY

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

Trang 11

a) Biểu diễn cây NP bởi mảng

Ví du: Xét cây nhị phân sau:

Infor Left Right

Trang 12

a) Biểu diễn cây NP bởi mảng

Trang 13

Tiện: Từ con có thể truy cập đến cha và ngược lại:

 Với nút i thì

Nút con trái của nó 2i và nút con phải là 2i+1

Nút cha của nút 2i, 2i+1 là i = Div (2i, 2) = Div(2i+1, 2)

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 13/35

Trang 14

b) Biểu diễn cây NP bởi con trỏ

struct Node {

item Infor;

struct Node *Left;

struct Node *Right;

};

typedef struct Node *BTree;

BTree root;

Trang 15

VD:Xét cây NP biểu diễn bởi con trỏ

 Root là con trỏ quản lý cây, luôn trỏ tới gốc

 Truy cập đến các đỉnh trên cây là truy cập tuần tự xuất phát từ gốc

 Cây rỗng: Root = NULL

Các node

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 15/35

Trang 16

Duyệt (thăm) cây NP

 Có 3 phương pháp duyệt: Duyệt trước, duyệt giữa, duyệt sau ,

nguyên tắc duyệt tương tự như cây tổng quát

Lưu ý : Xét cây Tổng quát Root 1 , cây nhị phân Root 2 như

=> Kết quả duyệt 2 cây này theo thứ tự giữa là khác nhau, duyệt theo thứ

tự trước, sau cho kết quả giống nhau

Trang 17

Xét cây NP gốc T có 2 cây con trái, phải tương ứng là T L , T R

1) Duyệt thứ tự trước cây gốc T: PreOrder(T) như sau:

Thăm gốc T

Thăm con trái T L theo thứ tự trước

Thăm con phải T R theo thứ tự trước

© nuinvtnu-2017 Data structures and Algorithms

Duyệt (thăm) cây NP

Trang 18

Visit(T);

PreOrder(T l );

PreOrder(T r );

Trang 19

- Thăm Tr theo thứ tự giữa

3) Duyệt sau: PostOrder(T) nhƣ sau:

- Thăm Tl theo thứ tự sau

- Thăm Tr theo thứ tự sau

- Thăm gốc T

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 19/35

Trang 20

- Duyệt cây theo thứ tự

trước -> cho biểu thức

tiền tố

- Duyệt cây theo thứ tự

sau -> cho biểu thức

hậu tố

- Duyệt cây theo thứ tự

giữa -> cho biểu thức

trung tố

Trang 21

NHẬN XÉT CHUNG

- Người ta thường chuyển cây tổng quát về cây

NP để tiện cho việc biểu diễn cây và cài đặt các phép toán => dùng cách cài đặt cây bằng con trưởng và em liền kề của mỗi đỉnh để chuyển

đổi

- Cây NP vẫn không thuận lợi cho phép toán tìm kiếm (thường chỉ có thể tìm kiếm tuần tự) Thao tác tìm kiếm là quan trọng => Để thuận lợi cho việc tìm kiếm, người ta tổ chức cây NP thành

cây Tìm kiếm nhị phân (TKNP) để có thể áp

dụng phương pháp tìm kiếm nhị phân trên cây

đó

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 21/35

Trang 22

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

– Binary search tree

- Cây nhị phân tìm kiếm còn gọi là cây tìm kiếm nhị phân,

viết tắt là cây TKNP

- Nội dung chính

Trang 23

3.1 Định nghĩa cây TKNP

Cây tìm kiếm nhị phân là một cây nhị phân thoả mãn các điều kiện sau:

Điều kiện 1:

Tất cả các đỉnh của cây con bên trái đều có

khóa đi trước (< ) khoá tại đỉnh gốc

Điều kiện 2:

Khoá tại gốc đi trước (<) khoá của tất cả các

đỉnh ở cây con bên phải

Điều kiện 3:

Cây con bên trái và cây con bên phải cũng là

cây tìm kiếm nhị phân

* Ví dụ

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 23/35

Trang 25

- Trường khoá phải chứa các giá trị có thể so

sánh được, tức là nó phải lấy giá trị từ một tập hợp có thứ tự

Nhận xét:

- Trên cây TKNP không có hai đỉnh cùng khoá

- Khi duyệt theo thứ tự giữa (InOrder) cây

TKNP ta được một dãy có thứ tự tăng của các khóa

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 25/35

Trang 26

3.2 Biểu diễn cây TKNP

*Dạng cài đặt sử dụng con trỏ:

struct Node {

item Key; // chú ý Kiểu dữ liệu của Khóa(Key)

[các trường lưu thông tin khác nếu có]

struct Node *Left;

struct Node *Right;

Trang 27

3.3 Một số phép toán cơ bản trên cây TKNP

- Cây NPTK có sự khác biệt so với cây nhị phân về các

phép toán, thể hiện ở chỗ:

Với cây NPTK ta có các phép toán nhƣ: tìm kiếm,

thêm hoặc xoá một nút trên cây để cây sau khi thêm,

Trang 28

Giả sử p trỏ tới đỉnh tìm thấy

- P bắt đầu từ gốc, so sánh x với

khóa tại nút trỏ bởi p:

+ Nếu bằng nhau thì:

* Kết thúc,

* thông báo tìm thấy + Nếu x nhỏ hơn thì:

* p đi xuống nhánh trái,

* tìm x lặp lại trên cây con trái

+ Nếu x lớn hơn:

* p đi xuống nhánh phải,

* tìm x lặp lại trên cây con phải

Bài toán: Tìm đỉnh có khóa x

trên cây gốc T

Trang 29

Nhận xét

- Số phép toán so sánh nhiều nhất trong quá trình tìm kiếm

 chiều cao h của cây => độ phức tạp về mặt thời gian 

O(h), dó đó thuận lợi cho phép toán tìm kiếm

- Cây TKNP thuận lợi cho phép tìm kiếm => cũng thuận lợi cho các phép toán thêm, xóa, sửa thông tin của đỉnh trên cây ( ~ các phép toán liên quan đến tìm kiếm )

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 29/35

Trang 30

- Nếu p = null: Chèn x vào T như sau :

+ Xin cấp bộ nhớ cho một nút mới:

New(M)

+ Gán giá trị cho nút mới:

M->key = x ; M->Left = null;

Bài toán: Chèn đỉnh có khóa x vào cây T nếu x chưa có

trên T sao cho sau khi thêm T vẫn là cây TKNP)

x 19 x

M

Trang 31

3) Xóa đỉnh có khóa x trên cây T

- Search (x, p, T)

- Nếu p = null => x  T, kết thúc

- Nếu p != null => x  T, p trỏ tới đỉnh tìm thấy, xóa x

khỏi T, sao cho cây sau khi xóa x vẫn là cây TKNP ~ xóa đỉnh được trỏ bởi p

Xóa : Ta chia làm 3 trường hợp:

TH1: Nếu p là lá: p = null

TH2: Nếu p có một trong 2 con là  :

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 31/35

Trang 32

- Treo cây con khác  vào vị trí của p

Trang 33

VD: Xét cây T trước khi xóa và sau

Trang 34

Cách làm:

- Tìm đỉnh cực phải của cây con trái/ đỉnh

cực trái của cây con phải của đỉnh trỏ bởi p

- Hoán đổi nội dung của đỉnh trỏ bởi p và

đỉnh cực phải của cây con trái/đỉnh cực trái của cây con phải

- Xóa nút cực phải/nút cực trái, việc xoá nút này sẽ rơi vào một trong 2 trường hợp ở trên (TH1 hoặc TH2)

TH3: Đỉnh loại bỏ được trỏ bởi P

có 2 con đều khác rỗng:

Trang 35

VD 1: Sau khi hoán vị -> rơi vào TH1

VD 2: Sau khi hoán vị -> rơi vào TH2

© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 35/35

Ngày đăng: 11/12/2019, 15:05

🧩 Sản phẩm bạn có thể quan tâm