Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Mục Lục
Phần 1:MỞ ĐẦU .................................................................... 3
Lí do chọn đề tài. ........................................................................................................... 3
Phần 2:Nội Dung ..................................................................... 3
Chương 1 : Cơ sở lý thuyết về cây nhị phân. ............................................................... 3
I. Định nghĩa và các ví dụ .................................................................................... 3
1. Định nghĩa. ..................................................................................................................... 4
2.Ví dụ . .............................................................................................................................. 4
II. Cây nhị phân. ................................................................................................... 5
1. Định nghĩa và các tính chất. .......................................................................................... 5
2. Biểu diễn cây nhị phân ................................................................................................... 5
Chương 2. Cấu trúc đống. ............................................................................................. 8
I. Định nghĩa . ....................................................................................................... 8
1.Định nghĩa. ...................................................................................................................... 8
2. Heap có các tính chất sau : ........................................................................................... 9
3. Ví dụ : ............................................................................................................................. 9
4) Thuật giải. .................................................................................................................... 10
II. Các phép toán của Heap. ............................................................................... 10
1. Thêm một phần tử vào Heap. ...................................................................................... 10
2. Xoá một phần tử nhỏ nhất khỏi Heap. ........................................................................ 12
Chương 3: Các ứng dụng của Đống ............................................................................ 13
I. Ứng dụng của Heap trong giải thuật Heap_sort. ........................................... 13
1.Giải thuật. ...................................................................................................................... 13
II.Ứng dụng đống tổ chức hàng đợi có ưu tiên ................................................ 19
1.Ứng dụng của đống trong giải thuật Hufman. ................................................ 19
2.Ứng dụng của đống trong giải thuật xây dựng cây bao trùm nhỏ nhất của đồ thị liên
thông : ........................................................................................................................................... 23
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
1
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Chương 4: Mô phỏng và cài đặt cấu trúc đống và ứng dụng. .................................... 25
I.Mô phỏng thuật toán. ....................................................................................... 25
1.Khái niệm chung về mô phỏng thuật toán. ................................................................... 26
2.Mục đích của mô phỏng thuật toán. ............................................................................. 26
3.Cấu trúc tổng quan của mô phỏng thuật toán: ............................................................. 27
4. Quy trình thiết kế nhiệm vụ của mô phỏng thuật toán. ............................................... 27
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
2
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Phần 1:MỞ ĐẦU
Lí do chọn đề tài.
Hiện nay, công nghệ thông tin với tốc độ phát triển rất nhanh. Các nhà khoa học
khẳng định rằng chưa có một ngành khoa học - công nghệ nào lại có nhiều ứng dụng
như công nghệ thông tin. Việc ứng dụng công nghệ thông tin vào trong giáo dục đã
trở thành mối ưu tiên hàng đầu của nhiều quốc gia trong đó có Việt Nam.
Trong quá trình học các giải thuật nói chung và môn cấu trúc dữ liệu nói riêng,
chúng ta rút ra một nhận định chung là: nhiều giải thuật phức tạp trừu tượng, khó hiểu,
khó hình dung vấn đề. Do đó chúng ta luôn mong muốn trong quá trình học giải thuật
nên có những mô phỏng trực quan để chúng ta có thể tiếp thu giải thuật một cách dễ
dàng hơn. Tuy nhiên, việc học tốt giải thuật có rất nhiều thận lợi dó là giúp cho quá
trình tư duy giải thật tốt hơn, phát hiện vấn đề nhanh hơn, đặc biệt giúp cho việc học
các môn học khác có tính logic cao được thuận lợi hơn. Nhưng để học tốt giải thuật thì
không dễ dàng với nhiều người. Vậy để giúp người học tiếp thu một cách dễ dàng các
giải thuật thì phải xây dựng các phần mền mô phỏng thuật toán.
Cấu trúc đống có rất nhiều ứng vào các giải thuật nhưgiả thuật sắp xếp đống,
vào hàng đợi ưu tiên. Nghiên cứu cấu trúc đống để hiểu thêm về nó phục vụ trong việc
giải quyết các bài toán
Phần 2:Nội Dung
Chương 1 : Cơ sở lý thuyết về cây nhị phân.
I. Định nghĩa và các ví dụ
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
3
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
1. Định nghĩa.
Cây là một cấu trúc phi tuyến tính. Một cây (tree) là một tập hữu hạn các nút
trong đó có một nút đặc biệt gọi là nút gốc (root), giữa các nút có một mối quan
hệ phân cấp gọi là quan hệ “cha - con”.
Có thể định nghĩa cây một cách đệ quy như sau:
1. Một nút là một cây. Nút đó cũng là gốc của cây ấy.
2. Nếu T
1
, T
2
, ..., T
n
là các cây, với n
1
, n
2
, ... n
k
lần lượt là các gốc, n là
một nút và n có quan hệ cha - con với n
1
, n
2
, ... n
k
thì lúc đó một cây mới T sẽ
được tạo lập, với n là gốc của nó. n được gọi là cha của n
1
, n
2
, ... n
k
; ngược lại
n
1
, n
2
, ... n
k
được gọi là con của n. Các cây T
1
, T
2
, ..., T
n
được gọi là các cây con
(substrees) của n.
Ta quy ước : Một cây không có nút nào được gọi là cây rỗng (null tree).
Có nhiều đối tượng có cấu trúc cây.
2.Ví dụ .
a) Mục lục của một cuốn sách, hoặc một chương trong sách, có cấu trúc cây.
b) Biểu thhức số học x + y * (z – t) + u/v, ta có thể biểu diến dưới dạng cây như
hình 1.
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
4
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Hình 1
II. Cây nhị phân.
1. Định nghĩa và các tính chất.
Cây nhị phân là một dạng quan trọng của cấu trúc cây. Cây nhị phân có các đặc
điểm là: Mọi nút trên cây chỉ có tối đa là 2 con. Đối với cây con của một nút
người ta cũng phân biệt cây con trái (left subtree) và cây con phải (right subtree).
Như vậy cây nhị phân là cây có thứ tự.
Ví dụ : Cây ở hình 1 là cây nhị phân với toán tử ứng với gốc, toán hạng 1 ứng
với cây con trái, toán hạng 2 ứng với cây con phải. Các cây nhị phân sau đây là
khác nhau, nhưng nếu coi là cây không có thứ tự thì chúng chỉ là 1.
2. Biểu diễn cây nhị phân
a) Lưu trữ kế tiếp
Nếu có một cây nhị phân đầy đủ, ta có thể dễ dàng đánh số cho các nút trên cây
đó theo thứ tự lần lượt từ mức 1 trở lên, hết mức này đến mức khác và từ trái
sang phải đối với các nút ở mỗi mức.
Ví dụ : Với hình .... cây f) có thể đánh số như sau :
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
5
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Hình 2
Ta thấy ngay một quy luật đệ quy trái như sau :
Con của các nút thứ i là các nút thứ 2i và 2i + 1 hoặc
Cha của nút thứ j là j/2
Nếu như vậy thì ta có thể lưu trữ cây nhị phân đầy đủ bằng một vectơ V, theo
nguyên tắc: nút thứ i của cây được lưu trữ ở V[i]. Đó chính là cách lưu trữ kế tiếp
đối với cây nhị phân. Với cách lưu trữ này nếu biết được địa chỉ nút cha sẽ tính
được địa chỉ nút con và ngược lại.
Như vậy với cây đầy đủ nêu trên thì hình ảnh lưu trữ sẽ như sau :
Tất nhiên với cây nhị phân hoàn chỉnh, mà các nút ở mức cuối đều đạt về phía
trái (để việc đánh số các nút này được liên tục ) thì cách lưu trữ này vẫn thích
hợp. Còn với cây nhị phân dạng khác thì cách lưu trữ này có thể gây lãng phí do
có nhiều phần tử nhớ bị bỏ trống(ứng với cây con rỗng). Chẳng hạn đối với cây
lệch trái thì phải lưu trữ bằng một véc tơ .
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
6
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Ngoài ra nếu cây luôn biến động nghĩa là có phép bổ sung, loại bỏ các nút
thường xuyên tác động, thì cách lưu trữ này tất không tránh được các nhược
điểm như đã nêu trên.
Cách lưu trữ móc nối sau đây vừa khắc phục được nhược điểm này, vừa phản
ánh được dạng tự nhiên của cây.
b) Lưu trữ móc nối
Trong cách lưu trữ này, mỗi nút ứng với một phần tử nhớ có quy cách như sau :
LPTR INFO RPTR
Trong đó :
- Trường INFO ứng với thông tin (dữ liệu) của nút.
- Trường LPTR ứng với con trỏ, trỏ tới cây con trái của nút đó.
- Trường RPTR ứng với con trỏ, trỏ tới cây con phải của nút đó.
Ví dụ : Cây nhị phân
Hình 3
Cây nhị phân trong hình 3 có dạng lưu trữ móc nối như hình sau :
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
7
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Hình 4
Để có thể truy nhập vào các nút trên cây cần có một con trỏ T, trỏ tới nút gốc của
cây đó.
Người ta quy ước : Nếu cây nhị phân rỗng thì T = Null.
Với cách biểu diễn này từ nút cha có thể truy nhập trực tiếp vào nút con, nhưng
ngược lại thì không làm được.
Chương 2. Cấu trúc đống.
I. Định nghĩa .
1.Định nghĩa.
Đống (Heap) là một cây nhị phân gắn nhãn với các nhãn là các giá trị thuộc tập
hợp được sắp thứ tự tuyến tính, sao cho những điều kiện sau đây được thực hiện:
1.Tất cả các mức của cây đều đầy, trừ mức thấp nhất có thể thiếu một số đỉnh.
2.Ở mức thấp nhất, tất cả các lá đều xuất hiện liên tiếp từ bên trái.
3. Giá trị ở mỗi đỉnh không lớn hơn giá trị của các đỉnh con của nó
Với điều kiện này thì không đảm bảo Heap là một cây nhị phân tìm kiếm.
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
8
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
2. Heap có các tính chất sau :
Tính chất 1 : Nếu ap , a2 ,... , aq là một Heap thì khi cắt bỏ một số phần tử ở hai
đầu của Heap, dãy con còn lại vẫn là một Heap.
Tính chất 2 : Mọi dãy ap , a2 ,... , aq, dãy con aj, aj+1,…, ar tạo thành một Heap
với j=(q div 2 +1).
3. Ví dụ :
Đống được lưu trong máy bởi một mảng a[1..n], với gốc ở phần tử thứ nhất, con
bên trái của đỉnh a[i] là a[2*i] con bên phải là a[2*i+1] (với 2*i<=n và
2*i+1<=n).
Khi đó nếu như a[i] <= a[2*i] và a[2*i+1] với mọi i = 1.. int(n/2). thì trong đống
a[1] (tương ứng là gốc của cây) là phần tử nhỏ nhất.
Đây là Heap (Hình 5)
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
9
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
4) Thuật giải.
1.Xem mảng ban đầu là một cây nhị phân. Mỗi nút trên cây lưu trữ một phần tử
mảng, trong đó a[1] là nút gốc và mỗi nút không là nút lá a[i] có con trái là a[2*i]
và con phải là a[2*i+1]. Với cách tổ chức này thì cây nhị phân thu được sẽ có các
nút trong là các nút a[1]…, a[n DIV 2]. Tất cả các nút trong đều có hai con,
ngoại trừ nút a[n DIV 2] có thể chỉ có một con trái (trong trường hợp n là một số
chẵn).
2.Sắp xếp dãy ban đầu thành Heap căn cứ vào giá trị khoá của các nút.
3.Hoán đổi a[1] cho phần tử cuối cùng.
4.Sắp lại cây sau khi đã bỏ đi phần tử cuối cùng để nó trở thành một heap mới.
Lặp lại quá trình (3) và (4) cho tới khi cây chỉ còn một nút ta sẽ được mảng sắp
theo thứ tự giảm
II. Các phép toán của Heap.
1. Thêm một phần tử vào Heap.
Để xen một phần tử mới vào Heap, đầu tiên ta thêm một lá mới liền kề với các lá
ở mức thấp nhất, nếu mức thấp nhất chưa đầy; còn nếu mức thấp nhất đầy, thì ta
thêm vào một lá ở mức mới sao cho các điều kiện 1 và 2 của Heap được bảo
tồn.Trong hình 6a dưới sau khi thêm nút lá có giá trị 3 vào mức cuối cùng thì cây
không còn là Heap. Nếu sau khi thêm vào lá mới cây không còn là heap, thì ta
theo đường từ lá mới tới gốc cây. Nếu một đỉnh có giá trị nhỏ hơn đỉnh cha của
nó, thì ta trao đổi đỉnh đó với cha của nó. Sau quá trình biến đổi đó thì ta có một
Heap hình 6c.
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
10
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Hình 6a
Hình 6b
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
11
Báo cáo nghiên cứu khoa học Cấu trúc đống và ứng dụng
Hình 6c
2. Xoá một phần tử nhỏ nhất khỏi Heap.
Sét một Min Heap thì hiển nhiên gốc của cây sẽ có giá trị nhỏ nhất. Tuy nhiên
nếu loại bỏ gốc thì cây không còn là cây nữa. Do đó ta tiến hành như sau: đặt vào
gốc phần tử của hàng ưu tiên chứa trong lá ngoài cùng bên phải ở mức thấp nhất,
sau đó loại bỏ lá này ra khỏi cây. Hình 6a minh hoạ cây nhận được từ cây trong
hình 6 sau phép biến đổi.Tới đây cây không còn là heap vì điều kiện 3 của định
nghĩa Heap bị vi phạm ở gốc cây. Bây giờ ta đi từ gốc xuống. Giả sử tại một
bước nào đó ta đang ở đỉnh a và hai đỉnh con của nó tại b và c. Để xác định, ta
giả sử rằng giá trị ưu tiên của ít nhất hơn giá trị ưu tiên của đỉnh c pri(b) <=
pri(c). Khi đó ta sẽ trao đổi đỉnh a với đỉnh b và đi xuống đỉnh b. Quá trình đi sẽ
dừng lại cùng lắm là khi ta đạt tới một lá của cây. Có thê thấy quá trình diễn ra ở
hình 7b và 7c
(a)
Nguyễn Thị Ngọc Anh_lớp K54A-CNTT
12