Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
399,5 KB
Nội dung
Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN -------------------------- BOUAVAN PHANTHANIT ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI TÌMHIỂUVÀCÀIĐẶTCÂYGIAPHẢ Nghệ An, tháng 12 năm 2012 Buavan Phanthanit Lớp 49K – Khoa CNTT Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN -------------------------- ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI TÌMHIỂUVÀCÀIĐẶTCÂYGIAPHẢ Sinh viên thực hiện: Bouavan Phanthanit Mã sinh viên: 0851073260 Lớp: 49K Công nghệ Thông Tin Giáo viên hướng dẫn: TS. Nguyễn Trung Hòa Nghệ An, tháng 12 năm 2012 Buavan Phanthanit Lớp 49K – Khoa CNTT - 2 - Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả MỤC LỤC Buavan Phanthanit Lớp 49K – Khoa CNTT - 3 - Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả MỞ ĐẦU Các cấu trúc dữ liệu sẵn có trong các ngôn ngữ lập trình bậc cao được tạo nên bới một trong ba cách sau: Cách 1: Các dữ liệu thành phần là cùng một kiểu được liên kết bằng cách ghép thành một dãy kế tiếp trong bộ nhớ vật lý + Xâu ký tự, Mảng, Tệp Cách 2: Các dữ liệu thành phần không nhất thiết cùng kiểu được liên kết bằng cách ghép thành một đối tượng + Bản ghi (cấu trúc) Cách 3: Các dữ liệu thành phần là cùng một kiểu được liên kết bằng cách sử dụng con trỏ. Khi đó để sử dụng các con trỏ với mục đích liên kết các dữ liệu người ta tạo thành các khối, mỗi khối là một bản ghi gồm các thông tin được chia thành hai phần: phần dữ liệu và phần quan hệ, trong đó Phần dữ liệu có thể có một hay nhiều trường dữ liệu, Phần quan hệ có thể chứa một hay nhiều con trỏ trỏ đến các khối khác có quan hệ với khối đó. + Danh sách liên kết. Khi tìmhiểu về Cây, là một kiểu dữ liệu trừu tượng, một câu hỏi đặt ra là sử dụng cấu trúc dữ liệu cụ thể nào để thể hiện nó. Một ví dụ điển hình về cây là Câygia phả, tuy nhiên nó được càiđặt như thế nào? Dùng cấu trúc cụ thể gì là một vấn đề khó đối với em. Vì vậy em chọn đề tài Tìmhiểuvàcàiđặtcâygia phả. Đồ án được trình bày trong 2 chương. Chương 1 trình bày tóm tắt các kiến thức về cây, gồm khái niệm về cây, các phép toán cơ bản trên cây, các phép duyệt cây, các phương pháp biểu diễn cây. Buavan Phanthanit Lớp 49K – Khoa CNTT - 4 - Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả Chương 2 trình bày bài toán tạo câygia phả, gồm yếu cầu của bài toán, các cấu trúc dữ liệu và các giải thuật tạo cây, duyệt cây, bổ sung và lưu trữ cây. Có kèm theo một ví dụ minh họa. Đồ án đã được thực hiện tại Trường Đại học Vinh dưới sự hướng dẫn của TS Nguyến Trung Hòa. Nhân dịp này em xin tỏ lòng biết ơn đến Thầy giáo Nguyến Trung Hòa cùng các Thầy, Cô giáo trong Khoa CNTT và các bạn đã tận tình giúp đỡ em trong suốt thời gian học tập tại Trường Đại học Vinh. Nơi đây sẽ để lại trong em những kỷ niệm không bao giờ phai. Vì thời gian có hạn và nhiều khó khăn trong khi thơcj hiện đồ án nên đồ án không tránh khỏi thiếu sót, mong được sự góp ý của các Thầy, Cô và các bạn. Em xin cám ơn. Nghệ An, tháng 12 năm 2012 Người thực hiện Bouavan Phanthanit Buavan Phanthanit Lớp 49K – Khoa CNTT - 5 - Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả CHƯƠNG 1. CÂY 1.1. Khái niệm về câyCây là một số tập hợp các phần tử gọi là nút (nods) trong đó có một nút được phần biệt là nút gốc (root). Trên tập hợp các nút này có một quan hệ, gọi là mối quan hệ cha-con (parenthood), xác định hệ thống cấu trúc trên các nút. Mỗi nút,trừ nút gốc,có duy nhất một nút cha. Một nút có thế có nhiều nút con hoặc không có nút con nao. Mỗi nút biểu diễn một phần tử trong tập hợp đang xét và nó có thể có một kiểu náo đó bất kỳ,thường ta biểu diễn nút bằng một kí một chuỗi hoặc một chuỗi hoặc một số ghi trong vòng tròn. Mối quan hệ cha con được biểu diễn theo qui ước nút cha ở dòng trên nút con ở dòng dưới và được nối bởi một đoạn thẳng. Có thế định nghĩa cây một cách đệ qui như sau + Một nút đơn độc là một cây. Nút này cũng chính là nút gốc của cây + Giá sử ta có n là một nút đơn độc và k cây T1,…,Tk với các nút gốc tượng ứng là n1,…,nk thì có thể xây dựng một cây mới bằng cách cho nút n là cha của các nút n1,…nk. Cây mới này có nút gốc là nút n vàcây T1,…,Tk được gọi các cây con. + Tập rỗng cũng được coi là một câyvà gọi là cây rỗng kí hiệu Ví dụ: xét mục lục của một quyển sách. Mục lục này có thể xem là một cây Buavan Phanthanit Lớp 49K – Khoa CNTT - 6 - Sách C1 C2 C3 1.21.1 2.32.22.1 2.1.22.1.1 Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả Nút gốc là sách, nó có ba cây con có gốc là c1,c2,c3. Cây con thứ 3 có gốc c3 là một nút đơn độc trong khi đó hai cây con kia (gốc c1 và c2) có các nút con. Số các con của một nút gọi là cấp (degree) của nút đo. Ví dụ cấp của nút c1 là 2 và của nút c2 là 3. Nút có cấp bằng không gọi là nút Lá (leaf) hay nút đơn độc, nút tận cùng. Ví dụ các nút 1.1,2.1.1,2.2,2.3,c3 là các nút lá. Cấp của cây là cấp cao nhất của các nút trên cấp. Ví dụ cây sách ở trên cấp 3 Gốc của cây người ta gán cho số mức (level) là 0, nếu nút cha có mức là i thì nút con sẽ mức là i+1. Ví dụ nút Sách có mức là 0, nút c2 có mức là 1 và nút 2.1.1 có mức là 3. Chiền cao (height) hay chiều sâu (depth) của một cây là một số mức lớn nhất của nút có trên cây đó. Cây ở trên có nhiều cao là 3. Nều n1,…,nk là một chuỗi các nút trên cây sao cho ni là nút cha của nút ni+1,với i=1…k-1,thì chuỗi này gọi là một đường đi trên cây (hay ngắn ngọn là đường đi) từ n1 đến nk. Độ dài đường đi này được đinh nghĩa bằng số nút trên đường đi trừ 1 hay chính là số cung trên đường đi. Như vậy độ dài đường đi từ một nút đến chính nó bằng không Ví dụ đường đi từ nút Sách đến nút 2.1 là (sách, c2, 2.1) và độ dài đường đi là 2. Nếu thứ tự các cây con (hay các nút con) của một nút được coi trong thì cây đang xét là cây có thứ tự (ordered tree), ngược lại là cây không có thứ tự (unordered tree). Thường là thứ tự được qui ước từ trái sang phải. Như vậy, nếu kế thứ tự thì hai cây sau là khác nhau: Buavan Phanthanit Lớp 49K – Khoa CNTT - 7 - Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả 1.2. Biểu diễn cây 1.2.1. Càiđặt bằng mảng Cho cây T, ta có thế dùng một mảng A một chiều để lưu trữ cây bằng cách cho mỗi phần tử của mảng, ngoài việc chứa nội dung dữ liệu còn chứa thêm thông tin (địa chỉ) về cha của nó. Đặc biệt, nút gốc A[0] chứa thông tin về cha của nó là -1. Ví dụ Cây trên được biểu diễn trong mảng A như sau: Chỉ số của phần tử mảng 0 1 2 3 4 5 6 7 Dữ liệu A B C D E F G H Chỉ số của cha -1 0 0 1 1 2 5 5 1.2.2. Cài bằng mảng các danh sách kế Buavan Phanthanit Lớp 49K – Khoa CNTT - 8 - A C ED F G H B A CB A BC Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả Một cách biểu diễn khác cũng thường được dùng là biểu diễn cây dưới dạng mỗi nút của mảng có một danh sách các nút con. Vì số nút con của một nút là không biết trước nên dùng dánh sách liên kết sẽ thích hợp hơn. Vậy cây ở trên thì có thể lưu trữ như sau (dấu ‘*’ biểu diễn giá trị Null) 1.2.3. Cài bằng danh sách liên kết Mỗi Node trong cây gồm có n+1 trường trong đó n là bậc của cây, là số trường liên kết của cây, và 1 trường Info để chứa dữ liệu. Ta có thể mô phỏng cây trên như sau: (* biểu diễn Null) 1.3. Các phép toán cơ bản trên cây Buavan Phanthanit Lớp 49K – Khoa CNTT - 9 - * * * * * 1 2 3 * 4 5 6 * *87 *** 4 * 1 * 2 ***1 0 * 3 5 *** 6 *** 9 ***7 ***8 Đồ án tốt nghiệp đại học Tìmhiểuvàcàiđặtcâygiaphả 1.3.1. Phép tìm cha Phép tìm cha của mỗi đỉnh x là việc thực hiện hàm parent(x) trả về địa chỉ là địa chỉ của đỉnh cha của x. Trường hợp x là gốc hàm có thể trả về Null 1.3.2. Phép tìm con trưởng Tìm con bên trái ngoài (con trưởng) của mỗi định. Hàm EldestChild(x) cho ta con trưởng của đỉnh x. Trong trường hợp x là lá (x không có con) thì EldestChild (x) = Null. 1.3.3. Phép tìm em kế Hàm Nextsibling (x) xác định em liền kế của đỉnh x. Trong trường hợp x không có em liền kế tức x là con ngoài cùng bên phải của một đỉnh nào đó) thì Nextsibling (x) = Null Ví dụ: Giả sử T là cây đã cho trong hình bên: Parent (A)= Null Parent (D)= B, Parent (F)= C, EldestChild (B)= D Nextsilbling (A)= Null Nextsilbling (G)= H Nextsilbling (H)= Null 1.4. Phép Duyệt cây Là một qui tắc cho phép đi qua lần lượt tất cả các nút của cây, mỗi nút đúng một lần. Buavan Phanthanit Lớp 49K – Khoa CNTT - 10 - A C ED F G H B