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

Bài tập nhóm môn giải thuật ứng dụng trong kinh doanh

51 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
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 51
Dung lượng 4,55 MB

Nội dung

+* Độ phức tạp thời gian: Olog n hoặc On ® Trường hợp tốt nhất và trung bình OIog n: hàm INSERTNODE cần thực hiện tối đa logn phép so sánh để tìm vị trí thích hợp cho nođe mới trong cây

Trang 1

NGAN HANG NHA NUOC VIET NAM BO GIAO DUC VA DAO TAO

TRƯỜNG ĐẠI HỌC NGÂN HANG THANH PHO HO CHi MINH

5 a `

"1

BÀI TẬP NHÓM MÔN: GIẢI THUẬT ỨNG DỤNG TRONG KINH DOANH

GVHD: NGUYÊN VĂN THỌ LOP HOC PHAN: L16 NHOM THUC HIEN: NHOM 6

TP HO CHi MINH NAM 2024

Trang 2

THÀNH

Phạm Quang Duy 050610220871

Thực hiện phân IV chương l; lý do chọn

dé tai, cam nhận và

kết luận

100%

Vũ An Thanh 050610220537 Thực hiện phần III

chuong I; ly do chon

dé tai, cam nhận và

Trang 3

MUC LUC

LY DO CHỌN ĐÈ TÀI :- 222222 2222221111222211121122T 111 1 1 re 2

Chương I Chức năng và mục tiêu của giải thuật 2221222222122 2212211111 e He 3 I._ Chức năng nhập danh sách sinh viên 2211211121221 11111181251 112 t5 khe re, 3

1 Hàm nhập tat cả thông tin của sinh viên 5 s nS2E211 1102111 1 1 Hye 3

2 Hàm nhập thông tin và thêm vào cây T Q1 0011221 12211211 2152221201111 1 HE ckkrch 7 IL_ Chức năng xuất đanh sách sinh viên St St ề 221271 E1 1121172111111 11 1H tre 9

2 Duyệt cây theo LNR để chạy danh sách tăng đần: - ST nề EEEEH He ra mưu 10

II Chức năng thêm sinh viên mới vào danh Sachi ccc ce 221222222 2212211113 rrrky 14

IV Chức năng xóa sinh viên ra khỏi danh sách dựa trên mã sinh viên - 17 Hình 5 Sơ đồ khối xóa một nút từ cây nhị phân tìm kiếm dựa trên mã sinh viên 17 V Chức năng tìm một sinh viên theo mã sinh viÊn 2 22 222212112221 12 12221113 rsey 20

VI Chức năng cập nhật thông tin: Mã sinh viên, Tên sinh viên, điểm môn học GTUD (Dùng cho cả case a, case Db, cas€ C, CAS€ ỞỈ) Q.00 0220212112 HH 11111811111 1k1 23 Chương 2 Thuật toán câu trúc rẽ nhánh trong thiết lập menu - - 2 2S SE SE rxcree 28 Chương 3 Cảm nhận về môn Giải thuật ứng dụng trong kinh doanh - 25s sccseczs¿ 4I

-e2000/) 0308 42

Trang 4

DANH MUC HiNH ANH

Sơ đồ khối của hàm nhập tat cả théng tin cla sinh Vi6I ec cee ceccseeeseeeeeteseeesteeeeeeeees 5

Sơ đồ khối của hàm nhập thông tin va thém vao Cy Toowcececcccecescescseseeseseeeseeeeeseeees 9

Sơ đồ khối duyệt cây theo LNR đề chạy sanh sách tăng dần 5 sec 13

Sơ đồ khối hàm nhập danh sách sinh viên 5-5 SE E221 1211112211 ekrte 16

Sơ đồ khối xóa một nút từ cây nhị phân tìm kiếm dựa trên mã sinh viên - 19

Sơ đồ khối chức năng tìm một sinh viên theo mã sinh viên 2.5 5c 225cc c2: 22

Sơ đồ khối chức năng cập nhật thông tin sinh viên 2: 5s SE re eyy 25

Sơ đồ khối thiết lập menu cập nhật thông tin - 2-5 5S SE SE E122 me, 29

Thuật toán cầu trúc rẽ nhánh trong thiết lập menu - c2 1 2221122222112 sreye 30

Trang 5

LY DO CHON DE TAI

Chúng em chọn phân tích chương trình quản lý sinh viên bằng cây nhị phân cho bài tiêu luận vì nhiều lý do hợp lý và thú vị Trước hết, chương trình này là một ví đụ cụ thê và dễ hiểu về cách sử dụng cầu trúc đữ liệu cây nhị phân, một phần quan trọng trong lĩnh vực khoa học máy tính Khi phân tích chương trình này, chúng em có thể nắm rõ hơn về cách cây nhị phân hoạt động, bao gồm việc thêm, tìm kiếm, và sắp xếp dữ liệu Đây là những kỹ năng cần thiết cho việc học và có thê áp dụng trong các dự án phần mềm thực tế

Hơn nữa, chương trình bao gồm nhiều khía cạnh quan trọng của lập trình như xử lý chuỗi

ký tự, kiểm tra và xác thực đữ liệu, và quản lý bộ nhớ Phân tích những phần này giúp chúng

em củng cô kiến thức lập trình căn bản và nâng cao, đồng thời rèn luyện kỹ năng giải quyết các vấn đề phức tạp Đây là cơ hội tốt đề chúng em áp dụng lý thuyết vào thực tế, từ đó nâng cao khả năng tư duy logic và kỹ năng lập trình

Cuối cùng, chương trình này có tính ứng dụng cao trong việc quản lý thông tin sinh viên,

làm cho nó trở thành một chủ đề hấp dẫn và thực tế để nghiên cứu Chúng em không chỉ

phân tích mã nguồn mà còn có thê đề xuất các cải tiến và mở rộng chức năng, giúp học hỏi cách phát triển và tối ưu hóa phần mềm Việc chọn chương trình này đê phân tích không chỉ giúp chúng em đạt được mục tiêu học tập mà còn trang bị những kỹ năng và kiến thức cần

thiết cho sự nghiệp trong lĩnh vực công nghệ thông tim

Trang 6

Chương 1 Chức năng và mục tiêu của giải thuật

Lễ Chức năng nhập danh sách sinh viên

1 Hàm nhập tắt cả thông tin của sinh viên

FALSE | NHAP LAI DiemTUD DiemTUD >=0 AND DiemTUD <=10 (x.DiemTUD)

NHẬP ĐIỂM CẤU TRÚC DỮ LIỆU

TRUE

NHẬP ĐIỂM LẬP TRÌNH

(x.DiemOOP)

- - FALSE NHAP LẠI DiemOOP

DiemOOP>=0 AND DiemOPP<=10 (x.DiemOOP)

TRUE

Trang 7

Hình 1 Sơ đỗ khối của hàm nhập tất cả thông tin của sinh viên

Trang 8

1.1 Mục tiêu giải thuật: Thu thập, kiểm tra tính hợp lệ và chuẩn bị đữ liệu sinh viên cho các hoạt động xử lý đữ liệu tiếp theo

a Thu thập thông tin sinh viên:

Mã số sinh viên (MaSV): Nhập và lưu trữ mã số sinh viên đề xác định duy nhất mỗi cá nhân

Họ và Tên sinh viên (TenSV): Nhập và lưu trữ tên đầy đủ của sinh viên

b Kiêm tra và chuẩn bị dữ liệu:

Ham đảm bảo tính hợp lệ của điểm số nhập vào bằng cách kiểm tra xem điểm có nằm trong khoảng từ 0 đến 10 hay không Nếu điểm không hợp lệ, người dùng sẽ được yêu

cầu nhập lại cho đến khi nhập chính xác

Hàm trả về một cấu trúc dữ liệu sinh viên (struct Sinhvien) chứa tất cả thông tin đã

được thu thập và kiểm tra Cầu trúc đữ liệu này có thể được sử dụng cho các thao tác tiếp theo như lưu trữ, hiển thị, cập nhật hoặc xóa thông tin sinh viên

1.2 Cách thức thực hiện giải thuật:

Bước I: Bắt đầu quá trình nhập thông tin sinh viên X

Bước 2: Yêu cầu người dùng nhập mã số sinh viên (MaSV)

Trang 9

= “

` s%%

