1. Trang chủ
  2. » Luận Văn - Báo Cáo

CÂY NHỊ PHÂN TÌM KIẾM

20 2K 5
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 1,33 MB

Nội dung

Dựa vào giá trị khoá 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ị khoá là V, nút gốc của cây có giá trị khoá là N

Trang 1

MỤC LỤC

PHẦN MỞ ĐẦU 3

Lý do chọn đề tài 3

PHẦN 1: LÝ THUYẾT 4

I CÂY NHỊ PHÂN TÌM KIẾM 4

1.1 Định nghĩa và các khái niệm về cây nhị phân 4

1.2 Cây nhị phân tìm kiếm 4

a Định nghĩa và tính chất 4

b.Giải thuật tìm kiếm 5

c Giải thuật bổ sung 5

d Giải thuật loại bỏ 6

f Phân tích đánh giá 6

II CÂY NHỊ PHÂN CÂN BẰNG 7

2.1 Cây nhị phân cân bằng hoàn toàn (CCBHT) 7

a Định nghĩa: 7

b Đánh giá: 7

2.2 Cây nhị phân tự cân bằng (AVL) 7

a Định nghĩa 7

b Các trường hợp gây mất cân bằng trên cây AVL 8

b Giải thuật bổ sung trên cây AVL 9

c Giải thuật loại bỏ trên cây AVL 11

d Đánh giá 11

PHẦN 2: MÔ PHỎNG 11

I LÝ THUYẾT MÔ PHỎNG 11

1.1 Định nghĩa mô phỏng thuật toán 11

1.2 Mục đích của mô phỏng thuật toán 12

1.3 Yêu cầu về mô phỏng thuật toán 12

Trang 2

a Phản ánh đúng nội dung của thuật toán 12

b Có thể thực hiện giải thuật theo từng bước 1 để theo dõi giá trị của các biến và các đối tương trong bài toán 12

c Có hình ảnh động (có thể có âm thanh khi cần) để mô tả trực tiếp quá trình thi hành của thuật toán 12

d Có thể kiểm định thuật toán trong trường hợp ngẫu nhiên, trường hợp xấu nhất, trường hợp tốt nhất 13

e Tạo mức độ sử dụng khác nhau cho người học 13

II PHÂN TÍCH THIẾT KẾ 13

2.1 Cấu trúc dữ liệu lưu trữ 13

a Ngôn ngữ lập trình được sử dụng 13

b.Phân tích giải thuật đưa ra cấu trúc dữ liệu 14

2.2 Xây dựng mô hình mô phỏng dữ liệu vào và dữ liệu ra 17

a.Vậy chúng ta phải xây dựng 3 mẫu dữ liệu vào: 18

b.Xây dựng mẫu dữ liệu ra: 18

2.3 Sản phẩm mẫu 20

2.4 Đánh gía và ý tưởng phát triển 20

TÀI LIỆU THAM KHẢO 21

Trang 3

LÝ THUYẾT VÀ MÔ PHỎNG CÂY AVL

PHẦN 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ây AVL là loại cây nhị phân tự cân bằng, là một loại cấu trúc dữ liệu được ứng dụng rất nhiều trong công việc tìm kiếm Cây nhị phân tìm kiếm với ưu điểm thực hiện dễ dàng phép bổ sung và loại bỏ đã tỏ ra là khá thuận tiện trong việc xử lý các bảng biến động Tuy nhiên nếu cây phát triển tự nhiên thì khuynh hướng suy biến có thể xuất hiện và điều đó làm cho người dùng lo ngại Còn nếu muốn luôn đạt được chi phí tối thiểu thì đòi hỏi cây phải luôn được “cân đối” (Như cây nhị phân hoàn chỉnh và cây nhị phân gần đầy) Nhưng như ta đã biết, việc sửa lại cây cho cân đối nếu tiến hành thường xuyên sẽ gây tổn phí khá nhiều thời gian và công sức Vì vậy cần phải đi tới một giải pháp dung hoà: Giảm bớit sự chặt chẽ của tính “cân đối”

để tránh được khả năng suy biến của cây Năm 1962 P.M Adelson – Velski – EM Landis đã mở đầu phương hướng giải quyết này bằng cách đưa ra một dạng cây cân đối mới mà sau này được mang tên họ, đó là cây nhị phân tìm kiếm cân đối AVL Tính ứng dụng của cây AVL là rất lớn, nhưng trong chương trình chúng ta chưa được học, nên em mong muốn làm mô phỏng giải thuật về cây AVL để người học có thể nắm được loại cấu trúc dữ liệu này và áp dụng nó trong việc giải quyết các bài toán của mình.

