TIỂU LUẬN 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 )
Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
400,84 KB
Nội dung
***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 cài đặt chương trình thực duyệt nhị phân, tổng quát rừng theo ba phương pháp ( lưu trữ móc nối 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 Giải thuật (215)_2 ****** HÀ NỘI, THÁNG 5-2016****** DANH SÁCH THÀNH VIÊN TRONG NHĨM BÙI BÍCH NGỌC MSV 11146153 LƯU THỊ MINH NGỌC.MSV 11143142 NGUYỄN THỊ HỢI.MSV 11141638 PHẠM MINH HẢI.MSV 11141171 MỤ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 đề 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 cây: II dạng thường gặp nhị phân 1.1 ĐN, phân loại , tính chất 1.2 Biểu diễn nhị phân máy tính 1.2.1 Lưu trữ nhị phân 1.2.2 Lưu trữ móc nối nhị phân Cây tổng quát, rừng Biểu diễn tổng quát nhị phân tương đương III Các phương pháp duyệt Định nghĩa Các phương pháp duyệt 2.1 Duyệt nhị phân theo 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 tổng quát, rừng theo phương pháp 2.2.1 Duyệt 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 nghiên cứu kết luận - Các tài liệu tham khảo LỜI NÓI ĐẦU So với tất ngành nghề lĩnh vực nói cơng nghệ thơng tin ngành động, ln ln phát triển với tốc độ nhanh chóng ngày khẳng định vai trị quan trọng việc đáp ứng nhu cầu học tập, làm việc giải trí ngày cao người Khi cơng nghệ phát triển đến trình độ định nhu cầu vấn đề bảo mật giữ liệu đặt đề giải vấn đề lý thuyết áp dụng giữ vai trị quan trọng việc mã hóa liệu, tổ chức liệu máy tính hoạt động nhanh hiệu Trong khoa học máy tính, cấu trúc liệu sử dụng rộng rãi goomg tập hợp nút liên kết với theo quan hệ cha Cây cấu trúc liệu mô (hay nói cách khác chép ) ( có gốc ) lý thuyết đồ thị Hầu khái niệm lý thuyết đồ thị thể cấu trúc liệu Tuy nhiên cấu trúc liệu tìm ứng dụng phong phú hiệu nhiều giải thuật Khi phân tích giải thuật cấu trúc liệu cây, người ta thường vẽ tương ứng lý thuyết đồ thị Trong tiểu luận chúng em xin trình bày : khái quát nhị phân, tổng quát, rừng; thuật toán bản, code cài đặt thuật toán vê nhị phân, tổng quát 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 đào tạo điều kiện cho chúng em hiểu biết nhiều thêm Dù cố gắng chúng em cịn nhiều sai sót ong nhận góp ý từ thầy để làm hoàn thiện Em cảm ơn thầy CHƯƠNG I: GIỚI THIỆU PHÁT BIỂU ĐỀ TÀI ĐỀ TÀI Nghiên cứu cài đặt chương trình thực duyệt nhị phân, tổng quát rừng theo ba phương pháp ( lưu trữ móc nối 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 lưu trữ phương pháp móc nối Cây tổng quát biểu diễn nhị phân tương đương lưu trữ phương pháp móc nối Duyệt nhị phân theo ba phương pháp Duyệt tổng quát theo ba phương pháp Duyệt rừng theo ba phương pháp Kết cần đưa danh sách nút duyệt theo phương pháp (rừng) PHẠM VI Bài viết chung ta nghiên cứu phạm vi kiến thức liên quan đến nhị phân, tổng quát rừng:thong tin, cách duyệt nhị phân, tổng quát, rừng theo ba phương pháp biết cách cài đặt chương trình duyệt ĐỐI TƯỢNG Bài viết hướng đến người muốn tìm hiểu môn Cấu trúc liệu giải thuật nói chung, duyệt nhị phân, tổng quát rừng theo ba phương pháp nói riêng MỤC ĐÍCH CỦA VIỆC NGHIÊN CỨU Cùng với phát triển khoa học kỹ thuật, cơng nghệ thơng tin nói chung môn cấu trúc liệu giải thuật nói riêng ngày ứng dụng rộng rãi nhiều lĩnh vực Với sở liệu khổng lồ, việc đưa phương pháp nhằm giải vấn đề tìm kiếm liệu có hiệu nhanh qua tâm nhà phát triển phần mềm Thông thường liệu biểu diễn dạng danh sách lien kết Việc truy cập liệu chưa đạt hiệu cao Sử dụng cấu trúc liệu dạng giải pháp làm tăng hiệu suất thao tác sử lý Chính mục đích việc nghiên cứu phương pháp duyệt giúp cho người lưu trữ thong tin cách nhanh logic hơn, ngồi cịn giúp bạn thao tác xử lý nhanh tìm kiếm dễ dàng thong tin cần thiết kho liệu CHƯƠNG II: NỘI DUNG ĐỀ TÀI NGHIÊN CỨU PHẦN 1: TỔNG QUAN LÍ THUYẾT I-Cấu trúc 1-Định nghĩa 1.1-Một số ví dụ : • Mục lục sách • Cấu trúc trang web • Sơ đồ tổ chức cơng ty • Cấu trúc thư viện +)Sơ đồ cấu trúc mục lục sách: Mục lục C1 C2 2.1 2.2 C33 2.3 3.1 3.2 +) Sơ đồ cấu trúc trang web : Trang chủ Giới thiệu Tổng Trang công ty web 1.2-Một số định nghĩa Tin tức Nội Liên kết Văn hóa Xã hội Chính trị Định nghĩa 1: Một tập hợp hữu hạn nút có nút đặc biệt gọi gốc (root) Giữa nút có quan hệ phân cấp gọi "quan hệ cha con" Định nghĩa đệ quỵ: -Mỗi nút - n nút n1, n2, , nk gốc C1,C2 ,Ck; (khơng có nút chung) -n cha nút n1,n2, ,nk có C 2-Một số khái niệm bản: • Bậc nút: số nút • Bậc cây: bậc lớn nút (số tối đa nút thuộc cây) Cây có bậc n gọi n-phân • Nút gốc: nút khơng có nút cha • Nút lá: nút có bậc • Nút nhánh: nút có bậc khác khơng phải gốc • Mức nút: Mức (gốc (T) ) = Gọi T1, T2, T3, , Tn T0 Mức (T1) = Mức (T2) = = Mức (Tn) = Mức (T0) + Độ dài đường từ gốc đến nút x: số nhánh cần qua kể từ gốc đến x Độ dài đường đi: số nút đường -1 Độ dài đường tổng : Trong Px độ dài đường từ gốc đến X Độ dài đường trung bình : PI = PT/n (n số nút T) Ví dụ: T1 T3 T2 T5 T4 T11 T12 T13 T10 T9 T8 T7 T6 T14 T15 T16 - Bậc nút: nút T2 có bậc - Bậc cây: có bậc gọi 3-phân - Nút gốc T1 -Nút trên: T5,T6,T10,T11,T12,T13,T14,T15,T16 -Trong T4 nút cha nút T9,T10 ngược lại T9,T10 nút T4 - Mức nút trên: Mức nút T5,T6,T7,T8,T9,T10 Mức nút T11,T12,T13,T14,T15,T16 Chiều dài đường tới nút T3 • Rừng cây: tập hợp nhiều thứ tự quan trọng.Một khác rỗng gốc trở thành rừng Ví dụ: Rừng gồm cây: Z G A C B E F H J K • Cây có thứ tự: Trong cây, đỉnh theo thứ định, gọi (cây có thứ tự) Hình minh hoạ hai khác A A B C C II Các dạng thường gặp Cây nhị phân( binary tree) 1.1 Định nghĩa, phân loại, tính chất Ví dụ: A B D C E B Write(“cay rong”); Return; End; Else Begin Call Duyet_TTS( trotrai(T)); Call Duyet_TTS( trophai(T)); Write(dulieu(T)); End; Return; Ví dụ: duyệt nhị phân sau theo phương pháp: A B D C E G F H I - 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 tổng quát, rừng theo phương pháp 2.2.1 Duyệt tổng quát Phép duyệt tổng quát đặt tương tự nhị phân Tuy nhiên có số điều cần phải xem xét thêm định nghĩa phép duyệt, là: - Sự quán thứ tự nút thăm phép duyệt tổng quát phép duyệt nhị phân tương đương - Sự quán định nghĩa phép định nghĩa phép duyệt tổng quát với định nghĩa phép duyệt nhị phân Vì nhị phân coi tổng quát ta áp dụng định nghĩa phép duyệt tổng quát cho nhị phân Ta xây dựng định nghĩa phép duyệt tổng quát T sau Duyệt theo thứ tự trước a) Nếu T rỗng khơng làm b) Nếu T khác rỗng Thăm gốc T Duyệtcác thứ T1 gốc T theo thứ tự trước Duyệt lại T2, T3, ,Tn gốc T theo thứ tự trước Duyệt theo thứ tự a) Nếu T rỗng khơng làm b) Nếu T khác rỗng Duyệtcác thứ T1 gốc T theo thứ tự Thăm gốc T Duyệt lại T2, T3, ,Tn gốc T theo thứ tự Duyệt theo thứ tự sau a) Nếu T rỗng khơng làm b) Nếu T khác rỗng Duyệtcác thứ T1 gốc T theo thứ tự sau Duyệt lại T2, T3, ,Tn gốc T theo thứ tự sau Thăm gốc T Ví dụ: A B E E D C F E G J Thứ tự trước: A B C E H I F J D G Thứ tự : B A h E I C J F G D Thứ tự sau : B H I E J F C G D A 2.2.2.Duyệt rừng Có thể duyệt rừng T gồm T1,T2,…,Tk giống tổng quát cách: trước hết biến đổi rừng thành tổng quát sau: đưa thêm vào nút “gốc giả”( khơng chứa liệu) cho trở thành nút cha gốc T1,… Tk tương ứng ** Ví dụ Duyệt rừng Sau theo phương pháp: A B C D X X E1 LÀM: Biến đổi rừng thành tổng quát cách đưa thêm nút “gốc giả”(Ф) trở thành nút cha nút gốc A,1,X Ta kết - 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,Ф PHẦN 2: CÀI ĐẶT CHƯƠNG TRÌNH 1.DUYỆT CÂY NHỊ PHÂN THEO PHƯƠNG PHÁP program DuyetCayNP; type MyArray=array[1 1000] of integer; type typeKey=integer; type nodeTree=^node; node=record key:typeKey; left, right:nodeTree; end; type Tree=nodeTree; var T:nodeTree; a:MyArray; n,i:integer; function TaoNode(key:typeKey):nodeTree; var p:nodeTree; begin new(p); p^.key:=key; p^.left:=nil; p^.right:=nil; TaoNode:=p; end; procedure TaoCayRong(var T:Tree); begin T:=nil end; procedure NhapCayNP(var T:Tree; a:MyArray; n:integer); var key, keyLeft, keyRight:typeKey; begin if (T=nil) then begin new(T); write('Nhap vao goc '); readln(key); T^.key:=key; end; new(T^.left); new(T^.right); write('Nhap trai cua ',T^.key,':'); readln(keyLeft); T^.left^.key:=keyLeft; write('Nhap phai cua ',T^.key,':'); readln(keyRight); T^.right^.key:=keyRight; if (T^.left^.key 0) then NhapCayNP(T^.left) else T^.left:=nil; if (T^.right^.key 0) then NhapCayNP(T^.right) else T^.right:=nil; end; procedure ChuyenSangMang(T:nodeTree; a:MyArray; var n:integer); begin if (Tnil) then begin inc(n); a[n]:=T^key; ChuyenSangMang(T^.left,a,n); ChuyenSangMang(T^.right,a,n); end; end; procedure DuyetTruoc(T:nodeTree); begin if T=nil then write('Cay Rong') else begin write(T^.key:5); DuyetTruoc(T^.left); DuyetTruoc(T^.right); end; end; procedure DuyetGiua(T:nodeTree); begin if T=nil then write('Cay Rong') else begin DuyetGiua(T^.left); write(T^.key:5); DuyetGiua(T^.right); end; end; procedure DuyetSau(T:nodeTree); begin if T=nil then write('Cay Rong'); else begin DuyetSau(T^.left); DuyetSau(T^.right); write(T^.key:5); end; end; BEGIN TaoCayRong(T); NhapCayNP(T); ChuyenSangMang(T,n,a); DuyetTruoc(T); DuyetGiua(T); DuyetSau(T); end 2.DUYỆT CÂY TỔNG QUÁT THEO PHƯƠNG PHÁP program DuyetCayTQ; uses crt; const n=12; type item=char; pointer=^node; node=record info:item; numChild:integer; child:array[1 n] of pointer; end; var T:pointer; procedure inputTree(var T:pointer); var i:integer; p:pointer; begin if T=nil then begin new(T); write('Nhap nut goc '); readln(T^.info); end; p:=T; write('Nhap so cua node ',p^.info,':'); readln(p^.numChild); for i:=1 to p^.numChild begin new(p^.child[i]); write('Nhap nut thu ',i,':'); readln(p^.child[i]^.info); end; for i:=1 to p^.numChild inputTree(p^.child[i]); end; procedure DuyetTruoc(T:pointer); var i:integer; begin if T=nil then write('Cay Rong') else begin write(T^.info,''); for i:=1 to T^.numChild DuyetTruoc(T^.child[i]); end; end; procedure DuyetGiua(T:pointer); var i:integer; begin if T=nil then write('Cay Rong') else begin write(T^.info,''); for i:=1 to T^.numChild DuyetGiua(T^.child[i]); end; end; procedure DuyetSau(T:pointer); var i:integer; begin if T=nil then write('Cay Rong') else begin write(T^.info,''); for i:=1 to T^.numChild DuyetSau(T^.child[i]); end; end; BEGIN clrscr; inputTree(T); DuyetTruoc(T); DuyetGiua(T); DuyetSau(T); readln; END 3.DUYỆT RỪNG THEO PHƯƠNG PHÁP program DuyetRung; uses crt; const n=12; type item=char; pointer=^node; node=record info:item; numChild:integer; child:array[1 n] of pointer; end; var T:pointer; i:integer; m:integer; procedure inputTree(var T:pointer); var i:integer; p:pointer; begin if T=nil then begin new(T); write('Nhap nut goc '); readln(T^.info); end; p:=T; write('Nhap so cua node ',p^.info,':'); readln(p^.numChild); for i:=1 to p^.numChild begin new(p^.child[i]); write('Nhap nut thu ',i,':'); readln(p^.child[i]^.info); end; for i:=1 to p^.numChild inputTree(p^.child[i]); end; procedure DuyetTruoc(T:pointer); var j,i:integer; begin if T=nil then write('Cay Rong') else begin write(T^.info,''); for i:=1 to m begin for j:=1 to T^.numChild DuyetTruoc(T^.child[i]); end; end; end; procedure DuyetGiua(T:pointer); var i,j:integer; begin if T=nil then write('Cay Rong') else begin write(T^.info,''); for i:=1 to m begin for j:=1 to T^.numChild DuyetGiua(T^.child[i]); end; end; end; procedure DuyetSau(T:pointer); var j,i:integer; begin if T=nil then write('Cay Rong') else begin write(T^.info,''); for i:=1 to m begin for j:= to T^.numChild DuyetSau(T^.child[i]); end; end; end; BEGIN clrscr; write ('nhap vao so cay: '); readln (m); if T = nil then begin new(T); write('Nhap nut goc: '); readln(T^.info); end; for i:= to m begin writeln ('nhap cay thu: ',i); inputTree(T); end; DuyetTruoc(T); DuyetGiua(T); DuyetSau(T); readln; END CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ NGHIÊN CỨU VÀ KẾT LUẬN Sau thời gian tìm hiểu thực nghiên cứu tiểu luận đề tài “Nghiên cứu cài đặt chương trình thực duyệt nhị phân, tổng quát rừng theo ba phương pháp ( lưu trữ móc nối máy )” chúng em hoàn thành số yêu cầu nội dung sau: Ưu điểm: Trình bày kiến thức liên quan đến nhị phân,cây tổng quát Duyệt nhị phân,cây tổng quát phương pháp(TTT,TTG,TTS) & biểu diễn tổng quát nhị phân tương đương Cài đặt thử nghiệm chương trình ( pascal) Xây dựng chương trình giải tốn tìm kiếm đồ thị cách sử dụng thuật toán duyệt Nhược điểm: Mặc dù chúng em có nhiều cố gắng tìm hiểu nhiên kiến thức nhiều hạn chế nên tiểu luận cịn nhiều thiếu sót như:chương trình cịn có lỗi nhập liệu ,cần xây dựng hoàn thiện chức để người sử dụng theo dõi kết bước tìm kiếm duyệt Trên tiểu luận số kết đạt thiếu sót trình làm kính mong nhận góp ý nhận xét thầy để tiểu luận chúng em hoàn thiện Chúng em xin chân thành cảm ơn! CÁC TÀI LIỆU THAM KHẢO Bài giảng Cấu trúc Dữ liệu giải thuật- PGS.TS.Đặng Minh Ất-ThS.Lưu Minh Tuấn Đõ Xuân Lôi- Cấu trúc Dữ liệu giải thuật đại học Bách Khoa Hà Nội, NXB Thống kê,1999 Lập trình cao Pascal với cấu trúc liệu- Tập I,II Nxb Thống Kê,1997 - Phân -