® Bước 3: Yêu cầu người dùng nhập tên sinh viên (TenSV)

® Bước 4: Yêu cầu người dùng nhập điểm Tin ứng dụng (DiemTUD)

® _ Bước 5: Kiểm tra điểm Tin ứng dụng:

- Nếu DiemTUD nằm trong khoảng từ 0 đến 10, tiếp tục bước tiếp theo

- Nếu DiemTUD không hợp lệ, yêu cầu nhập lại DiemTUD

¢ Bước 6: Yêu cầu người dùng nhập điểm Cấu trúc đữ liệu (DiemCTDL)

e© Bước 7: Kiểm tra điểm Cấu trúc dữ liệu:

Nếu DiemCTDL nằm trong khoảng từ 0 đến 10, tiếp tục bước tiếp theo

Nếu DiemCTDL không hợp lệ, yêu cầu nhập lại DiemnCTDL

® Bước 8: Yêu cầu người dùng nhập điểm Lập trình hướng đối tượng (DiemOOP)

® - Bước 9: Kiểm tra điểm Lập trình hướng đối tượng:

Nếu DiemOOP năm trong khoảng từ 0 đến 10, kết thúc quá trình nhập

Nếu DiemOOP không hợp lệ, yêu cầu nhập lại DiemOOP

® - Bước 10: Hoàn thành quá trình nhập thông tin và kết thúc