Trang 4

PHẦN 1: LÝ THUYẾT

I CÂY NHỊ PHÂN TÌM KIẾM

1.1 Định nghĩa và các khái niệm về cây nhị phân

Cây nhị phân là cây mà các nút chỉ có tối đa 2 con Đối với cây con có một nút thì người ta phân biệt cây con trái và cây con phải Vì vây cây nhị phân là cây có thứ tự

Số nút ở mức i <= 2i

Số nút ở mức lá <= 2h-1, với h là chiều cao của cây

Chiều cao của cây h >= log2(số nút trong cây)

Số nút trong cây <= 2h-1

Hình ảnh cây nhị phân:

1.2 Cây nhị phân tìm kiếm

a Định nghĩa và tính chấtCâ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ác nút thuộc cây con phải

Dưới đây là một ví dụ về cây nhị phân tìm kiếm:

Trang 5

Nhờ ràng buộc về khóa trên CNPTK, việc tìm kiếm trở nên có định hướng Hơn nữa, do cấu trúc cây việc tìm kiếm trở nên nhanh đáng kể Nếu số nút trên cây là N thì chi phí tìm kiếm trung bình chỉ khoảng log2N Trong thực tế, khi xét đến cây nhị phân chủ yếu người ta xét CNPTK

b.Giải thuật tìm kiếm

Giả sử, ta muốn biết liệu trên cây tìm kiếm nhị phân có nút nào chứa khoá K hay không Ta sẽ bắt đầu duyệt từ nút gốc của cây (Nút gốc có khoá N) Nếu K > N, thì chuyển sang nhánh phải và tiếp tục quá trình so sánh Nếu K < N, thì chuyển sang nhánh trái và tiếp tục quá trình so sánh Quá trình tìm kiếm sẽ dừng lại, khi xảy ra một trong hai trường hợp sau:

K = N Tức là tìm thấy nút có giá trị khoá bằng K

Con trỏ trỏ đến Null Tức là, trên cây tìm kiếm nhị phân không có nút nào có giá trị khoá bằng K

c Giải thuật bổ sung

Dựa vào giá trị khoá 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ị khoá là V, nút gốc của cây có giá trị khoá 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

Trang 6

Con trỏ trỏ đến Null Tức là ta đã tìm đến vị trí chính xác cho nút mới.

d Giải thuật loại bỏ

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 sang 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 x bằng Nil

Nếu x chỉ có một nút con thì ta thay x bằng nút con của nó

Nếu x có 2 con thì ta thay 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 x (nút cực trái của cây phải)

f 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 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ó 1 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)

II CÂY NHỊ PHÂN CÂN BẰNG

2.1 Cây nhị phân cân bằng hoàn toàn (CCBHT)

a Đị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

Trang 7

b Đá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 hủy 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 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ách 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(log2 n)

2.2 Cây nhị phân tự cân bằng (AVL)

a Định nghĩa

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

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)

Từ khi được giới thiệu, cây AVL đã nhanh chóng tìm thấy ứng dụng trong nhiều bài toán khác nhau Vì vậy, nó mau chóng trở nên thịnh hành và thu hút nhiều nghiên cứu Từ cây AVL, người ta đã phát triển thêm nhiều loại CTDL hữu dụng khác như cây đỏ-đen (Red-Black Tree), B-Tree, …

b Các trường hợp gây mất cân bằng trên cây AVL

Trường hợp 1: Cây lệch trái:

Trang 8

Trường hợp 2: Cây lệch phải:

Ta có thể thấy rằng các trường hợp lệch về bên phải hoàn toàn đối xứng với các trường hợp lệch về bên trái Vì vậy ta chỉ cần khảo sát trường hợp lệch về bên trái

TH1

Trang 9

TH3

b Giải thuật bổ sung trên cây AVL

Việc đi theo đường tìm kiếm trên cây để thấy được khoá 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 Sau khi node mới được bổ sung, có ba tình huống có thể xảy ra với các node tiền bối của nó Để tiện trình bày, ta giả sử phép bổ sung được thực hiện vào phía trái

Như vậy ba tình huống đó có thể nêu cụ thể như sau:

Tình huống 1: Cây con phải đã cao hơn 1 (lệch phải) sau phép bổ sung chiều cao

hai cây con bằng nhau Trường hợp này ta chỉ cần chỉnh lại hệ số cân bằng tại nút đang xét

Tình huống 2: Chiều cao của hai cây con vốn đã bằng nhau, sau phép bổ sung cây

