Tải bản đầy đủ (.pdf) (5 trang)

Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p3 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (170.64 KB, 5 trang )

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 163
nút không phải là nút lá thì chúng ta phải tìm cách chuyển các nút gốc cây con là
các nút con của nút cần hủy thành các nút gốc cây con của các nút khác rồi mới
tiến hành hủy nút này.
- Trường hợp nếu nút cần hủy chỉ có 01 nút gốc cây con thì chúng ta có thể chuyển
nút gốc cây con này thành nút gốc cây con của nút cha của nút cần hủy.
- Trường hợp nếu nút cần hủy có 2 nút gốc cây con thì chúng ta phải chuyển 02
nút gốc cây con này thành nút gốc cây con của các nút khác với nút cần hủy.
Việc chọn các nút để làm nhiệm vụ nút cha của các nút gốc cây con này tùy vào
từng trường hợp cụ thể của cây nhò phân mà chúng ta sẽ lựa chọn cho phù hợp.
Do vậy, thao tác hủy một nút sẽ được trình bày cụ thể trong các loại cây cụ thể
được trình bày ở các phần sau.
5.2.3. Cây nhò phân tìm kiếm (Binary Searching Tree)
A. Khái niệm – Cấu trúc dữ liệu:
Cây nhò phân tìm kiếm là cây nhò phân có thành phần khóa của mọi nút lớn hơn thành
phần khóa của tất cả các nút trong cây con trái của nó và nhỏ hơn thành phần khóa
của tất cả các nút trong cây con phải của nó.
Ví dụ:
Hình ảnh sau là hình ảnh của một cây nhò phân tìm kiếm
BSTree

60

25 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50


15

NULL NULL NULL NULL
Từ khái niệm này chúng ta có một số nhận xét:
- Cấu trúc dữ liệu của cây nhò phân tìm kiếm là cấu trúc dữ liệu để biểu diễn các cây
nhò phân nói chung.
typedef struct BST_Node
{ T Key;
BST_Node * BST_Left; // Vùng liên kết quản lý đòa chỉ nút gốc cây con trái
BST_Node * BST_Right; // Vùng liên kết quản lý đòa chỉ nút gốc cây con phải
} BST_OneNode;
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r

w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e


V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 164
typedef BST_OneNode * BST_Type;
Để quản lý các cây nhò phân tìm kiếm chúng ta cần quản lý đòa chỉ nút gốc của cây:

BST_Type BSTree;
- Khóa nhận diện (Key) của các nút trong cây nhò phân tìm kiếm đôi một khác nhau
(không có hiện tượng trùng khóa).
Tuy nhiên trong trường hợp cần quản lý các nút có khóa trùng nhau trong cây nhò phân
tìm kiếm thì chúng ta có thể mở rộng cấu trúc dữ liệu của mỗi nút bằng cách thêm
thành phần Count để ghi nhận số lượng các nút trùng khóa. Khi đó, cấu trúc dữ liệu để
quản lý các cây nhò phân tìm kiếm được mở rộng như sau:
typedef struct BSE_Node
{ T Key;
int Count;
BSE_Node * BSE_Left; // Vùng liên kết quản lý đòa chỉ nút gốc cây con trái
BSE_Node * BSE_Right; // Vùng liên kết quản lý đòa chỉ nút gốc cây con phải
} BSE_OneNode;
typedef BSE_OneNode * BSE_Type;
và chúng ta quản lý cây nhò phân tìm kiếm này bằng cách quản lý đòa chỉ nút gốc:
BSE_Type BSETree;
- Nút ở bên trái nhất là nút có giá trò khóa nhận diện nhỏ nhất và nút ở bên phải nhất
là nút có giá trò khóa nhận diện lớn nhất trong cây nhò phân tìm kiếm.
- Trong một cây nhò phân tìm kiếm thứ tự duyệt cây Left – Root – Right là thứ tự duyệt
theo sự tăng dần các giá trò của Key trong các nút và thứ tự duyệt cây Right – Root –
Left là thứ tự duyệt theo sự giảm dần các giá trò của Key trong các nút.
B. Các thao tác trên cây nhò phân tìm kiếm:
a. Tìm kiếm trên cây:
Giả sử chúng ta cần tìm trên cây nhò phân tìm kiếm xem có tồn tại nút có khóa Key
là SearchData hay không.
Để thực hiện thao tác này chúng ta sẽ vận dụng thuật toán tìm kiếm nhò phân: Do
đặc điểm của cây nhò phân tìm kiếm thì tại một nút, nếu Key của nút này khác với
SearchData thì SearchData chỉ có thể tìm thấy hoặc trên cây con trái của nút này
nếu SearchData nhỏ hơn Key của nút này hoặc trên cây con phải của nút này nếu
SearchData lớn hơn Key của nút này.

- Thuật toán tìm kiếm 1 nút trên cây nhò phân tìm kiếm:
B1: CurNode = BSTree
B2: IF (CurNode = NULL) or (CurNode->Key = SearchData)
Thực hiện Bkt
B3: IF (CurNode->Key > SearchData) // Tìm kiếm trên cây con trái
CurNode = CurNode->BST_Left
B4: ELSE // Tìm kiếm trên cây con phải
CurNode = CurNode->BST_Right
B5: Lặp lại B2
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w

w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V

i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 165
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần tìm kiếm nút có thành phần dữ liệu là 30 trên cây nhò phân
tìm kiếm sau: SearchData = 30

CurNode BSTree

60

25 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50
15

NULL NULL NULL NULL
CurNode->Key > SearchData // Tìm kiếm trên cây con trái
⇒ CurNode = CurNode->BST_Left
BSTree

CurNode 60

25 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50
15

NULL NULL NULL NULL

Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r

a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.

d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 166
CurNode->Key < SearchData // Tìm kiếm trên cây con phải
⇒ CurNode = CurNode->BST_Right
BSTree

60

25 CurNode 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50

15

NULL NULL NULL NULL
CurNode->Key > SearchData // Tìm kiếm trên cây con trái
⇒ CurNode = CurNode->BST_Left
BSTree

60

25 65

19 CurNode 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50
15


NULL NULL NULL NULL
CurNode->Key = SearchData ⇒ Thuật toán kết thúc (Tìm thấy)
Click to buy NOW!
P
D
F
-
X
C
h
a

n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P

D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c

k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 167
Bây giờ giả sử chúng ta cần tìm kiếm nút có thành phần dữ liệu là 35 trên cây nhò
phân tìm kiếm trên: SearchData = 35
CurNode BSTree

60

25 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50
15

NULL NULL NULL NULL
CurNode->Key > SearchData // Tìm kiếm trên cây con trái
⇒ CurNode = CurNode->BST_Left
BSTree

CurNode 60


25 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL 50
15


NULL NULL NULL NULL
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r

w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e


V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.

×