1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo môn cấu trúc dữ liệu và giải thuật đề tài xây dựng lớp tìm kiếm cây nhị phân áp dụng quản lí từ điển anh – việt

17 1 0

Đ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

Tiêu đề Xây dựng lớp tìm kiếm cây nhị phân áp dụng quản lý từ điển anh – việt
Tác giả Nguyễn Thị Thùy Dương, Hoàng Dương
Người hướng dẫn Nguyễn Việt Hưng
Trường học Trường Đại Học Giao Thông Vận Tải
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Báo cáo môn
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 17
Dung lượng 1,96 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong cây nhị phân tìm kiếm thì phần tử nhỏ hơn nút gốc thì sẽ được chứa trong cây con trái, phần tử lớn hơn nút gốc sẽ được chứa trong cây con phải.. Trong đề tài này, chúng ta sẽ tìm h

Trang 1

22:54 06/06/2023 Documents Downloader

 

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI

Khoa Công nghệ thông tin -  

-BÁO CÁO MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

ĐỀ TÀI:

XÂY DỰNG LỚP TÌM KIẾM CÂY NHỊ PHÂN ÁP DỤNG QUẢN LÍ TỪ 

ĐIỂN ANH – VIỆT

Giáo viên hướng dẫn: Nguyễn Việt Hưng Nhóm sinh viên thực hiện:

1 Nguyễn Thị Thùy Dương – MSV: 211203480

2 Hoàng Dương – MSV: 211211444

Trang 2

22:54 06/06/2023 Documents Downloader

Trang 3

22:54 06/06/2023 Documents Downloader

 

Lời mở đầu

Cây tìm kiếm nhị phân (Binary Tree) trong C++ là một cấu trúc dữ liệu dựa trên các nút, mỗi nút gồm 2 cây con được gọi là cây con trái và cây con  phải Trong cây nhị phân tìm kiếm thì phần tử nhỏ hơn nút gốc thì sẽ được chứa trong cây con trái, phần tử lớn hơn nút gốc sẽ được chứa trong cây con phải Vì vậy khi tìm kiếm một phần tử trong cây nhị phân chúng ta sẽ bỏ qua một nửa tổng sổ phần tử, do đó dẫn đến thời gian tìm kiếm nhanh hơn và độ phức tạp về thời gian tốt hơn với độ phức tạp O(logn)

Trong đề tài này, chúng ta sẽ tìm hiểu cách xây dựng một lớp cây nhị  phân tìm kiếm sau đó áp dụng vào quả lí từ điển với các chức năng thêm, sửa, xóa

Trang 4

22:54 06/06/2023 Documents Downloader

 

Mục lục

Lời mở đầu 1

Mục lục 2

I Giới thiệu đề tài 3

1 Giới thiệu 3

2 Mục tiêu 3

II Xây dựng đề tài 4

1 Xây dựng lớp Data 4

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

3 Thêm một từ vào trong cây 6

4 Đọc - ghi file 6

5 Cập nhật một từ trong từ điển 9

6 Tìm kiếm một từ trong cây 10

7 Xóa một từ trong cây 11

III Kết luận 14

Tài liệu tham khảo 15

Trang 5

22:54 06/06/2023 Documents Downloader

 

I Giới thiệu đề tài

1 Giới thiệu

Từ điển là một kho dữ liệu chứ đến hàng trăm, hàng nghìn, thậm chí là hàng trăm nghìn, hàng triệu từ, vì vậy khi chúng ta muốn tìm kiếm một từ hoặc nghĩa của từ đó sẽ tốn khá nhiều thời gian và công sức Để cải thiện chúng ta sử dụng cây tìm kiếm nhị phân vào cài đặt từ điển sẽ tối ưu được thời gian tìm kiếm và sẽ tìm kiếm được nhanh hơn Trong đề tài này chúng ta sẽ sử dụng cây tìm kiếm nhi phân để cài đặt một file dữ liệu từ điển Anh-Việt để phục vụ thực hện các thao tác: thêm từ vào cây, duyệt cây, xóa từ trong cây, cập nhật từ, tìm kiếm

2 Mục tiêu

Dựa trên những yêu cầu của đề bài, các mục tiêu của đề tài hướng đến:

1.1 Xây dựng lớp tìm kiếm cây nhị phân 1.2 Viết chương trình quản lí từ điển Anh – Việt, từ điển được lưu vào cây nhị phân mà tại mỗi nút của nó lưu một từ tiếng Anh và nghĩa tiếng Việt của nó có các chức năng:

a Đọc từ điển từ file để xây dựng cây

 b Ghi từ điển trong cây vào file (duyệt theo thứ tự giữa, duyệt đến nút nào ghi vào file giá trị của nút đó)

c Thêm một từ mới vào từ điển đang lưu trong cây

d Xóa bỏ một từ trong từ điển đang lưu trong cây

e Cập nhật lại một từ đang lưu trong cây

f Tìm kiếm một từ đang lưu trong cây

Trang 6

22:54 06/06/2023 Documents Downloader

 

II Xây dựng đề tài

1 Xây dựng lớp Data

 Hình 1: Cấu trúc của lớp Data

Trong lớp dữ liệu Data chúng ta gồm có:

+ string tu: khai báo kiểu dữ liệu cho từ tiếng Anh

+ string nghia: khai báo liểu dữ liệu cho nghĩa tiêng Việt tương ứng của từ

Trang 7

22:54 06/06/2023 Documents Downloader

 

+ Có các phương thức nhập >> và xuất <<

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

- Mỗi cây nhị phân phải đam bảo nguyên tắc bố trí khóa tại mỗi nút:

+ Các nút nhỏ hơn nút gốc thì được bố trí tại cây con trái

+ Các nút lớn hơn nút gốc thì được bố trí tại cây con phải

- Lớp cây nhị phân tìm kiếm của chúng ta là BTree chứa dữ liệu, một con trỏ trái và một con trỏ phải

 Hình 2: Cấu trúc 1 node của cây nhị phân tìm kiếm

- Thuộc tính:

+ Dữ liệu của lớp Data: là phần dữ liệu cho vào các nút cảu cây

+ BTree *left: là con trỏ trỏ đến node lưu trữ địa chỉ của cây con trái

+ BTree *right: là con trỏ trỏ đến node lưu trữ địa chỉ của cây con phải

- Phương thức:

+ BTree(): hàm khởi tạo cây con trái, cây con phải

Trang 8

22:54 06/06/2023 Documents Downloader

 

+ BTree(Data x): hàm khởi tạo node gốc khi cây rỗng

3 Thêm một từ vào trong cây

nếu node được thêm vào bé hơn node gốc thì chúng ta sẽ thêm node đó vào cây con trái, nếu node được thêm vào lớn hơn node gốc thì chúng ta sẽ thêm node

đó vào cây con phải

Thực hiện thuật toán:

 Hình 3: Hàm thêm một phần tử vào cây

Đầu tiên chúng ta sẽ kiểm tra xem nếu cây rỗng thì sẽ trả về hàm khởi tạo node

thêm vào cây con trái, còn nếu node được thêm vào lớn hơn node gốc thì ta sẽ

4 Đọc - ghi file

Để đọc – ghi file trong C++ ta sử dụng cú pháp: ifstream và ofstream trong đó:

+ ofstream dùng để ghi file

Trang 9

22:54 06/06/2023 Documents Downloader

 

Đối với yêu cầu đọc file (txt) để xây dựng cây trước tiên chúng ta có cấu trúc file như sau:

 Hình 4: Cấu trúc file txt 

 Hình 5: Đọc file xây dựng cây

Tiếp đó, chúng ta khởi tạo một biến in để đọc file tudien.txt bằng cách sử dụng

Trang 10

22:54 06/06/2023 Documents Downloader

 

đang mở hay không, nếu file đang được mở chúng ta sẽ sử dụng vòng lặp

số lượng từ cho trước và khi đọc đến từ nào thì chúng ta sẽ gọi lại hàm insert và

cây

Đối với yêu cầu ghi file thì trước tiên chúng ta khởi tạo một file txt có tên

 Hình 6-1: Duyệt cây – ghi file

được ghi trước đó Đầu tiên, chúng ta sẽ kiểm tra xem cây có rỗng hay không, nếu không thì chúng ta sẽ duyệt cây con trái của node gốc trước tiên, sau khi duyệt hết thì in ra dữ liệu của node rồi sau đó duyệt sang cây con phải Đây là  phương pháp duyệt giữa

Sau khi thực hiện duyệt cây theo duyệt giữa và ghi file ta sẽ có được một file sau khi ghi có cấu trúc như sau:

Trang 11

22:54 06/06/2023 Documents Downloader

 

 Hình 6-2: Cấu trúc của file sau khi duyệt và ghi

5 Cập nhật một từ trong từ điển

node của cây đến khi tìm ra node cần cập nhật, nếu tìm thấy thì chúng ta sẽ cho

cây

Thực hiện thuật toán:

 Hình 5-1: Hàm cập nhật 1 từ trong từ điển

