+* Độ 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 1NGAN 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 4DANH 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 5LY 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 6Chươ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 7Hình 1 Sơ đỗ khối của hàm nhập tất cả thông tin của sinh viên
Trang 81.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 10kí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 11hằ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 122.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 132.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 141.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 152 Duyệt cây theo LNR để chạy danh sách tăng dần:
Trang 162.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 172.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 19Check 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 20Gan 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 214 Độ 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 23Hì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 24Mụ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 253 Đá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ê