***TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN***VIỆN CÔNG NGHỆ THÔNG TIN KINH TẾ TIỂU LUẬN MÔN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ĐẾ TÀI : Nghiên cứu và cài đặt chương trình thực hiện duyệt cây n
Trang 1***TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN***
VIỆN CÔNG NGHỆ THÔNG TIN KINH TẾ
TIỂU LUẬN MÔN HỌC:
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
ĐẾ TÀI : Nghiên cứu và cài đặt chương trình thực hiện duyệt cây nhị
phân, cây tổng quát và rừng theo ba phương pháp ( các cây được lưu trữ
móc nối trong máy )
Giảng viên hướng dẫn: ThS Lưu Minh Tuấn
Lớp tín chỉ: Cấu trúc Dữ liệu và Giải thuật (215)_2
****** HÀ NỘI, THÁNG 5-2016******
Trang 2DANH SÁCH THÀNH VIÊN TRONG NHÓM
Trang 3MỤC LỤC
- Lời nói đầu
- Chương I: Giới thiệu phát biểu đề tài
- Chương II: Nội dung về đề tài nghiên cứu
PHẦN 1: Tổng quan lý thuyết
I cấu trúc cây:
1.định nghĩa , khái niệm:
2.các khái niệm trên cây:
II các dạng cây thường gặp
1 cây nhị phân
1.1 ĐN, phân loại , tính chất
1.2 Biểu diễn cây nhị phân trong máy tính
1.2.1 Lưu trữ kế tiếp đối với cây nhị phân
1.2.2 Lưu trữ móc nối đối với cây nhị phân
2 Cây tổng quát, rừng
Biểu diễn cây tổng quát bằng cây nhị phân tương đươngIII Các phương pháp duyệt cây
1 Định nghĩa
2 Các phương pháp duyệt cây
2.1 Duyệt cây nhị phân theo 3 phương pháp
2.2.1 Duyệt theo thứ tự trước(TTT)2.2.2 duyệt theo thứ tự giữa(TTG)2.2.3 duyệt theo thứ tự sau(TTS)2.2 Duyệt cây tổng quát, rừng theo 3 phương pháp2.2.1 Duyệt cây tổng quát
2.2.2 Duyệt rừng PHẦN 2:Cài đặt thử nghiệm chương trình
- Chương III: dánh giá kết quả nghiên cứu và kết luận
- Các tài liệu tham khảo
Trang 4LỜI NÓI ĐẦU
So với tất cả các ngành nghề và các lĩnh vực thì có thể nói công nghệ thông tin là một ngành động, nó luôn luôn phát triển với tốc độ nhanh chóng và ngày càng khẳng định vai trò quan trọng của mình trong việc đáp ứng nhu cầu học tập, làm việc và giải trí ngày càng cao của con người Khi công nghệ phát triển đến một trình độ nhất định thì nhu cầu về vấn đề bảo mật giữ liệu được đặt
ra và đề giải quyết vấn đề đó thì lý thuyết về cây được áp dụng và giữ vai trò quan trọng trong việc mã hóa dữ liệu, tổ chức dữ liệu trong máy tính hoạt động nhanh và hiệu quả hơn
Trong khoa học máy tính, cây là một cấu trúc dữ liệu được sử dụng rộng rãi goomg một tập hợp các nút được liên kết với nhau theo quan hệ cha con Cây trong cấu trúc dữ liệu đầu tiên là mô phỏng (hay nói cách khác là sự sao chép ) của cây ( có gốc ) trong lý thuyết đồ thị Hầu như mọi khái niệm trong cây của lý thuyết đồ thị đều được thể hiện trong cấu trúc dữ liệu Tuy nhiên cây trong cấu trúc dữ liệu đã tìm được ứng dụng phong phú và hiệu quả trong nhiều giải thuật Khi phân tích các giải thuật trên cấu trúc dữ liệu cây, người ta vẫn thường vẽ ra các cây tương ứng trong lý thuyết đồ thị
Trong bài tiểu luận này chúng em xin trình bày về : khái quát về cây nhị phân, cây tổng quát, rừng; các thuật toán cơ bản, code cài đặt các thuật toán cơ bản vê cây nhị phân, cây tổng quát và rừng
Em xin chân thành cảm ơn thầy Lưu Minh Tuấn đã nhiệt tình hướng dẫn và đào tạo điều kiện cho chúng em hiểu biết nhiều thêm Dù đã cố gắng hết sức nhưng bài của chúng em vẫn còn nhiều sai sót rất ong nhận được góp ý từ thầy ạ
để bài làm có thể được hoàn thiện hơn Em cảm ơn thầy ạ
Trang 5CHƯƠNG I: GIỚI THIỆU PHÁT BIỂU ĐỀ TÀI
1 ĐỀ TÀI
Nghiên cứu và cài đặt chương trình thực hiện duyệt cây nhị phân, cây tổng quát
và rừng theo ba phương pháp ( các cây được lưu trữ móc nối trong máy )
NỘI DUNG
Trình bày lý thuyết liên quan đến đề tài CTDL & GT sử dụng để cài đặt
Cây nhị phân được lưu trữ bằng phương pháp móc nối
Cây tổng quát được biểu diễn bằng cây nhị phân tương đương và được lưu trữ bằng phương pháp móc nối
Duyệt cây nhị phân theo ba phương pháp
Duyệt cây tổng quát theo ba phương pháp Duyệt rừng theo ba phương phápKết quả cần đưa ra danh sách các nút duyệt theo từng phương pháp trên mỗi cây(rừng)
2 PHẠM VI
Bài viết này chung ta sẽ nghiên cứu trong phạm vi kiến thức liên quan đến cây nhị phân, cây tổng quát và rừng:thong tin, cách duyệt cây nhị phân, cây tổng quát, rừng theo ba phương pháp và biết cách cài đặt chương trình duyệt cây
3 ĐỐI TƯỢNG
Bài viết này hướng đến những người muốn tìm hiểu về môn Cấu trúc dữ liệu và giải thuật nói chung, duyệt cây nhị phân, cây tổng quát và rừng theo ba phương pháp nói riêng
4 MỤC ĐÍCH CỦA VIỆC NGHIÊN CỨU
Cùng với sự phát triển của khoa học kỹ thuật, công nghệ thông tin nói chung và
bộ môn cấu trúc dữ liệu và giải thuật nói riêng ngày càng được ứng dụng rộng rãi trong nhiều lĩnh vực Với một cơ sở dữ liệu khổng lồ, việc đưa ra một
phương pháp nhằm giải quyết vấn đề tìm kiếm dữ liệu có hiệu quả và nhanh
Trang 6nhất luôn được sự qua tâm của các nhà phát triển phần mềm Thông thường dữ liệu được biểu diễn dưới dạng danh sách lien kết Việc truy cập dữ liệu chưa đạt hiệu quả cao Sử dụng cấu trúc dữ liệu dạng cây là một giải pháp làm tăng hiệu suất trong các thao tác sử lý Chính vì vậy mục đích của việc nghiên cứu về cây
và các phương pháp duyệt cây sẽ giúp cho mọi người lưu trữ thong tin một cách nhanh và logic hơn, ngoài ra còn giúp các bạn thao tác xử lý nhanh tìm kiếm dễ dàng hơn những thong tin cần thiết trong kho dữ liệu của mình
Trang 7CHƯƠNG II: NỘI DUNG ĐỀ TÀI NGHIÊN CỨU
PHẦN 1: TỔNG QUAN LÍ THUYẾT
Cấu trúc một thư viện
+)Sơ đồ cấu trúc mục lục một quyển sách:
2.32
2.1
C3
3 C1
Trang chủ
Vănhóa Xã h iội
web
Trang 81.2-Một số định nghĩa về cây
Định nghĩa 1: Một cây là tập hợp hữu hạn các nút trong đó có một nút đặc biệt
gọi là gốc (root) Giữa các nút có một quan hệ phân cấp gọi là "quan hệ cha con"
Định nghĩa đệ quỵ:
-Mỗi nút là một cây
- n là nút và n1, n2, , nk là gốc của các cây C1,C2 ,Ck; (không có nút chung)
-n là cha của các nút n1,n2, ,nk thì có một cây mới C
2-Một số khái niệm cơ bản:
Bậc của một nút: là số cây con của nút đó
Bậc của một cây: là bậc lớn nhất của các nút trong cây (số cây con tối đa của một nút thuộc cây) Cây có bậc n thì gọi là cây n-phân
Độ dài đường đi từ gốc đến nút x: là số nhánh cần đi qua kể từ gốc đến x
Độ dài của đường đi: là số nút trên đường đi -1
Độ dài đường đi tổng của cây :
Trong đó Px là độ dài đường đi từ gốc đến X
Độ dài đường đi trung bình : PI = PT/n (n là số nút trên cây T)
Trang 9- Mức của các nút trong cây trên:
Mức của các nút T5,T6,T7,T8,T9,T10 bằng 3
Mức của các nút T11,T12,T13,T14,T15,T16 bằng 4
Chiều dài đường đi tới nút T3 là 2
Rừng cây: là tập hợp nhiều cây trong đó thứ tự các cây là quan
trọng.Một cây khác rỗng khi mất gốc sẽ trở thành một rừng
T14 T13
T12 T11
Trang 10II Các dạng cây thường gặp
BC
Trang 111 Cây nhị phân( binary tree )
1.1 Định nghĩa, phân loại, tính chất
(*) Phân loại cây nhị phân
Cây nhị phân lệch trái
Cây nhị phân lệch phải
ED
CB
Trang 12 Cây nhị phân zic-zăc
BB
D
A
CB
Trang 13(*) Tính chất:
- Số nút tối đa ở 1 mức i trên cây nhị phân là : 2i−1 ( i>=1)-Số nút tối đa trên cây nhị phân có chiều cao h là: 2h-1 (h>=1)
1.2 Biểu diễn cây nhị phân trong máy tính
1.2.1 Lưu trữ kế tiếp đối với cây nhị phân
* Phương pháp: Ta có thể sử dụng một vecto V có n phần tử để lưu trữ cây nhị
phân đầy đủ có n nút ( giả sử mỗi nút của cây được lưu trữ hết 1 phần tử của vecto V) theo nguyên tắc như sau:
- Đánh số thứ tự cho các nút của cây từ 1,2 ,….,n bằng cách xuất phát từ nút gốctheo nguyên tắc từ trên xuống, từ phảitrái Hết mức này đến mức khác
lưu ý: Nếu nút cha có chỉ số là i thì 2 nút con chỉ số là 2i và 2i+1
Ngược lại nếu biết chỉ số nút con là j thì ta xác định được chỉ số của nút cha là
số nguyên dưới của j/2 ( j div 2)
-Phần tử Vi của vecto V sẽ lưu trữ nút có số thứ tự (chỉ số) i tương ứng
(*) Ví dụ 1: thực hiện lưu trữ kế tiếp cây nhị phân sau:
A
CB
Trang 14V[1] V[2] V[3] V[4] V[5] V[6] V[7]
1.2.2 Lưu trữ móc nối đối với cây nhị phân
Ta có thể lưu trữ cây nhị phân bằng danh sách móc nối cấu trúc của 1 nút như sau:
Trong đó:
+ Dulieu: lưu trữ thong tin của nút
+ Trotrai, Trophai: là các trường con trỏ tương ứng trỏ tới nút gốc của cây con trái và cây con phải của nút
Hình ảnh lưu trữ giống với hình dáng tự nhiên của cây
* ví dụ 2: Biểu diễn cây nhị phân ở ví dụ 1 trên theo phương pháp móc nối:
GF
ED
A
Trang 15
Gg
2 Cây tổng quát, rừng :
2.1.Biểu diễn ( lưu trữ) cây tổng quát bằng cây nhị phân tương đương (NPTĐ)
(*) Phương pháp: Để lưu trữ cây tổng quát bằng cây nhị phân tương
đương ta coi mọi nút trên cây tổng quát nếu có thì chỉ có 2 đặc điểm: + Nút con cả ( cực trái)
+ Nút em kế cận phải
Lúc đó cây nhị phân biểu diễn cây tổng quát này mà ta gọi là cây nhị phân tương đương được xác định như sau:
+ Nút gốc cây NPTĐ là nút gốc của cây tổng quát T;
+ Nút con trái của 1 nút trên cây NPTĐ là nút con cả của nút
đó trên cây tổng quát
+ Nút con phải của 1 nút trên cây NPTĐ là nút em kế cận phải của nút đó trên cây tổng quát
ED
A
IG
FE
H
K
M
Trang 16Nút C= + con cả: G
+ em kế cận phải: D
Nút M= + con cả:Ф
+ em kế cận phải:Ф
*Về cấu trúc lưu trữ: cây NPTĐ được tổ chức gồm các nút, mỗi nút có
quy cách như sau:
Conca Dulieu Emkecan
+ Dulieu: biểu diễn thông tin của nút
+ Conca, Emkecan: là các trường con trỏ tương ứng trỏ tới nút con cả
và nút em kế cận phải của nút đó trên cây tổng quát
Cây này được lưu trữ móc nối trong máy Nút gốc trỏ bởi con trỏ T
2.2 Biểu diễn rừng T bằng cây nhị phân tương đương:
Rừng T gồm các cây T1,T2,T3… ,Tk được biểu diễn bằng cây NPTĐ theo phương pháp giống với cây tổng quát chỉ khác ở các điểm sau:
+ Coi nút gốc của T2 là nút em kế cận phải của cây T1,…
+ Nút gốc của cây NPTĐ là nút gốc của cây T1
+ Các nút thuộc cây con trái của cây NPTĐ là các nút thuộc T1
Các nút thuộc cây con phải của cây NPTĐ là các nút thuộc các cây còn lại T2,…,Tk
II Các phương pháp duyệt cây
1-Định nghĩa
Trang 17Duyệt một cây là một trình tự làm việc với các nút trong cây,trình
tự này giống như một chuyến đi qua các nút trên cây theo kiểu liên kếtcha- con Các giải thuật khác nhau về thứ tự viếng thăm giữa một nút cha và các nút con
2.các phương pháp duyệt cây
2.1 Đối với cây nhị phân
2.1.1 Duyệt theo thứ tự trước (TTT)
Ý tưởng:
- Thăm gốc T
- Duyệt toàn bộ cây con trái theo TTT
- Duyệt toàn bộ cây con phải theo TTT
Trang 18Call Duyet_TTG(trophai(T)); End;
Return;
2.1.3 Duyệt theo thứ tự sau (TTS):
Ý tưởng:
- Duyệt toàn bộ cây con trái theo TTS
- Duyệt toàn bộ cây con phải theo TTS
Trang 19Begin
Call Duyet_TTS( trotrai(T));
Call Duyet_TTS( trophai(T));
Write(dulieu(T));
End;
Return;
Ví dụ: duyệt cây nhị phân sau theo 3 phương pháp:
- Duyệt theo TTT: A,B,D,E,G,I,H,C,F
- Duyệt theo TTG: D,B,I,G,E,H,A,C,F
- Duyệt theo TTS: D,I,G,H,E,B,F,C,A
2.2.Duyệt cây tổng quát, rừng theo 3 phương pháp
2.2.1 Duyệt cây tổng quát
A
CB
FE
D
HG
I
Trang 20Phép duyệt cây tổng quát cũng được đặt ra tương tự như đối với cây nhị phân Tuy nhiên có một số điều cần phải xem xét thêm khi định nghĩa phép duyệt, đó là:
- Sự nhất quán về thứ tự các nút được thăm giữa phép duyệt cây tổng quát và phép duyệt cây nhị phân tương đương của nó
- Sự nhất quán giữa định nghĩa phép định nghĩa phép duyệt cây tổng quát với định nghĩa phép duyệt cây nhị phân Vì cây nhị phân cũng có thể coi là cây tổng quát và ta có thể áp dụng định nghĩa phép duyệt cây tổng quát cho cây nhị phân
Ta có thể xây dựng được định nghĩa của phép duyệt cây tổng quát T như sau
Duyệt theo thứ tự trước
a) Nếu T rỗng thì không làm gì
b) Nếu T khác rỗng thì
Thăm gốc của T
Duyệtcác cây con thứ nhất T1 của gốc của cây T theo thứ tự trước
Duyệt các cây con còn lại T2, T3, ,Tn của gốc T theo thứ tự trước
Duyệt theo thứ tự giữa
a) Nếu T rỗng thì không làm gì
b) Nếu T khác rỗng thì
Duyệtcác cây con thứ nhất T1 của gốc của cây T theo thứ tự giữa
Thăm gốc của T
Duyệt các cây con còn lại T2, T3, ,Tn của gốc T theo thứ tự giữa
Duyệt theo thứ tự sau
a) Nếu T rỗng thì không làm gì
b) Nếu T khác rỗng thì
Duyệtcác cây con thứ nhất T1 của gốc của cây T theo thứ tự sau
Duyệt các cây con còn lại T2, T3, ,Tn của gốc T theo thứ tự sau
Trang 21E E
Trang 22Duyệt rừng Sau theo 3 phương pháp:
LÀM:
Biến đổi rừng trên thành cây tổng quát bằng cách đưa thêm 1 nút “gốc giả”(Ф) trở thành nút cha của các nút gốc A,1,X
Ta được kết quả
- Duyệt theo TTT: Ф,A,B,E,C,D,1,2,3,X
- Duyệt theo TTG: B,A,C,E,D,Ф,2,1,3,X
- Duyệt theo TTS: B,E,C,D,A,2,3,1,X,Ф
X1
A
32
DC
B
E
Trang 23procedure NhapCayNP(var T:Tree; a:MyArray; n:integer);
var key, keyLeft, keyRight:typeKey;
Trang 25if T=nil then write('Cay Rong');else
Trang 262.DUYỆT CÂY TỔNG QUÁT THEO 3 PHƯƠNG PHÁP
Trang 283.DUYỆT RỪNG THEO 3 PHƯƠNG PHÁP
Trang 29end;
procedure DuyetTruoc(T:pointer);var j,i:integer;
Trang 30DuyetSau(T^.child[i]); end;
Trang 31CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ NGHIÊN CỨU VÀ KẾT
LUẬN
Sau thời gian tìm hiểu và thực hiện nghiên cứu bài tiểu luận về đề tài
“Nghiên cứu và cài đặt chương trình thực hiện duyệt cây nhị phân, cây tổng quát
và rừng theo ba phương pháp ( các cây được lưu trữ móc nối trong máy )” chúng em đã hoàn thành một số yêu cầu cơ bản về những nội dung sau:
Ưu điểm:
Trình bày được những kiến thức cơ bản liên quan đến cây nhị phân,cây tổng quát
Duyệt cây nhị phân,cây tổng quát bằng 3 phương pháp(TTT,TTG,TTS)
& biểu diễn cây tổng quát bằng cây nhị phân tương đương
Cài đặt thử nghiệm chương trình ( bằng pascal)
Xây dựng được chương trình giải bài toán tìm kiếm trên đồ thị bằng cách sử dụng các thuật toán duyệt cây cơ bản
Nhược điểm:
Mặc dù chúng em đã có nhiều cố gắng và tìm hiểu tuy nhiên kiến thức còn
nhiều hạn chế nên bài tiểu luận còn nhiều thiếu sót như:chương trình còn có lỗi
về nhập liệu ,cần xây dựng hoàn thiện hơn các chức năng để người sử dụng có thể theo dõi kết quả các bước tìm kiếm và duyệt cây hơn
Trên đây là bài tiểu luận và một số kết quả đã đạt được cũng như thiếu sót trong quá trình làm bài kính mong nhận được những góp ý và nhận xét của thầy
để bài tiểu luận của chúng em được hoàn thiện hơn
Chúng em xin chân thành cảm ơn!
Trang 32CÁC TÀI LIỆU THAM KHẢO
1 Bài giảng Cấu trúc Dữ liệu và giải thuật- PGS.TS.Đặng Minh Ất-ThS.Lưu