con trái cao hơn 1 (lệch trái) Trường hợp này chiều cao của cây gốc là node đang xét bị

Trang 10

thay đổi, nên không chỉ phải chỉnh lý hệ số cân đối nút đang xét mà còn phải chỉnh lý hệ số cân đối ở các node tiền bối của nó

Tình huống 3: Cây con trái đã cao hơn 1 (lệch trái), sau phép bổ sung nó cao hơn 2:

tính “cân bằng AVL” bị phá vỡ vậy ta phải cân bằng lại bằng phép xoay.Có hai trường hợp phải xử lý khác nhau:

TH1: Node mới bổ sung làm tăng chiều cao cây con trái của node con trái node bất

thường Tái cân bằng giống như trong trương hợp 1

TH2: Node mới bổ sung làm tăng chiều cao cây con phải của node con trái node bất

thường Tái cân bằng giống như tring tường hợp 3

c Giải thuật loại bỏ trên cây AVL

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 huỷ 1

Trang 11

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ị huỷ trong khi thêm vào chỉ cần 1 lần cân bằng cục bộ

d Đánh giá

Cây cân bằng có CTDL ổn định hơn hẳn CCBHT vì chỉ khi thêm hủy làm cây thay đổi chiều cao các trường hợp mất cân bằng mới có khả năng xảy ra

Cây AVL với chiều cao được khống chế sẽ cho phép thực thi các thao tác tìm thêm hủy với chi phí O (log2(n)) và bảo đảm không suy biến thành O(n)

PHẦN 2: MÔ PHỎNG

I LÝ THUYẾT MÔ PHỎNG

1.1 Định nghĩa mô phỏng thuật toán

Mô phỏng thuật toán là quá trình tách dữ liệu, thao tác và tạo giao diện đồ hoạ mô phỏng cho quá trình đó

1.2 Mục đích của mô phỏng thuật toán

Mô phỏng thuật toán sử dụng đồ hoạ để mô tả các cấu trúc dữ liệu bên trong của thuật toán được thực hiện trong chương trình và biểu diễn sự thay đổi của các cấu trúc dữ liệu trong mỗi trạng thái thực thi và các hoạt động của chương trình Trong suốt quá trình

mô tả, người sử dụng có thể thấy từng bước thực hiện của chương trình và có thể thấy được những chi tiết nhỏ của thuật toán và hiểu sâu hơn về nó Vì thế, mô phỏng thuật toán giúp cho người sử dụng hiểu thuật toán

Trong quá trình mô phỏng, người sử dụng có thể thấy chương trình của họ được thi hành như thế nào, đánh giá sự thay đổi của dữ liệu qua mỗi bước và nó sẽ ảnh hưởng đến bước tiếp theo như thế nào Nó giúp người sử dụng phát hiện ra lỗi của chương trình (nếu có), Từ đó có thể tìm ra lỗi và sửa lại chương trình để nó chạy chính xác và ổn định hơn

Trang 12

1.3 Yêu cầu về mô phỏng thuật toán

a Phản ánh đúng nội dung của thuật toán

Thuật toán được mô phỏng phải chính xác, các bước của thuật toán phải trực quan

và phản ánh đứng nội dung của thuật toán để thể hiện tính đúng đắn của thuật toán

b Có thể thực hiện giải thuật theo từng bước 1 để theo dõi giá trị của các biến và các đối tương trong bài toán

Quá trình mô phỏng có thể diễn ra liên tục, biểu diễn thuật toán từ đầu đến cuối Tuy nhiên, trong quá trình mô phỏng thuật toán chúng ta đều có nhu cầu theo dõi các bước của giải thuật xem nó chạy đúng hay chưa, các biến và các đối tượng thay đổi như thế nào

Do đó trong khi thiết kế giải thuật chương trình cần phải có nút tạm dừng để dừng chương trình và nút tiếp tục để tiếp tục quá trình mô phỏng

c Có hình ảnh động (có thể có âm thanh khi cần) để mô tả trực tiếp quá trình thi hành của thuật toán.

Quá trình mô tả trực quan quá trình thì hành của thuật toán là để biết bản chất bên trong của vấn đề là gì, điều này đồng nghĩa với việc phải có hình ảnh động để mô tả thuật toán hoạt động như thế nào, các biến thay đổi ra sao từ đó mới kích thích tư duy sáng tạo của học sinh và thu hút sự chú ý của người học Bên cạnh đó để cho quá trình mô phỏng thêm sinh động chúng ta có thể chèn thêm âm thanh vào phần mềm, có các nút chỉnh âm thanh để lúc nào cần chúng ta có thể bật hay tắt một cách chủ động