Đầu tiên chúng ta kiểm tra xem nếu cây rỗng thì thoát khỏi hàm Tiếp đó, kiểm tra xem nếu phần tử cần cập nhật nhỏ hơn node gốc thì chúng ta gọi đệ quy lại hàm và duyệt sang cây con trái, nếu phần tử cần cập nhật lớn hơn node gốc thì chúng ta gọi đệ quy lại hàm và duyệt sang cây con phải Nếu chúng ta tìm thấy

Trang 12

22:54 06/06/2023 Documents Downloader

 

và thoát khỏi hàm

 Hình 5-2: Thực thi hàm cập nhật 

cần cập nhật Ngược lại, thì tìm thấy chúng ta sẽ nhập vào sự thay đổi của từ và duyệt lại cây để cập nhật lại sự thay đổi của từ điển

6 Tìm kiếm một từ trong cây

của cây, nếu tìm thấy node cần tìm thì cho biếnck = 1 rồi in ra từ cần tìm

Thực hiện thuật toán:

 Hình 6-1: Hàm tìm kiếm một từ trong cây

Trang 13

22:54 06/06/2023 Documents Downloader

 

Đầu tiên chúng ta sẽ kiểm tra xem cây có rỗng hay không nếu câu rỗng thì thoát khỏi hàm Nếu không thì chúng ta sẽ so sánh từ cần tìm với node gốc nếu từ cần tìm nhỏ hơn node gốc thì gọi đệ quy lại hàm duyệt sang cây con trái, nếu từ cần tìm lớn hơn node gốc thì gọi đệ quy lại hàm duyệt sang cây con phải Nếu tìm

 Hình 6-2: Thực thi hàm tìm kiếm

ta sẽ in ra từ cần tìm

7 Xóa một từ trong cây

Ý tưởng: khi xóa 1 node trong cây sẽ có 3 trường hợp xảy ra:

+ Xóa node lá + Xóa node có 1 cây con: tìm mối liên kết của node cha của node cần xóa với node con của node cần xóa

+ Xóa node có 2 cây con: tìm node nhỏ nhất của cây con phải hoặc node lớn nhất của cây con trái để làm node thay thế node bị xóa liên kết hai cây con của node bị xóa

Thực hiện thuật toán:

Trang 14

22:54 06/06/2023 Documents Downloader

 

 Hình 7-1: Hàm tìm node thay thế 

xuống để tìm ra node thay thế rồi trả về giá trị của noderes

Hình 7-2: Hàm xóa một node trong cây

Trang 15

22:54 06/06/2023 Documents Downloader

 

Đầu kiểm kiểm tra xem nếu cây rỗng thì trả về giá trị của node gốc Nếu không thì chúng ta so sánh từ cần xóa với node gốc nếu từ cần xóa nhỏ hơn node gốc thì gọi đệ quy lại hàm và duyệt sang trái, nếu từ cần xóa lớn hơn node gốc thì gọi đệ quy lại hàm và duyệt sang phải Khi tìm thấy từu cần xóa chúng ta sẽ kiểm tra xem nếu từ cần xóa không có cây con trái thì ta cần tìm mối liên hệ của node con node cần xóa với node cha của node cần xóa Ta sẽ gán dữ liệu ở cây

xóa không có cây con phải Nếu node cần xóa có hai cây con thì chúng ta cần tìm ra tìm node nhỏ nhất của cây con phải hoặc node lớn nhất của cây con trái

node nhỏ nhất ở cây con phải sau đó sao chép dữ liệu của node kế nhiệm vào node này rồi xóa node kế nhiệm

 Hình 7-3: Thực thi hàm xóa một node

trong cây

Trang 16

22:54 06/06/2023 Documents Downloader

 

III Kết luận

Sau đề tài này chúng ta đã tìm hiểu rõ hơn về cây nhị phân tìm kiếm cúng như cách nó hoạt động với các phương thức: thêm, sửa, xóa, duyệt cây, Đặc  biệt là đã áp dụng nó vào quản lí một từ điển Anh – Việt bằng một cây nhị phân tìm kiếm Tuy nhiên, vẫn còn một số phương thức chưa được cài đặt, code vẫn chưa được tối ưu hoàn toàn trong phần đề tài này Tuy vây, nhưng cũng phần nào thể hiện rõ được cách thức hoạt động của một cây nhị phân tìm kiếm

Trang 17

22:54 06/06/2023 Documents Downloader

 

Tài liệu tham khảo

[1] Slide bài giảng môn Cấu trúc dữ liệu và giải thuật của thầy Nguyễn Việt Hưng

Ngày đăng: 06/06/2023, 22:54

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w