Đánh giá giải thuật (Độ phức tạp):

Độ phức tạp không gian: O(1)

Hàm sử dụng các biến nội bộ đề lưu trữ thông tin của một sinh viên

Sinhvien x: Cầu trúc này chiếm một lượng không gian cô định cho các thành viên MaSV,

TenSV, DiemTUD, DiemCTDL, DiemOOP

Kích thước của các biến là cô định:

MaSV: 20 ky tu

TenSV: 50 ky tu

DiemTUD, DiemCTDL, DiemOOP: 3 bién kiéu float.

Trang 10

kích thước đầu vào

Độ phức tạp thời gian: O(1)

Hàm bao gồm nhiều bước nhập:

Nhập mã sinh viên (MaSV)

Nhập họ và tên sinh viên (TenSV)

Nhập điểm tin học ứng dụng (DiemTUD), điểm cấu trúc đữ liệu (DiemCTDL), điểm lập

trình hướng đối tượng (DiemOPP)

Tất cả các thao tác đều có thời gian thực hiện hằng số

Nhận xét giải thuật:

® Đơn giản và dễ hiểu: e Thiếu tính linh hoạt:

- Sử dụng các thao tác cơ bản như | - Kích thước của MaSV và TenSV là nhập đữ liệu cô định (20 và 50 ký tự) Nều cần

- Kiểm tra điều kiện mẹ rors hoac gam kích thướ © phải

thay đôi mã nguồn và biên dịch lại

ig a vé thời gi à khô ian: ko qed ¬ x

* Higu qua ve thời gian và không gian: | „ Thiêu kiếm tra lôi cho chuôồi nhập

- Dé phức tạp thời gian và không gian liệu:

của hàm là O(I), nghĩa là hàm này

rất hiệu quả và không tốn nhiều tài

nguyên

- Dữ liệu nhập vào được cung cấp từ

người dùng và không được xử lý

các lỗi tiềm ấn như dữ liệu không

phải là số hoặc tràn bộ đệm đầu

® Kiểm tra tính hợp lệ của dữ liệu đầu :

vao:

- Kiểm tra điều kiện dé dam bảo điểm

sô (0 <= điệm <= 10) hợp lệ, giúp

giảm thiêu lõi từ việc nhập sai đữ

liệu

® Sử dụng bộ nhớ cô định:

- Các biến trong cấu trúc có kích

thước cô định, nên bộ nhớ sử dụng là

Trang 11

hằng số và không thay đổi theo kích

T->LEFT = T-> RIGHT = NULL

Hình 2 Sơ đỗ khối của hàm nhập thông tin và thêm vào cây T

INSERTNODE(T>LEFT, X)

NODE ĐÃ TỒN TẠI

2.2 Mục tiêu giải thuật:

® Thêm một sinh viên mới vào cây đữ liệu sinh viên, sắp xếp theo mã số sinh viên theo

thứ tự tăng dan

® Dam bao sinh viên được thêm vào vị trí chính xác trong cây dựa trên mã số sinh viên

© Cập nhật cây đữ liệu sinh viên bằng cách chèn sinh viên mới vào vị trí phù hợp theo mã

sô sinh viên

Trang 12

2.3 Diễn giải:

® - Bước l: Khởi tạo một cây nhị phân tìm kiếm (T) và đối tượng sinh viên (X) cần chèn

® _ Bước 2: Kiểm tra cây rong:

- Néu T la NULL (cay rng), thực hiện bước 4

- Néu T khéng phai NULL (cay khong rỗng), thực hiện bước 3

s* Bước 3: So sánh và di chuyên

So sánh MSSV của sinh viên X với MSSV của NODE hiện tại T->SV:

- Nếu (T->SV, X) =0, trả về gia trị -1, thông báo sinh viên đã ton tai trong cay

- Néu(T->SV, X)>0, di chuyên sang node con bén trai cua T->SV (di xuong bén trái)

- Néu (T->SV, X) <0, di chuyén sang node con bén phai cua T->SV (đi xuống bên phai)

- Lap lai buéc 3 cho đến khi tìm thay vị trí thích hop dé chèn sinh viên X

+* Bước 4: Chèn sinh viên

- _ Tạo một NODE mới NEWNGode và gán đối tượng sinh viên X vào NEWNode->SV

- Gan NEWNode vao NODE con bén trai hodc bên phải của T->SV tùy thuộc vào so sánh trước đó

° _ Bước 5: Kết thúc

- Travé giá trị L, báo hiệu việc chèn sinh viên thành công

2.4 Đánh giá giải thuật (Độ phức tạp):

+* Độ phức tạp không gian: O(l)