d Có thể kiểm định thuật toán trong trường hợp ngẫu nhiên, trường hợp xấu nhất, trường hợp tốt nhất.

Để kiểm định thuật toán thì ta phải thử với các bộ dữ liệu vào ngẫu nhiên hoặc các

bộ dữ liệu mẫu hoặc các bộ dữ liệu do người dùng nhập vào Nếu kết quả chạy chương trình vẫn ổn định và thuật toán vẫn đúng đắn thì khi đó chương trình mới được đánh giá cao

e Tạo mức độ sử dụng khác nhau cho người học

Do đối tượng người học có trình độ nhận thức khác nhau (tốt, khá, trung bình, yếu)

Để tạo mức độ sử dụng khác nhau cho người học, trong chương trình thiết kế mô

Trang 13

phỏng cần đặt thời gian để chạy chương trình (nhanh, trung bình, chậm) để phủ hợp với sự theo dõi và tiếp thu giải thuật của từng đối tượng người học

II PHÂN TÍCH THIẾT KẾ

2.1 Cấu trúc dữ liệu lưu trữ

a Ngôn ngữ lập trình được sử dụng

Visual FoxPro là một trong các ngôn ngữ lập trình quản trị dữ liệu lâu đời, ngoài ra Visual FoxPro còn là một ngôn ngữ lập trình hướng đối tượng Nó có khả năng tạo ra các lớp đối tượng, điều khiển chương trình thông qua các tác vụ của đối tượng Đối tượng mà Visual FoxPro tạo ra đa dạng, phong phú, có thể chứa các hình ảnh sống động, rất thích hợp cho việc mô phỏng thuật toán Là một ngôn ngữ lập trình phù hợp cho việc tạo ra các phần mềm dạy học

b.Phân tích giải thuật đưa ra cấu trúc dữ liệu

Cây AVL được cài đặt bằng con trỏ Mỗi nút của cây là một đối tượng có tên là

NODE gồm Các thuộc tính sau:

Value_n Giá trị của Node Child_l Con trái của node

Trong trường hợp node không có con trái, hoặc không có con phải thì thuộc tính

Child_l, Child_r sẽ trỏ đến NULL

Vấn đề đặt ra: là làm thế nào để hiển thị được một cây nhị phân cân đối, phù hợp với kích thước của Form Vì vậy ta sẽ sử dụng cách duyệt sau Tức là sẽ tính toạ độ của các con trước, toạ độ của node sẽ được tính như sau: node.x = (node.child_l.x + node.child_r.y)/2; node.y = node.child_l.y – dy(dy: chính là khoảng cách giữa node và

hai con của nó) Các node là là thì cách nhau một khoảng là dx Nhưng cách tính toạ độ

Ngày đăng: 25/04/2013, 13:00

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1].Thầy: Đỗ Xuân Lôi: “Cấu trúc dữ liệu và giải thuật”.Nhà xuất bản đại học quốc gia Hà Nội 1993 Sách, tạp chí
Tiêu đề: Cấu trúc dữ liệu và giải thuật
Nhà XB: Nhà xuất bản đại học quốc gia HàNội 1993
[2]. Thầy: Nguyễn Xuân Huy: “Thuật toán”. Nhà xuất bản thống kê – 1998 Sách, tạp chí
Tiêu đề: Thuật toán
Nhà XB: Nhà xuất bản thống kê – 1998
[3]. Cô: Trần Hạnh Nhi: “Cấu trúc dữ liệu”. Trung tâm phát triển công nghệ thông tin, chương trình đào tạo từ xa Sách, tạp chí
Tiêu đề: Cấu trúc dữ liệu
[5]. Thầy: Nguyễn Hữu Dung: “Lập trình hướng đối tượng trong Visual Foxpro”. Trường đại học Sư phạm Hà Nội Sách, tạp chí
Tiêu đề: Lập trình hướng đối tượng trong Visual Foxpro
[6] Thầy: Nguyễn Ngọc Minh: “Visual FoxPro 6.0” Nhà xuất bản Lao động – xã hội Sách, tạp chí
Tiêu đề: Visual FoxPro 6.0
Nhà XB: Nhà xuất bản Lao động – xã hội

HÌNH ẢNH LIÊN QUAN

Hình ảnh cây nhị phân: - CÂY NHỊ PHÂN TÌM KIẾM
nh ảnh cây nhị phân: (Trang 4)
Hình ảnh của form chính - CÂY NHỊ PHÂN TÌM KIẾM
nh ảnh của form chính (Trang 19)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w