Upload
ngoc-nhan-tran
View
28
Download
0
Embed Size (px)
DESCRIPTION
BaoCao NCKH TreeQueue Ver3 DOCX
Citation preview
MỤC LỤC
LỜI CẢM ƠN..........................................................................................................................................................4
PHẦN MỞ ĐẦU....................................................................................................................................................5
1. Lý do chọn đề tài.............................................................................................................................................5
2. Mục tiêu đề tài.................................................................................................................................................5
3. Đối tượng và phạm vi nghiên cứu..................................................................................................................6
3.1. Đối tượng nghiên cứu.....................................................................................................................................6
3.2. Phạm vi nghiên cứu........................................................................................................................................6
4. Cách tiếp cận và phương pháp nghiên cứu...................................................................................................6
4.1. Cách tiếp cận...................................................................................................................................................6
4.2. Phương pháp nghiên cứu................................................................................................................................6
CHƯƠNG 1: HÀNG ĐỢI.....................................................................................................................................7
1. TỔNG QUAN VỀ CẤU TRÚC HÀNG ĐỢI.................................................................................................7
1.1. Định nghĩa.......................................................................................................................................................7
1.2. Tính chất..........................................................................................................................................................9
1.3. Trừu tượng hóa cấu trúc hàng đợi................................................................................................................9
1.4. Các phép toán trên hàng đợi..........................................................................................................................9
2.5. Cài đặt hàng đợi..............................................................................................................................................9
2.5.1. Cài đặt hàng đợi bằng mảng.....................................................................................................................10
2.2. Cài đặt hàng đợi bằng danh sách liên kết...................................................................................................16
CHƯƠNG 2: CÂY...............................................................................................................................................20
2.1. Tổng quan về cấu trúc cây............................................................................................................................20
2.1.1. Định nghĩa và các khái niệm....................................................................................................................20
Trang 1
2.2. Cây nhị phân.................................................................................................................................................22
2.2.1. Định nghĩa..................................................................................................................................................22
2.2.2. Tính chất.....................................................................................................................................................23
2.2.3. Các thao tác trên cây nhị phân.................................................................................................................25
2.2.4. Cài đặt cây nhị phân..................................................................................................................................25
2.3. Cây nhị phân tìm kiếm.................................................................................................................................28
2.3.1. Định nghĩa..................................................................................................................................................28
2.3.2. Các thao tác trên CNPTK.........................................................................................................................29
2.3.3. Cài đặt cây nhị phân tìm kiếm..................................................................................................................29
2.3.4. Phân tích đánh giá.....................................................................................................................................32
2.4. Cây nhị phân cân bằng tìm kiếm.................................................................................................................32
2.4.1. Cây nhị phân cần bằng hoàn toàn............................................................................................................32
2.4.1.1. Định nghĩa:..............................................................................................................................................32
2.4.1.2. Đánh giá:..................................................................................................................................................32
2.4.2.Cây nhị phân tự cân bằng (cây AVL)........................................................................................................32
2.4.2.1. Định nghĩa:..............................................................................................................................................32
2.4.2.3. Các thao tác trên cây AVL.....................................................................................................................33
2.4.2.4. Cài đặt cây AVL......................................................................................................................................33
2.4.2.5. Đánh giá...................................................................................................................................................37
CHƯƠNG 3. MÔ PHỎNG TRỰC QUAN CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI VÀ CÂY......................39
3.1. Phân tích và ý tưởng.....................................................................................................................................39
3.1.1. Phân tích.....................................................................................................................................................39
3.1.2.Ý tưởng........................................................................................................................................................40
3.2. Giao diện chính.............................................................................................................................................40
Trang 2
KẾT LUẬN..........................................................................................................................................................45
1. Ưu điểm..........................................................................................................................................................45
2. Nhược điểm....................................................................................................................................................45
3. Hướng phát triển...........................................................................................................................................45
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN....................................................................................................46
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN....................................................................................................47
Trang 3
LỜI CẢM ƠN
Sau thời gian học tập, tìm hiểu và nghiên cứu tại khoa Đào Tạo quốc tế - trường Đai
học Duy Tân, được sự giúp đỡ quý báu của các thầy giáo, cô giáo nhóm chúng em đã hoàn
thành bài nghiên cứu khoa học của mình.
Để hoàn thành bài nghiên cứu một cách hoàn thiện nhất có thể, trước hết cho phép
chúng em được bày tỏ lời cảm ơn chân thành tới cô Nguyễn Thị Bảo Trang đã hướng dẫn
tận tình, giúp đỡ chúng em trong suốt quá trình hoàn thành bài nghiên cứu.
Ngoài ra em xin cảm ơn các thầy, các cô với sự giúp đỡ nhiệt tình trong quá trình
giảng dạy đã trang bị cho chúng em một nền tảng kiến thức vững chắc cũng như các tài liệu
thao khảo về lập trình.
Đây là lần đầu tiên chúng em làm một bài nghiên cứu cũng như kinh nghiệm bản thân
còn hạn chế nên bài nghiên cứu của chúng em không thể tránh khỏi những sai sót. Vì vậy,
chúng em rất mong nhận được sự chỉ bảo, đóng góp ý kiến của các thầy cô để chúng em có
điều kiện bổ sung, nâng cao kiến thức của mình, phục vụ tốt hơn các công tác thực tế sau
này.
Em xin chân thành cảm ơn!
Đà Nẵng ngày ...., tháng ....., năm .....
Trang 4
PHẦN MỞ ĐẦU
1. Lý do chọn đề tài.
Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu trong máy tính sao
cho nó có thể được sử dụng một cách hiệu quả. Một cấu trúc dữ liệu được lựa chọn cẩn thận
sẽ cho phép thực hiện thuật toán hiệu quả hơn.
Việc xây dựng chương trình này nhằm hỗ trợ tốt nhất về cấu trúc dữ liệu Hàng đợi
(Queue) và Cây (Tree) góp phần giúp cho quá trình giảng dạy của Giảng viên về môn cấu
trúc dữ liệu & giải thuật được tốt. Nhằm tìm hiểu những thuật toán cơ bản của cấu trúc dữ
liệu và giải thuật, tạo điều kiện cho sinh viên có khả năng tìm tòi, tự học và làm việc độc
lập.
Những hình ảnh cụ thể luôn tạo cho sinh viên có một cái nhìn trực quan hơn về việc
học, với những quá trình mô phỏng bằng hình ảnh của đề tài sẽ hỗ trợ cho người học có thể
tiếp thu kiến thức một cách nhanh nhất và nắm được vấn đề ngay tại lớp (có thể hiểu ro về
cấu trúc dữ liệu của Hàng đợi và Cây được lưu trữ trong máy tính như thế nào và nắm được
tưng bước thực hiện của các giải thuật trên hai cấu trúc dữ liệu này). Đề tài sẽ thúc đẩy chất
lượng của việc học cao hơn, tạo một nền tảng lập trình vững chắc cho sinh viên sau này.
Quá trình giảng dạy của giảng viên luôn là vấn đề quan trọng, nó luôn ảnh hưởng tới
việc học và tiếp thu của sinh viên. Vậy nên chương trình nhằm nâng cao chất lượng giảng
dạy và đào tạo của giảng viên dành cho sinh viên công nghệ thông tin tại trường ĐH Duy
Tân nói riêng và các trường cao đẳng, đại học trên toàn quốc nói chung.
Tạo ra một sản phẩm trí tuệ ảnh hưởng tới việc học cũng như việc giảng dạy nhằm
quảng bá uy tín và thương hiệu của trường Đại học Duy Tân, tạo niềm tin cho những học
sinh và sinh viên đam mê lập trình muốn theo con đường công nghệ, nhằm hướng đến một
trường Đại học có chất lượng giảng dạy cao và nhằm đáp ứng nhu cầu tuyển dụng Công
nghệ thông tin ngày một tăng của các doanh nghiệp.
2. Mục tiêu đề tài.
Đề tài nghiên cứu những khái niệm, tính chất, các phép toán chèn, xóa, tìm kiếm về
cấu trúc dữ liệu Hàng đợi, Cây, Cây nhị phân , Cây nhị phân cân bằng, Cây nhị phân tìm
Trang 5
kiếm, Cây đỏ đen rồi tư đó mô phỏng các phép toán trên Hàng đợi, Cây, Cây nhị phân, Cây
nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen một cách trực quan nhất.
3. Đối tượng và phạm vi nghiên cứu.
3.1. Đối tượng nghiên cứu.
- Lý thuyết về cấu trúc dữ liệu Hàng đợi và Cây.
- Hoạt động của Hàng đợi, Cây và việc áp dụng các giải thuật của Hàng đợi, Cây
trong một số bài toán cơ bản.
- Ngôn ngữ lập trình Java dùng để phục vụ cho hướng phát triển là mô phỏng trực
quan cấu trúc dữ liệu và các giải thuật trên Hàng đợi và Cây.
3.2. Phạm vi nghiên cứu.
- Nghiên cứu và làm ro những khái niệm, tính chất về cấu trúc dữ liệu Hàng đợi,
Cây, Cây nhị phân, Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen.
- Nghiên cứu các phép toán chèn, xóa, tìm kiếm trên Hàng đợi, Cây, Cây nhị phân,
Cây nhị phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen.
- Thực hiện mô phỏng các phép toán trên Hàng đợi, Cây, Cây nhị phân, Cây nhị
phân cân bằng, Cây nhị phân tìm kiếm, Cây đỏ đen.
4. Cách tiếp cận và phương pháp nghiên cứu.
4.1. Cách tiếp cận.
Tiếp cận tư lý thuyết thực tiễn giải pháp.
4.2. Phương pháp nghiên cứu.
- Tìm hiểu lý thuyết về cây, hàng đợi và đồ họa qua các tài liệu.
- Trong quá trình tìm hiểu thì học hỏi bạn bè, giáo viên về mặt lý thuyết cũng như
các thao tác khi xây dựng đồ án.
- Thực hành và xây dựng tưng bước đến khi hoàn chỉnh.
Trang 6
wordsstore
ina
queue
head của hàng đợi
tail của hàng đợi
Tư cần chèn vào more
Hình 1.1: Hàng đợi trước khi không thêm gì.
CHƯƠNG 1: HÀNG ĐỢI
1. TỔNG QUAN VỀ CẤU TRÚC HÀNG ĐỢI
1.1. Định nghĩa.
Là một danh sách nhưng các phép toán chỉ được thực hiện ở hai đỉnh của danh sách.
Một đỉnh gọi là đầu hàng, đỉnh còn lại gọi là cuối hàng. Thêm ở cuối danh sách (tail), còn
bớt thì ở phía đầu của danh sách (head).
Xếp hàng mua vé xe lửa là hình ảnh của hàng đợi, người đến trước mua vé trước,
người đến sau mua vé sau.
Ví dụ:
Trang 7
wodsstore
ina
queuemore
head của hàng đợi
tail của hàng đợi
Hình 1.2: Hàng đợi sau khi thêm tư more.
storeina
queuemore
head của hàng đợi
tail của hàng đợi
Hình 1.3: Hàng đợi sau khi xóa tư words.
Trang 8
1.2. Tính chất.
Vào trước ra trước (First in First out: FIFO).
1.3. Trừu tượng hóa cấu trúc hàng đợi.
Mô tả dữ liệu.
A = (a0, a1, ... ,an)
Trong đó:
a0: Phần tử ở đầu của hàng đợi A.
an: Phần tử ở cuối hàng đợi của A.
Ví dụ: A = (1, 3, 5, 7, 9)
khi đó:
1: phân tử đầu hàng đợi.
9: phần tử cuối hàng đợi.
1.4. Các phép toán trên hàng đợi.
Peek: Trả về phần tử ở đầu hàng đợi nhưng không xóa nó.
A = (a0, a1, ..., an-1, an) peek() a0.
Ví dụ: A(1,3,5)
peek() 1.
Pop: Trả về phần tử đầu hàng đợi và xóa nó.
A = (a0, a1, ..., an-1, an) A = (a0, a1, ..., an)
Ví dụ: A = (14, 6, 8)
pop() A= (6, 8)
Push (x): Đưa một giá trị vào cuối hàng đợi
A = (a0, a1, ..., an) A = (a0, a1, ..., an, x)
Ví dụ: A = (2, 6, 7)
push(25) A = (2,6,7,25).
2.5. Cài đặt hàng đợi.Có nhiều cách cài đặt hàng đợi:Cài đặt hàng đợi bằng mảng bằng cách sử dụng một cặp chỉ số theo doi các trường
hợp ở đầu và ở đuôi của hàng đợi. Việc cài đặt hàng đợi bằng mảng xoay tròn khi sử dụng các chỉ số đầu và đuôi có thể rất hiệu quả khi kích thước hàng đợi là cố định.
Trang 9
Hình 2.5.1: Hàng đợi mảng vòng trước khi chèn tư First
Hàng đợiTư cần chèn vào Head của hàng đợi
First
0
0
0
Tail của hàng đợi
Size
1
2
3
0
4
5
6
Cài đặt hàng đợi bằng danh sách liên kết thì rất tốt khi kích thước hàng đợi không cố định.
2.5.1. Cài đặt hàng đợi bằng mảng.
Cài đặt hàng đợi bằng cách sử dụng mảng thì rất hiệu quả khi biết trước số phần tử tối đa của hàng đợi
Việc loại bỏ một phần tử trong hàng đợi được thực hiện ở đầu mảng và việc thêm phần tử mới vào hàng đợi được thực hiện ở cuối mảng, sử dụng cặp chỉ số đầu và đuôi và khởi tạo một mảng vòng.
Ví dụ:
Trang 10
Hình 2.5.2: Hàng đợi mảng vòng sau khi chèn tư First
First
Hàng đợiTư cần chèn vào Head của hàng đợi
First
1
0
1
Tail của hàng đợi
Size
1
2
3
0
4
5
6
Hình 2.5.3: Hàng đợi mảng vòng sau khi chèn tư Second
First
Head của hàng đợi
0
1
Tail của hàng đợi Second1
2
3
0
4
5
6
2
Size
Trang 11
Hàng đợi
Head của hàng đợiTrả về tư First
First
1
Size
1
2
3
0
4
5
6
Second
1
Tail của hàng đợi
0
Hình 2.5.4: Hàng đợi mảng vòng sau khi xóa tư First
Ví dụ: Một trường hợp khác của mảng vòng.
Trang 12
Hình 2.5.5: Hàng đợi mảng vòng trước khi chèn tư Second.
Second
Tư cần chèn vào Hàng đợi
6
Head của hàng đợi
5
Tail của hàng đợi First
1
3
2
0
6
5
1
Size
Tư cần chèn vào
Second
2
Head của hàng đợi
5
0
Tail của hàng đợi
First
4
3
2
1
0
6
5
Second
Size
Hình 2.5.6: Hàng đợi mảng vòng sau khi chèn tư Second.
Trang 13
Hàng đợi
4
Hình 2.5.7: Hàng đợi mảng vòng sau khi chèn tư Third
Third
Size
Tư cần chèn vào
3
Head của hàng đợi
5
1
Tail của hàng đợi
First
4
3
2
1
0
6
5
Second
Third
Size
2
Head của hàng đợi
6
1
Tail của hàng đợi
Hình 2.5.8: Hàng đợi mảng vòng sau khi xóa tư First
4
3
2
1
0
6
5
Second
ThirdFirst
Trả về tư First sau khi xóa
Trang 14
Hàng đợi
Hàng đợi
Second
Trả về tư Second sau khi xóa
Third
4
3
2
1
0
6
5
Hàng đợiHead của hàng đợi
0
Tail của hàng đợi
1Size
1
Hình 2.5.9: Hàng đợi mảng vòng sau khi xóa tư Second
Size
0
Third
Trả về tư Third sau khi xóa
4
3
2
1
0
6
5
Hàng đợiHead của hàng đợi
1
Tail của hàng đợi
1
Hình 2.5.10: Hàng đợi mảng vòng sau khi xóa tư Third
Trang 15
Ở hai ví dụ trên, ta thấy rằng khi head = tail có nghĩa là hàng đợi rỗng. Nhưng khi hàng đợi đầy thì chỉ số head cũng bằng chỉ số tail. Vì vậy ta cần xử lý 2 chỉ số này để tránh sự mơ hồ giữa hàng đợi rỗng và đầy. Để loại bỏ sự mơ hồ chúng ta cần kiểm tra số phần tử (size) của hàng đợi, khi số phần tử bằng kích thước tối đa của hàng đợi thì khi đó hàng đợi đã đầy, còn khi số phần tử hàng đợi bằng 0 thì lúc đó hàng đợi rỗng.
Việc xác định kích thước của hàng đợi là rất quan trọng, và việc thay đổi lại kích thước của hàng đợi thì có thể thực thi được, nhưng đòi hỏi rất tốn chi phí. Chúng ta phải chắc rằng hàng đợi có kích thước quá nhỏ thì mới yêu cầu thay đổi lại kích thước. Nhưng nếu kích thước hàng đợi quá lớn thì sẽ dẫn đến lãng phí bộ nhớ.
Như vậy, để tạo ra hàng đợi, ta cần dùng một mảng gồm các phần tử có kiểu E nào đó.
Thêm phần tử vào cuối hàng đợi (Push).
Nếu hàng đợi đầy thì phát sinh thêm một ngoại lệ. Nếu hàng đợi chưa đầy thì thêm phần tử mới vào cuối hàng đợi tại vị trí tail, cập nhật lại vị trí tail và nếu vị trí tail quay vòng lại đầu mảng thì quay về lại vị trí 0, tăng số phần tử hàng đợi lên 1 và phương thức này nhận giá trị true.
public boolean push(E e){if(size >= a.length){
System.out.println("Queue if full");System.exit(0);
}a[tail++] = e;tail = tail % a.length;size++;return true;
}
Xóa phần tử đầu hàng đợi (Pop).Nếu hàng đợi rỗng thì phát sinh thêm một ngoại lệ. Ngược lại thì xóa phần tử ở đầu
hàng đợi tại vị trí head, cập nhật lại vị trí head và nếu vị trí head quay vòng lại đầu mảng thì quay về lại vị trí 0, giảm phần tử hàng đợi xuống 1 và phương thức này trả về phần tử đã bị xóa.
public E pop(){if(size < 0){
System.out.println("Queue is empty");System.exit(0);
}E temp = a[head++];
Trang 16
Hình 2.2.1: Hàng đợi trước khi chèn tư more
a
more
words
in
queue
Head của hàng đợi
Tail của hàng đợi
Tư cần chèn vào store
head = head % a.length;size--;return temp;
} Trả về phần tử ở đầu hàng đợi (Peek)Nếu kích thước mảng < 0 thì trả về giá trị null, ngược lại thì trả về phần tử đầu hàng
đợi.public E peek(){
if(size < 0)return null;
return a[head];}
2.2. Cài đặt hàng đợi bằng danh sách liên kết.Cài đặt hàng đợi bằng danh sách liên kết là một phương pháp tốt khi ta không cần cố
định kích thước của hàng đợi.
Ví dụ:
Trang 17
Hình 2.2.3: Hàng đợi sau khi xóa tư words.
words
Head của hàng đợi
Trả về tư words sau khi xóa
a
in
queueTail của hàng đợi
store
more
more
words
store
a
in
queue
Hình 2.2.2: Hàng đợi sau khi thêm tư more.
more
Head của hàng đợi
Tail của hàng đợi
Trả về tư words sau khi xóa
Trang 18
Như vậy, để tạo ra hàng đợi chứa một vài tham số kiểu E, ta cần một Node gồm 2 thuộc tính, một thuộc tính tham chiếu đến giá trị kiểu E, thuộc tính còn lại tham chiếu đến một Node khác.
Vì lớp Node này chỉ được biết bởi lớp hàng đợi, nên lớp Node sẽ được cài đặt như là lớp lồng trong lớp hàng đợi.
Vì kích thước của hàng đợi không cần cố định, nên ta chỉ cần dùng một hàm khởi tạo.
Thêm phần tử vào cuối hàng đợi.Cấp phát bộ nhớ cho node p, nếu hàng đợi rỗng thì p vưa là head vưa là tail, ngược lại
thì trỏ link liên kết tail tới node p.public boolean push(E e){
Node<E> temp = new Node<E> (e,null);if(tail==null)
head = temp;else
tail.next=temp;tail=temp;size++;return true;
}
Lấy phần tử ra khỏi hàng đợi.public E remove(){
if(size <= 0){return null;
}else{Node<E> temp = head;if(head == tail){
head=tail=null;}else{
head=head.next;}return temp.info;
}}
Trang 19
CHƯƠNG 2: CÂY
2.1. Tổng quan về cấu trúc cây.
2.1.1. Định nghĩa và các khái niệm.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ố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:
Một nút là một cây. Nút đó cũng là gốc của cây ấy.
Nếu T1, T2, ..., Tn là các cây, với n1, n2, ... nk lần lượt là các gốc, n là một nút và
n có quan hệ cha - con với n1, n2, ... nk 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 n1, n2, ... nk, ngược lại n1, n2, ... nk được
gọi là con của n. Các cây T1, T2, ..., Tn đượ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.
Ví dụ:
Mục lục của một quyển sách, hoặc một chương trong sách có cấu trúc cây.
Cấu trúc thư mục trên đĩa cũng có cấu trúc cây, thư mục gốc có thể coi là gốc
của cây đó với các cây con là các thư mục con và tệp nằm trên thư mục gốc.
Gia phả của một họ tốc cũng có cấu trúc cây.
Một biểu thức số học gồm các phép toán cộng, trư, nhân, chia cũng có thể lưu
trữ trong một cây mà các toán hạng được lưu trữ ở nút lá, các toán tử được lưu trữ
ở các nút nhánh, mỗi nhánh là một biểu thức con.
Ta có một cây tổng quát như sau:
Trang 20
Hình CTQ
Đối với cây, chẳng hạn xét cây ở Hình CTQ:
Nút A được gọi là gốc của cây.
B, C, D là gốc của các cây con gốc của A.
A là cha của B, C, D còn B, C, D là con của A.
Số các con của một nút gọi là cấp (degree) của nút đó. Ví dụ nút A có 3 con là B, C,
D nên cấp của A là 3, cấp của C là một, D là 2, B là 3.
Nút có cấp bằng 0 gọi là lá (leaf) hay nút tận cùng (terminal node). Ví dụ các
nút E, F, G, H, I, J. Nút không là lá được gọi là nút nhánh (branch node).
Cấp cao nhất của nút trên cây gọi là cấp của cây đó. Như hình trên là cây cấp 3.
Gốc của cây có số mức (level) là 1. Nếu nút cha có số mức là i thì nút con có số mức
là i+1.
Ví dụ nút A có số mức là 1.
Các nút B, C, D cùng có mức là 2.
Các nút E, F, G, H, I, J có mức là 3.
Chiều cao (height) hay chiều xâu (depth) của một cây là số mức lớn nhất của nút có
trên cây đó.
Ở Hình CTQcây có chiều cao là 3.
Nếu n1, n2, ... nk là dãy các nút mà ni là cha của ni+1 với 1≤ i ≤k, thì dãy đó là đường đi
(path) tử n1 đế nk. Độ dài của đường đi (path length) tư nút nk đến nq là số nút phải đi qua để
đi tư nk đến nq ( bằng chiều cao của nq - chiều cao của nk).
Ví dụ nhưHình CTQ độ dài đường đi tư A đến G là 2.
Trang 21
Nếu thứ tự các cây con của một nút được coi trọng thì cây đang xét là cây thứ tự
(ordered tree), ngược lại là cây không có thứ tự (unordered tree). Thường thứ tự các cây con
của một nút được đặt tư trái sang phải.
2.2. Cây nhị phân.
2.2.1. Định nghĩa.
Cây nhị phân là cây mà mỗi nút có tối đa 2 cây con.
Đối với cây con của một nút người ta phân biệt cây con trái và cây con phải. Như vậy
cây nhị phân là cây có thứ tự.
Cây nhị phân suy biến có một danh sách tuyến tính.
a b c d
Các cây nhị phân a, b, c, d là các cây nhị phân suy biến
Cây a lệch trái, cây b lệch phải, cây c và d là cây zíc zắc.
Cây nhị phân hoàn chỉnh: là cây nhị phân mà các nút ở các mức trư mức cuối đều đạt
tối đa.
Ví dụ: cây sau đây là cây nhị phân hoàn chỉnh.
Trang 22
D
C
B
A
D
C
B
A
D
C
B
A
D
C
B
A
Cây nhị phân đầy đủ : Là cây nhị phân có các nút tối đa ở mọi mức.
Ví dụ: Cây sau đây là cây nhị phân đầy đủ.
2.2.2. Tính chất.
Trong các cây nhị phân cùng có số lượng nút như nhau thì cây nhị phân suy
biến có chiều cao lớn nhất, cây nhị phân hoàn chỉnh hoặc cây nhị phân gần đầy có
chiều cao nhỏ nhất, loại cây này cũng là cây có dạng "cân đối" nhất.
Số lượng tối đa các nút ở mức i trên 1 cây nhị phân là 2i-1 (i≥1).
Số lượng tối đa các nút trên 1 cây nhị phân có chiều cao h là
2h - 1, tối thiểu là h (h ≥ 1).
Cây nhị phân hoàn chỉnh, không đầy đủ, có n nút thì chiều cao của nó là:
h = [log2(n+1)] + 1
Cây nhị phân đầy đủ, có n nút, thì chiều cao của nó là: h = log2(n+1).
Chứng minh:
1) Lượng tối đa các nút ở mức i trên 1 cây nhị phân là 2i-1 (i≥1).
Chứng minh bằng quy nạp: ta biết:
Ở mức 1: i=1, cây nhị phân có tối đa 1=20 nút.
Ở mức 2: i=2, cây nhị phân có tối đa 2 =21 nút.
Trang 23
A
D
C
GE
B
F
Giả sử kết quả đúng với mức i - 1, nghĩa là ở mức này cây nhị phân có tối đa là 2 i-2
nút. Mỗi nút ở mức i-1 sẽ có tối đa hai con, do đó 2i-2 nút ở mức i-1 sẽ cho:
2i-2 x 2 = 2i-1 nút tối đa ở mức i.
Tính chất trên được chứng minh (1).
2) Số lượng tối đa các nút trên 1 cây nhị phân có chiều cao h là 2h - 1, tối thiểu là h
(h ≥ 1).
Ta biết rằng chiều cao của cây là số mức lớn nhất có trên cây. Theo chứng minh (1) ta
suy ra số nút tối đa có trên cây nhị phân với chiều cao h là:
20 +21 +22 + ... + 2h-1 = 2h - 1.
Lưu trữ cây nhị phân:
Lưu trữ kế tiếp: Với cây nhị phân đầy đủ, ta đánh số các nút tư 1 trở đi, hết mức này
đến mức khác, tư trái qua phải.
Ví dụ với cây đày đủ ở trên được lưu trữ như sau:
Lưu trữ bằng danh sách liên kết.
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 : Con trỏ trỏ tới cây con trái của nút đó
RPTR : Con trỏ trỏ tới cây con phải của nút đó
INFO : Trường thông tin.
Ví dụ cây nhị phân sau đây:
Trang 24
A B C D E F G
v[0] v[1] v[2] v[3] v[4] v[5] v[6]
A
D
C
GE
B
F
LPTR INFO RPTR
2.2.3. Các thao tác trên cây nhị phân.
Các thao tác trên cây nhị phân bao gồm:
Khởi tạo cây nhị phân.
Tạo mới 1 nút .
Thêm 1 nút vào cây nhị phân.
Duyệt qua các nút trên cây nhị phân.
Tính chiều cao của cây.
Tính số nút của cây.
Hủy 1 nút trên cây nhị phân.
2.2.4. Cài đặt cây nhị phân.
Định nghĩa cây nhị phân.
class TNode{int data;TNode left,right;
} Khởi tạo cây nhị phân.
Cho con trỏ quản lí địa chỉ nút gốc về con trỏ NULL.
void btree(Node root){
root = null;}
Tạo mới một nút.
Cấp phát bộ nhớ cho một nút, cất dữ liệu vào nút, gán left, right == null, trả về địa
chỉ nút.
Trang 25
Khi cây rỗng thì T=NULL
A
D
C
E
B
Node make_Node(int x){
Node p = new Node();p.data = x;p.left = p.right = null;return p;
} Thêm một nút vào cây nhị phân.
Nếu khóa của gốc khác khóa cần chèn ta tìm nó trong cây con trái hoặc phải. Nếu
cây con trái hoặc phải tương ứng là rỗng (không tìm thấy) thì thêm một nút và gán
cho nút ấy khóa cần chèn.
Giải thuật thêm trái nhất.
void set_right(int x){
Node p = new Node();if(p == null)
System.out.println("Nút không tồn tại");else
if(p.right!=null)System.out.println("Nút đã có bên phải");
elsep.right = make_Node(x);
}Giải thuật thêm phải nhất.
void set_left (int x){
Node p = new Node();if(p == null)
System.out.println("Nút không tồn tại");else
if(p.left!=null)System.out.println("Nút đã có bên trái");
elsep.left = make_Node(x);
} Duyệt các nút trên cây nhị phân.
Duyệt theo thứ tự nút gốc trước (Preoder).
Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con bên phải (Node - Left -
Right).
Trang 26
void preOrder(Node<T> r){
if(r!=null){
System.out.println(r.info+" ");preOrder(r.left);preOrder(r.right);
}}
Duyệt theo thứ tự nút gốc giữa (InOder)
Duyệt cây con bên trái, duyệt nút gốc, duyệt cây con bên phải (Left - Node -
Right).
void inOrder(Node<T> r){
if(r!=null){
inOrder(r.left);System.out.println(r.info+" ");inOrder(r.right);
}}
Duyệt theo thứ tự nút gốc sau (PostOder)
Duyệt cây con bên trái, duyệt cây con bên phải, duyệt nút gốc(Left – Right -
Node).
void postOrder(Node<T> r){if(r!=null){
postOrder(r.left);postOrder(r.right);System.out.println(r.info+" ");
}}
Giải thuật tính chiều cao của cây.
Để tính chiều cao của cây (TH) chúng ta phải tính chiều cao của các cây con, khi
đó chiều cao của cây chính là chiều cao lớn nhất của các cây con cộng thêm 1 (chiều
cao nút gốc). Như vậy thao tác tính chiều cao của cây là thao tác tính đệ quy chiều
cao của các cây con (chiều cao của cây con có gốc là nút lá bằng 1).
int Height(Node<T> r){
Trang 27
if(r==null) return 0;int HL = Height(r.left);int HR = Height (r.right);if(HL>HR)
return HL+1;return HR+1;
} Giải thuật đếm số nút của cây.
Tính số nút của cây tương tự tính chiều cao của cây, số nút của cây con + 1.
int count(Node<T> r){
if(r==null) return 0;if(r.left==null&&r.right==null)
return 1+count(r.left)+count(r.right);return count(r.left)+count(r.right);
}2.3. Cây nhị phân tìm kiếm.
2.3.1. Định nghĩa.
Cây nhị phân tìm kiếm (CNPTK) là cây nhị phân trong đó tại mỗi nút, khóa của nút
đang xét lớn hơn khóa của tất cả các nút thuộc cây con trái và nhỏ hơn khóa của tất cả của
các nút thuộc cây con phải.
Cây nhị phân tìm kiếm là một cấu trúc dữ liệu cơ bản được sử dụng để xây dựng các
cấu trúc dữ liệu trưu tượng hơn như các tập hợp, đa tập hợp, các dãy kết hợp.
Nếu một CNPTK có chứa các giá trị giống nhau thì nó biểu diễn một đa tập hợp.
Nếu một CNPTK không chưa các giá trị giống nhau thì nó biểu diễn một tập hợp đơn
trị.
Trang 28
Hình CNPTK
2.3.2. Các thao tác trên CNPTK.
Các thao tác trên CNPTK bao gồm:
Giải thuật tìm kiếm.
Giải thuật chèn.
Giải thuật xóa
Giải thuật sắp xếp.
2.3.3. Cài đặt cây nhị phân tìm kiếm.
Định nghĩa cây nhị phân tìm kiếm.
private class Node<E>{private E info;private Node<E> left, right;
}private Node root;
Khởi tạo CNPTK.
public Node(E data, Node<E> left, Node<E> right){this.info=data;this.left=left;this.right=right;
}public Node(E data){
this.info=data;left=right=null;
}public BST(){
root=null;}
Giải thuật chèn.
Dựa vào giá trị khóa của nút cần chèn để xác định vị trí chính xác của nút đó. Giả sử
nút cần chèn có giá trị khóa là V, nút gốc của cây có giá trị khóa là N. Nếu V>N thì ta đi
theo nhánh phải và tiếp tục quá trình so sánh. Nếu V<N thì ta đi theo nhánh trái và tiếp tục
quá trình so sánh. Quá trình này sẽ dưng lại khi xảy ra một trong hai trường hợp sau:
V=N. Trong trường hợp này, dữ liệu cần chèn đã có trong cây. Vì vậy ta không
cần chèn thêm nút mới.
Con trỏ trỏ đến null. Tức là ta đã tìm đến vị trí chính xác cho nút mới.
Trang 29
public Node add(Comparable<E> x, Node r){
if(r==null){r=new Node(x);return r;
}else if(x.compareTo((E) r.info)<0)
{r.left=add(x,r.left);return r;
}else if(x.compareTo((E) r.info)>0){
r.right=add(x,r.right);return r;
}else return r;}
Giải thuật tìm kiếm.
Đối với một cây nhị phân tìm kiếm để tìm xem một khóa X nào đó có trên cây đó
không ta có thể thực hiện như sau:
So sánh X với khóa ở gốc và 1 trong 4 tình huống sau đây sẽ xuất hiện:
1) Không có gốc (cây rỗng): X không có trên cây, phép tìm kiếm không thỏa.
2) X trùng với khóa ở gốc: phép tìm kiếm không thỏa.
3) X nhỏ hơn khóa ở gốc: tìm kiếm thực hiện tiếp tục bằng cách xem xét cây
con trái của gốc với cách làm tương tự.
4) X lớn hơn khóa ở gốc: tìm kiếm thực hiện tiếp tục bằng cách xem xét cây
con phải của gốc với cách làm tương tự.
Như với cây ở Hình CNPTK, nếu X = 40, ta sẽ thực hiện.
So sánh X với 44: X<44, ta chuyển sang cây con trái.
So sánh X với 18: X>18, ta chuyển sang cây con phải.
So sánh X với 37: X>37, ta chuyển sang cây con phải.
So sánh X với 40: X=40, vậy tìm kiếm được thỏa.
Trang 30
private Node<E> find(Node<E> r,Comparable<E> target){if(r==null) return null;int result = target.compareTo(r.data);if(result==0) return r;if(result<0) return find(r.left,target);return find(r.right,target);
} Giải thuật xóa.
Giả sử ta muốn xóa một nút có nhãn là x, ta tiến hành tìm kiếm trên cây bắt đầu tư nút
gốc: nếu nhãn x lớn hơn nhãn của nút gốc thì ta tìm sang cây con bên phải, ngược lại thì ta
sẽ tìm cây con bên trái. Nếu không tìm thấy thì giải thuật kết thúc.
Nếu tìm gặp thì có 3 trường hợp sau:
Nếu x là lá thì ta thay giá trị x bằng null.
Nếu x chỉ có một nút con thì ta thay giá trị x bằng nút con của nó.
Nếu x có 2 con thì ta thay giá trị x bằng nút lớn nhất trên cây con bên trái (nút
cực phải của cây trái) hoặc nút bé nhất trên cây con bên phải của giá trị x.
Private Node<E> remove(Node<E> r, Comparable<E> removeValue){if(r==null) return null;else if(removeValue.compareTo((E) r.info)<0){
r.left = remove(r.left, removeValue);return r;
}else if(removeValue.compareTo((E)r.info)>0){
r.right = remove(r.right, removeValue);return r;
}else if(r.left==null){
r=r.right;return r;
}else{Node<E> p = r.left;while(p.right!=null)
p=p.right;r.info = p.info;r.left = remove(r.left,p.info);return r;
}}
Trang 31
2.3.4. Phân tích đánh giá.
Tất cả các thao tác tìm kiếm, bổ sung, loại bỏ trên CNPTK đều có độ phức tạp trung
bình O(h), với h là chiều cao của cây.
Trong trường hợp tốt nhất, CNPTK có n nút sẽ có độ cao h = log2(n). Chi phí tìm
kiếm khi đó sẽ tương đương tìm kiếm nhị phân trên mảng có thứ tự.
Tuy nhiên, trong trường hợp xấu nhất, cây có thể bị suy biến thành 1 DSLK (khi mà
mỗi nút đều chỉ có một con trư nút lá). Lúc đó các thao tác trên sẽ có độ phức tạp O(n). Vì
vậy cần có cải tiến cấu trúc của CNPTK để đạt được chi phí cho các thao tác là log2(n).
2.4. Cây nhị phân cân bằng tìm kiếm.
2.4.1. Cây nhị phân cần bằng hoàn toàn.
2.4.1.1. Định nghĩa:
Cây cân bằng hoàn toàn là cây nhị phân tìm kiếm mà tại mỗi nút của nó, số nút của
cây con trái chênh lệch không quá một so với số nút của cây con phải.
2.4.1.2. Đánh giá:
Một cây rất khó đạt được trạng thái cân bằng hoàn toàn và cũng rất dễ mất cân bằng
vì khi thêm hay loại bỏ các nút trên cây có thể làm cây mất cân bằng (xác suất rất lớn), chi
phí cân bằng lại cây lớn vì phải thao tác trên toàn bộ cây. Tuy nhiên nếu cây cân đối thì việc
tìm kiếm sẽ nhanh. Đối với cây cân bằng hoàn toàn, trong trường hợp xấu nhất thì ta chỉ phải
tìm qua log2n phần tử (n là số nút trên cây).
Do CCBHT là một cấu trúc kém ổn định nên trong thực tế không thể sử dụng. Nhưng
ưu điểm của nó lại rất quan trọng. Vì vậy, cần đưa ra một CTDl khác có đặc tính giống
CCBHT nhưng ổn định hơn. Như vậy, cần tìm các tổ chức một cây đạt trạng thái cân bằng
yếu hơn và việc cân bằng lại chỉ xảy ra ở phạm vi cục bộ nhưng vẫn phải bảo đảm chi phí
cho thao tác tìm kiếm đạt ở mức O(log2n).
2.4.2.Cây nhị phân tự cân bằng (cây AVL).
Cây AVL được gọi theo tên của hai người đề xuất chúng, G.M. Adelson-
Velsky và E.M. Landis, được công bố trong bài báo của họ vào năm 1962: "An algorithm for
the organization of information." (Một thuật toán về tổ chức thông tin).
2.4.2.1. Định nghĩa:
Trang 32
Cây nhị phân tìm kiếm cân bằng là cây mà tại mỗi nút của nó độ cao của cây con trái
và của cây con phải chênh lệch không quá một.
Cây cân bằng hoàn toàn là cây AVL, nhưng cây AVL chưa chắc là cây cân bằng hoàn
toàn. Tính cân đối của cây AVL nhẹ hơn so với tính cân đối của cây nhị phân cân bằng hoàn
toàn.
2.4.2.3. Các thao tác trên cây AVL.
Các thao tác trên cây AVL bao gồm:
Giải thuật chèn.
Giải thuật xóa.
Khi chúng ta thực hiện chèn hay xóa thì chiều cao của cây sẽ mất cân bằng nên ta có
các phép quay cây để tạo lại cân bằng cho cây.
Quay đơn phải - phải (right - right)
Quay đơn trái - trái (left - left).
Quay kép trái - phải (left - right).
Quay kép phải - trái (right - left).
2.4.2.4. Cài đặt cây AVL.
Định nghĩa cây AVL.
public class AVLTree{private class AVLNode{
private int data;private AVLNode left, right;
} AVLNode root;}
Khởi tạo cây AVL.
public AVLNode(){ data = 0; left = right = null; }
Trang 33
public AVLNode(int x){ data = x; left = right = null; }
public AVLTree(){ root = null;
} Giải thuật tính chiều cao của cây.
publicint high(AVLNode T){if (T==null) return 0;return 1 + Math.max(high(T.left),high(T.right));
} Giải thuật tìm kiếm Node nhỏ nhất.
private Node findMin(Node t){if(t == null) return t;while(t.pLeft != null) t = t.pLeft;return t;
} Giải thuật chèn.
Việc đi theo đường tìm kiếm trên cây để thấy được khóa mới chưa có sẵn trên cây và
biết được "chỗ" để bổ sung nó vào, tất nhiên được thực hiện tương tự như việc bổ sung một
node vào trong cây nhị phân.
Khi chúng ta chèn một node trên cây AVL thì tính cân bằng sẽ bị phá vỡ, cần một
hoặc hai phép quay để tái cân bằng AVL, nên ta sẽ có thêm các giải thuật quay cây như sau:
Trường hợp 1(LL): Quay phải tại Node gốc.
Trang 34
public AVLNode qL(AVLNode T){ AVLNode x = T; AVLNode y = x.left; x.left = y.right; y.right = x;return y;
}Trường hợp 2 (LR): Trước hết thực hiện phép quay trái tại Node gốc của cây con
trái để đưa về TH1 (LL) sau đó thực hiện phép quay phải tại Node gốc cha.
public AVLNode qLR(AVLNode T){ AVLNode x = T; AVLNode y = x.right; AVLNode z = y.left; x.right = z.left; y.left = z.right; z.left = x; z.right = y;return z;
}Trường hợp 3(RR): Thực hiện phép quay trái tại Node gốc.
Trang 35
public AVLNode qR(AVLNode T){ AVLNode x = T; AVLNode y = x.right; x.right = y.left; y.left = x;return y;
}Trường hợp 4 (RL): Trước hết thực hiện phép quay phải tại Node gốc của cây con
trái để đưa về TH3 (RR) sau đó thực hiện phép quay trái tại Node gốc của cây.
public AVLNode qRL(AVLNode T){ AVLNode x = T; AVLNode y = x.left; AVLNode z = y.right; y.right = z.left; x.left = z.right; z.left = y; z.right = x;return z;
}
Tư các phép quay trên ta có giải thuật chèn như sau:
public AVLNode insert(int x, AVLNode T){if (T==null) T = new AVLNode(x);else{
if(T.data==x) System.out.println("Trung");else{
if (x<T.data) T.left = insert(x,T.left);else T.right = insert(x,T.right);int h1 = high(T.left);int h2 = high(T.right);if (Math.abs(h1-h2)>1)
Trang 36
if (h1>h2)if (high(T.left.left)>high(T.left.right)) qL(T);else qRL(T);
elseif (high(T.right.left)>high(T.right.right)) qR(T);else qLR(T);
return T;}
}}
Giải thuật xóa.
Loại bỏ giống như giải thuật loại bỏ của cây nhị phân, chỉ khác là sau khi loại bỏ cây
bị mất cân đối và phải tái cân đối bằng phép quay như đã làm khi bổ sung. Việc hủy 1 nút có
thể phải cân bằng dây chuyền các nút tư gốc cho đến phần tử bị hủy trong khi thêm vào chỉ
cần 1 lần cân bằng cục bộ.
private Node remove(int x, Node t){if(t == null) return t;if(x < t.number) t.pLeft = remove(x, t.pLeft);elseif(x > t.number) t.pRight = remove(x, t.pRight);else
if(t.pLeft != null&& t.pRight != null){t.number = findMin(t.pRight).number;t.pRight = remove(t.number, t.pRight);
}else t = (t.pLeft != null) ? t.pLeft : t.pRight;
if(getHeight(t.pLeft) - getHeight(t.pRight) > 1)if(getHeight(t.pLeft.pLeft) >= getHeight(t.pLeft.pRight)) t = qL(t);else t = qRL(t);
elseif(getHeight(t.pRight) - getHeight(t.pLeft) > 1)if(getHeight(t.pRight.pRight) >= getHeight(t.pRight.pLeft)) t = qR(t);else t = qLR(t);return t;
}
2.4.2.5. Đánh giá.
Cây nhị phân tìm kiếm mà luôn có dạng cân đối AVL, thì chi phí tìm kiếm đối với nó
ngay trong trường hợp xấu nhất vẫn là O(log2n).
Trang 37
Ta đã biết cây tìm kiếm nhị phân thông thường có những thuậ lợi lớn về mặt lưu trữ
và truy xuất dữ liệu trong phép toán tìm kiếm thêm vào hay loại bỏ một phần tử. Do đó, cây
tìm kiếm nhị phân xem ra là một cấu trúc lưu trữ dữ liệu tốt.
Tuy nhiên, trong một số trường hợp cây tìm kiếm nhị phân có một số hạn chế. Nó
hoạt động tốt nếu dữ liệu được chèn vào cây theo thứ tự ngẫu nhiên. Tuy nhiên, nếu dữ liệu
được chèn vào theo thứ tự được sắp xếp sẽ không hiệu quả. Khi các trị số cần chèn đã được
sắp xếp thì cây nhị phân trở nên không cân bằng. Khi cây không cân bằng, nó mất đi khả
năng tìm kiếm nhanh (hoặc chèn hoặc xóa) một phần tử đã cho.
Trang 38
CHƯƠNG 3. MÔ PHỎNG TRỰC QUAN CÁC PHÉP
TOÁN TRÊN HÀNG ĐỢI VÀ CÂY.
3.1. Phân tích và ý tưởng.
3.1.1. Phân tích.Chương trình mô phỏng tưng bước thực hiện một cách trực quan, sinh động, đồng
thời giúp người sử dụng dễ dàng hiểu được ý nghĩa của thuật toán (xuất hiện bên phải chương trình) và phần thông tin (ở góc phải chương trình), mở rộng tư duy trong việc học và dạy.
Mục tiêu: Mô phỏng các thuật toán cơ bản của hàng đợi và cây bằng đồ họa bao gồm: Array Queue. Linked Queue. Binary Tree. Binary Search Tree. Balance Binary Search Tree.Mục đích của chương trình này nhằm mô phỏng một cách đơn giản các thuật toán cơ
bản nên được viết bằng ngôn ngữ java trên nền eclipse. Qua đó, người dùng có thể tự thiết kế và cài đặt chương trình của mình tư các bước mô phỏng trực quan mà chương trình mẫu đang sử dụng đem lại.
Quá trình nhập dữ liệu được thêm nút “add random” để nhập dữ liệu ngẫu nhiên tư máy tính giúp người sử dụng nhanh chóng nhập dữ liệu hơn so với nhập tư bàn phím.
Thao tác trên hàng đợi và cây rất đơn giản. Người dùng chỉ cần nhấn vào diện tích mô phỏng thì sẽ hiện ra các thao tác có thể sử dụng, nhưng không được chạy cùng lúc các thao tác với nhau nhằm hạn chế lỗi có thể xảy ra và giúp việc quan sát tưng bước mô phỏng không bị gián đoạn.
Riêng đối với cây, chương trình được bổ sung thêm hai chức năng giúp việc mô phỏng được tối ưu hơn:
Chức năng vẽ lại vị trí mặc định tất cả các Node của cây hiện hành đồng thời dịch chuyển cây ở giữa màn hình mô phỏng (không thu nhỏ cây) giúp cho người dùng tiện lợi hơn khi muốn phóng to hay thu nhỏ khung chương trình.
Chức năng bật tắt địa chỉ các Node trên cây giúp người dùng tùy chỉnh việc bật tắt việc hiển thị địa chỉ các Node theo ý muốn (không thay đổi được địa chỉ các Node).
Trang 39
Khung hiển thị đồ họa
Thanh điều chỉnh tốc độNút Play/PauseNút Reset
Danh sách các dòng lệnh
Thông tin từng dòng lệnh
Các Menu chính
Hình 1: Giao diện Chương Trình
3.1.2.Ý tưởng.
3.2. Giao diện chính.
Gồm 3 phần chính:
jPanel hiển thị quá trình mô phỏng bằng giao diện.
jList hiển thị đoạn code đang được gọi và trỏ vào dòng lệnh đang thực hiện.
jTextArea hiển thị thông tin tại thời điểm câu lệnh thực hiện.
Trang 40
Hình 2: Giao diện của Queue cài đặt bằng mãng.
Hình 3: Quá trình Push giá trị vào Array Queue
Trang 41
Hình 4: Giao diện của Queue cài đặt bằng LinkedList.
Hình 5: Giao diện của Cây nhị phân
Trang 42
Hình 6: Phép tìm kiếm trong Cây nhị phân tìm kiếm
Trang 43
Hình 7: Quá trình Xoay Cây trong Cây nhị phân tìm kiếm tự cân bằng
Các thao tác khi thực hiện trên cây
Thêm (Add) thêm tư bàn phím (Add number(s)). thêm ngẫu nhiên (Add random).
Tìm kiếm một node (Find value). Duyệt cây (Traveral).
Duyệt trước (PreOder). Duyệt giữa (InOrder). Duyệt sau (PostOder). Duyệt theo mức (LevelOrder).
Xóa Node (Delete). Vẽ lại vị trí của cây (Repaint Location). Hiển thị địa chỉ node và ẩn địa chỉ node (Show address/ Hide address).
Trang 44
KẾT LUẬN1. Ưu điểm.
Giao diện dễ sử dụng. Người học có thể tiếp thu một cách nhanh chóng các tư
tưởng của giải thuật.
Phần lớn là tiếng Việt.
Phần mềm mô phỏng đã cho người dùng thấy được tổng quan về giải thuật của
cây và hàng đợi.
2. Nhược điểm.
Giao diện đồ họa chưa thực sự hấp dẫn.
Chương trình chỉ thực hiện mô phỏng, chưa có các ứng dụng thực tế.
3. Hướng phát triển.
Cải tiến giao diện phần mềm.
Thêm các chức năng khác hỗ trợ việc dạy như làm bài tập, mini game.
Trang 45
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN..........................................................................................................................................................................................................................................................................................................
Trang 46
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
.....................................................................................................................................................
Trang 47