® Hàm [NSERTNODE chỉ sử dụng một lượng hằng định bộ nhớ không phụ thuộc vào

kích thước của cây (n) Lượng bộ nhớ này được sử dụng đề lưu trữ các biến tạm thời và các con trỏ trong quá trình so sánh và chèn NODE mới

+* Độ phức tạp thời gian: O(log n) hoặc O(n)

® Trường hợp tốt nhất và trung bình O(Iog n): hàm INSERTNODE cần thực hiện tối đa log(n) phép so sánh để tìm vị trí thích hợp cho nođe mới trong cây nhị phân tìm kiếm (n) là số lượng NODE trong cây

e Trường hợp xấu nhất O(n): hàm INSERTNODE có thể cần thực hiện tối đa n phép so

sánh nếu cây nhị phân tìm kiếm không cân đối Cây không cân đối có thê xảy ra khi các

node được chèn theo một thứ tự nhất định, dẫn đến việc một nhánh của cây phát triển

quá dài so với nhánh còn lại

Trang 13

2.5, Nhan xét giai thuat:

- Câu trúc cây nhị phân được sắp xếp, thuật

toán chỉ cần thực hiện trung bình log n phép |- Khi cây nhị phân tìm kiếm

so sánh để tìm vị trí thích hợp cho đối tượng |_ không cân đối, độ phức tạp của mới, với n là số lượng node trong cây thuật toán có thê tăng lên O(n),

_ dẫn đến hiệu suất giảm

® Mã đơn giản và đề hiệu:

Việc sử dụng đệ quy giúp tách biệt các bước

xử ly, logic r6 rang hon

II Chire nang xuất danh sách sinh viên

1 In ra màn hình

2 Mục tiêu của giải thuật:

¢ Trinh bay chi tiét thong tin sinh viên bao gồm mã số sinh viên, tên và điểm số của ba môn học: Tin học ứng dụng, Cầu trúc đữ liệu, và Lập trình hướng đối tượng

®_ Xuất ra màn hình đữ liệu với cấu trúc rõ ràng và đễ hiểu, giúp người đùng đễ dàng nhận biết và xem xét thông tin của từng sinh viên

© - Dưa ra thông báo cho người dùng về kết quả của các thao tác và cung cấp hướng dẫn tiếp theo nêu cân thiết

Trang 14

1.2 Diễn giải:

Bước I: Nhận đối tượng Sinhvien x

Bước 2: Sử dụng lệnh “cout” để xuất thông tin ra màn hình :

In ra màn hình dòng phân cách “ -" đê phân biệt thông tin giữa các sinh viên

In ra màn hỉnh mã SV “MSSV”

In ra màn hinh tén SV “Ten SV”

In ra man hinh diém Tin tng dung “Diem Tin ung dung”

In ra màn hình điểm Cấu trúc dữ liệu “Diem Cau trục du lieu”

In ra màn hình điểm lập trình hướng đối tượng “Diem lap trinh huong đơi tuong” 1.3 Đánh giá giải thuật (độ phúc tap):

Độ phức tạp thời gian: Hàm Output có độ phức tạp thời gian là O(1), vì số lần in ra màn hình không bị ảnh hưởng kích thước của dữ liệu đầu vào

Độ phức tạp không gian: Độ phức tạp không gian của hàm cũng là O(L), vì nó không

sử dụng thêm bộ nhở ngoài việc lưu trữ đối tượng Sinhvien được truyền vào

1.4 Nhận xét về thuật toán (ưu và nhược điểm)

Trang 15

2 Duyệt cây theo LNR để chạy danh sách tăng dần:

Trang 16

2.2 Dién giai:

Bước 1 Bắt đầu từ hàm LNR(Tree T): Hàm này nhận một cây (Tree) làm đối sô

Bước 2 Kiểm tra điều kiện dừng:

Nếu cây T không rỗng (khác NULL), tiếp tục thực hiện các bước tiếp theo

Nếu cây rỗng (NULL), kết thúc hàm và quay lại bước gọi hàm gần nhất trước đó Bước 3 Duyệt cây theo thứ tự LNR (Left, Node, Right):

Đầu tiên, gọi đệ quy hàm LNR(T->left) với cây con bên trái của nút hiện tại Quá trình

đệ quy này tiếp tục cho đến khi không còn cây con nảo bên trái của nút hiện tại hoặc

các nút con đều đã được duyệt và xuất ra

Tiếp theo, sau khi hoàn thành việc duyệt cây con bên trái, xử lý nút hiện tại Nó sẽ thực hiện lệnh Output(T->SV) Đây là lệnh để xuất thông tin của nút hiện tại ra màn hình Trong trường hợp này, T->SV đại diện cho thông tin của sinh viên được lưu trong nút cây hiện tại

Cuối cùng, sau khi đã xuất thông tin của nút hiện tại (T->SV), hàm tiếp tục gọi đệ quy LNR(T->right) để duyệt sang cây con bên phải của nút hiện tại Quá trình này sẽ tiếp

tục cho đến khi không còn cây con nào bên phải của nút hiện tại hoặc các nút con đã được duyệt và xuất ra

Bước 4 Khi cả hai đệ quy LNR(T->leR) và LNR(T->right) đều đã hoàn thành và cây không có nút con nào nữa, hàm sẽ kết thúc Mỗi nút trong cây sẽ được duyệt theo thứ

tự LNR, tức là các nút con bên trái được duyệt trước, sau đó là nút hiện tại và cuối

cùng là các nút con bên phải

2.3 Mục tiêu của giải thuật:

Mục tiêu của hàm này là duyệt cây nhị phân tìm kiếm (BST) theo thứ tự LNR (Left, Node, Right), tức có nghĩa là đảm bảo việc duyệt cây theo thứ tự tăng dần của các giá Điều này áp dụng cho việc xuất đanh sách các sinh viên theo thứ tự hoặc thực hiện các

Trang 17

2.4 Độ phức tạp của giải thuật: Độ phức tạp của giải thuật này phụ thuộc vào số lượng nút trong cây và cấu trúc của cây và cấu trúc của cây

© Trong trường hợp xấu nhất, cây nhị phân có thê trở thành cây mà mỗi nút chỉ có duy nhất một cây con (một nhánh đài nhất), khi đó số lần duyệt qua mỗi nút sẽ làn Duyệt qua mỗi nút chỉ mất O(1) thời gian đề xuất thông tin vì vậy tổng thời gian duyệt toàn

bộ cây là O(n)

¢ Trong trường hợp tốt nhất, cây là một cây cân bằng hoàn toàn, mỗi nút có hai cây con thì mỗi nút vẫn chỉ được duyệt một lần và tổng thời gian duyệt toàn bộ cây vẫn là O(n)

® Ngoài ra độ phức tạp không gian của giải thuật LNR phụ thuộc vào độ sâu của đệ quy,

độ sâu của đệ quy có thê đạt tới n (tức là cây chỉ có một nhánh đài) Do đó, độ phức tạp không gian của giải thuật LNR là O(n), với n là số lượng nút trong cây

Giải thuật LNR giúp duyệt cây nhị

phân và xuất các nút theo thử tự tăng

dần của giá trị, từ đó thuận tiện cho

việc sắp xếp và tìm kiếm các phần tử

theo thứ tự nhất định

Mặc dù không gian đệ quy của LNR là

O(n), tuy nhiên khi cây có chiều sâu

lớn, giải thuật sẽ cần một lượng bộ nhớ

stack lớn đề lưu trữ các fiame của các

cuộc gọi đệ quy Điều này có thê gây

ra vẫn đề về hiệu suất và tiêu tốn nhiều

tài nguyên hệ thông

Giải thuật này rất dễ hiểu và triển khai

do có cấu trúc đệ quy rõ ràng

Độ phức tạp thời gian 6n định: Độ phức tạp thời gian của LNR là O(n), trong đó n là số lượng nút trong cây, tức là giải thuật sẽ duyệt qua mỗi nút một lần duy nhất nhờ đó tông thời gian hanh chóng và hiệu quả

Không phù hợp với một số yêu cầu duyệt cây khác: Giải thuật LNR chỉ

phù hợp với việc duyệt theo thứ tự "trái

- góc - phải" Nếu cần duyệt theo các

thứ tự khác như "sốc - trải - phải"

(NLR) hoặc "trái - phải - gốc" (LRN),

sẽ cần phải triển khai lại hoặc sử dụng

các phương pháp duyệt khác

Trang 18

Nếu cây nhị phân không cân bằng va

có một nhánh đài, độ sâu của đệ quy có

thé tăng lên đáng kê Trong trường hợp

xấu nhất, giải thuật có thể phải duyệt

qua tất cả các nút một lần, dẫn đến độ

phức tạp thời gian là O(n), tuy nhiên

việc duyệt sẽ không hiệu quả và chậm

hơn so với các câu trúc cây cân băng

Phù hợp với các tác vụ sử lý dữ liệu cây: Khi cần duyệt và xử lý các nút

Trang 19

Check user's choice

Bước 2: Khởi tạo biến và nhãn

Khai báo biến quit dé lưu trữ trạng thái lựa chọn của người dùng (tiếp tục hay đừng)

Trang 20

Gan nhan loop cho dau vong lap while dé kiêm soát quá trình nhập sinh viên

Bước 3: Tạo cây mới hoặc thêm sinh viên vào cây

Goi ham createTree(T):

Néu cây BST chưa được tạo, hàm create Tree sẽ khởi tạo một cây mới

Nếu cây BST đã tồn tại, hàm createTree sẽ thêm sinh viên mới vào cây

Bước 4: Xóa đữ liệu dư thừa trong bộ nhớ đệm

Sử dụng cin.ignore(Q để xóa bỏ đữ liệu dư thừa trong bộ nhớ đệm đầu vào Điều này dam bảo rằng dữ liệu thừa từ lần nhập trước không ảnh hưởng đến các lần nhập sau Bước 5: Hiền thị thông báo và lây đầu vào từ người dùng

Str dung cout dé hién thị thông báo hỏi người dùng có muốn tiếp tục nhập sinh viên hay không

Str dung cin dé lấy đầu vào từ người dùng và lưu trữ vào biến quit

Bước 6: Kiểm tra lựa chọn của người dùng

Trường hợp người dùng muốn tiếp tục:

Nếu giá trị của quit bằng I, tức là người đùng muốn tiếp tục nhập sinh viên

Sử dụng goto loop đề quay lại đầu vòng lặp while, bắt đầu từ bước 3 để tạo cây hoặc thêm sinh viên mới

Trường hợp người dùng muốn dừng:

Nếu giá trị của quit bằng 0, tức là người dùng không muốn tiếp tục nhập sinh viên Thoát khỏi hàm InpufNode0

3 Mục tiêu của giải thuật:

Mục tiêu của giải thuật này là cho phép người dùng nhập danh sách sinh viên vào một cây nhị phân tìm kiếm (BST)

Chương trình sẽ hỏi người dùng sau mỗi lần nhập thông tin sinh viên liệu họ có muốn tiếp tục hay không, cho đến khi người dùng lựa chọn dừng

Trang 21

4 Độ phức tạp của giải thuật:

® - Độ phức tạp trung bình: O(log n)

- _ Trong trường hợp trung bình, việc thêm một sinh viên vào cây nhị phân tìm kiêm có

độ phức tạp là O(log n), với n là số lượng sinh viên hiện có trong cây

© D6 phic tap xau nhat: O(n)

- Nếu cây BST không cân bằng, độ phức tạp có thê lên đến O(n) trong trường hợp xau nhật

5 Nhận xét giải thuật:

¢ Don gian va dé trién khai: ¢ Viéc str dung goto va vong lap v6 diéu kién

e Giải thuật dé hiểu và dé đàng thực có thê khiến mã nguồn khó hiểu và khó bảo

® Người dùng chỉ cần nhập thong tin| ¢ Giải thuật không kiểm tra lỗi nhập liệu từ sinh viên và lựa chọn tiếp tục hay người dùng, dẫn đến khả năng xảy ra lỗi

dừng nêu người dùng nhập sai định dạng hoặc

e Thao tác trực quan: Sử dụng câu lệnh giá trị không hợp lệ

"Yes/No" giup tao ra giao dién nguoi | *® Giải thuật không cân bằng cây sau mỗi lần dùng đơn gián và để sử dụng thêm sinh viên mới, có thể dẫn đến tình

trạng cây trở nên không cân bằng và hiệu suất tìm kiếm giảm xuống trong trường hợp xau nhat

Trang 22

IV Chức năng xóa sinh viên ra khỏi danh sách dựa trên mã sinh viên

Trang 23

Hình 5 Sơ đỗ khối xóa một nút từ cây nhị phân tìm kiếm dựa trên mã sinh viên

Trang 24

Mục tiêu của giải thuật: Giải thuật này có mục tiêu là yêu cầu xóa một nút trên cây nhị phân tìm kiếm (BST) lấy thông tin từ mã sinh viên (idSV) đã được cung cấp

Cách thức thực hiện giải thuật:

Bước I Bắt đầu:

Str dung ham deleteNode(Tree& T, char idSV), trong đó số cây là T và mã sinh viên

cần xóa idSV đề bắt đầu

Bước 2 Nhập mã số sinh viên cần xóa (idSV)

Người dùng nhập mã sinh viên muốn xóa khỏi cây

Bước 3 Kiểm tra nếu cây T rỗng

Nếu cây T rỗng, nghĩa là không có sinh viên nào trong cây, sau đó trả về 0 ( không xóa được) và thống báo xóa không thành công

Bước 4 So sánh IdSV với T->SV.MaSV

Nếu idSV < T->SV.MaSV ( mã số sinh viên nhỏ hơn so với mã số sinh viên cần xóa), gọi đệ quy deleteNode(T->left, ¡dSV) đề xóa sinh viên ở cây con bên trái

Nếu idSV > T->SV.MaSV ( mã số sinh viên lớn hơn so với mã số sinh viên cần xóa), gọi đệ quy deleteNode(T->right, idSV) dé xóa sinh viên ở cây con bên phải

Nếu idSV == T->SV.MaSV ( mi sé sinh viên trùng với mã số sinh viên cần xóa), tiếp tục kiểm tra các trường hợp có thê xảy ra

Trang 25

3 Đánh giá giải thuật:

© - Khi trong tình huồng tốt hay trung bình, độ phức tạp có thể là O(og n), với n là số lượng nút có trong cây BST Tuy nhiên, trong trường hợp tệ nhất, độ phức tạp có thể lên đến O(n) trong trường hợp cây trở thành một danh sách hiên kêys Độ phức tạp của giải thuật này phụ thuộc vào cầu trúc và kích thước của cây BST Cấu trúc và kích thước của cây BTS là yếu tô chính hình thành nên độ phức tạp của cây

Đơn giản và dê hiệu: Giải thuật sử

dụng cây nhị phân tìm kiếm, là một

cầu trúc dữ liệu pho bién va dé hiéu

trong lap trinh

Tinh chat ty can bang (AVL tree): Néu

cây được cài đặt để tự cân bằng như

AVL tree, thao tác chèn, tìm kiếm và

xóa có thê đạt đến độ phức tạp trung

binh la O(log n), giúp tối ưu hóa hiệu

suất của giải thuật

Các thao tác tìm kiếm, thêm mới và

xóa đữ liệu trong cây nhị phân tìm

kiếm phù hợp với nhu cầu của việc

quản lý danh sách sinh viên, khi cần

phải thực hiện các thao tác này một

cách hiệu quả

Dễ dàng mở rộng: Câu trúc cây nhị

phân tìm kiếm có thê đễ đàng mở rộng

và điều chỉnh đề đáp ứng các yêu câu

Độ phức tạp cao trong trường hợp xâu nhat: Nếu cây không được cân bằng và trở thành một cây "Iéch" (skewed tree), cac thao tác như tìm kiếm và xóa có thê lên đến O(n),

làm giảm hiệu suất của giải thuật

Không cân bằng dữ liệu đầu vào: Nếu dữ

liệu được thêm vào cây không cân bằng, ví

dụ như đữ liệu đã được sắp xếp theo thứ tự,

cây có thể trở thành một danh sách liên kết,

làm giảm hiệu suất của cây

Trong một 36 trường hợp đặc biệt như cần phải xử lý dữ liệu theo thứ tự khác ngoài thứ

tự của mã sinh viên (ví dụ như theo điểm số), cây nhị phân tìm kiếm có thể không

phải là giải pháp phù hợp nhất

Khó khăn trong việc cập nhật cấu trúc đữ liệu: Khi cần thêm các tính năng phức tạp hơn như thống kê, sắp xếp theo nhiều tiêu

chí khác nhau, cây nhị phân tìm kiếm có thê

Ngày đăng: 05/12/2024, 16:11

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

TÀI LIỆU LIÊN QUAN