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ứ Nếu T là NULL cây rồng, thực hiện bước 4.. Đánh giá giải thuật Độ phức tạp: +
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
Trang 2TP HO CHi MINH NAM 2024
Trang 3
MỨC ĐỘ HOÀN
THANH Thực hiện phân phân
mở đầu và kết luận;
nội dung phân l của chương Ì
Đào
2
Tran Thị Thanh Thực hiện phần nội
Thực hiện nội dung
Trang 4
MUC LUC
Trang 5A PHAN MO DAU
¢ Ly do chon dé 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 ly do hợp lý và thú vị Trước hết, chương trình này là một ví dụ cụ thé va 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
Trang 6B NOI DUNG
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
Trang 7NHAP LAI DiemCTDL
DiemCTDL >=0 AND DiemCTDL <=10 (x.DiemCTDL)
Trang 81.2 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
.- 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
Điểm các môn học:
Điểm Tin ứng dụng (DiemTUD): Thu thập và lưu trữ điểm số cho môn Tin ứng đụng Điểm Cấu trúc đữ liệu (DiemCTDL): Thu thập và lưu trữ điểm số cho môn Cấu trúc đữ liệu
Điểm Lập trình hướng đối tượng (DiemOOP): Thu thập và lưu trữ điểm số cho môn Lập trình hướng đối tượng
b Kiêm tra và chuẩn bị dữ liệu:
1.3
Hàm đả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
Ham 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 dữ 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
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)
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 đùng nhập điêm Tin ứng đụ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 Diem TU
Bước 6: Yêu cầu người dùng nhập điểm Cấu trúc đữ liệu (DiemCTDL)
Bước 7: Kiểm tra điểm Cấu trúc đữ liệu:
Trang 91.4
%
5
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 DiemCTDL
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)
e Ham su dung cac biến nội bộ đề lưu trữ thông tin của một sinh viên
e Sinhvien x: Cau tric nay 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
Tong không gian cần thiết cho một đối tuong Sinhvien là cô định và không phụ thuộc vào 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ố
Ưu điềm Nhược điểm
Trang 10
Kiém tra diéu kién
Hiệu quả về thời gian và không
gian:
Độ phức tạp thời gian và không
gian của hàm là O(1), nghĩa là hàm
này rất hiệu quả và không tốn
nhiều tài nguyên
Kiểm tra tính hợp lệ của dữ liệu
Các biến trong cấu trúc có kích
thước cô định, nên bộ nhớ sử dụng
là hằng số và không thay đôi theo
hoặc giảm kích thước phải thay đôi mã nguôn và biên dịch lại
Thiếu kiểm tra lỗi cho chuỗi nhập liệu:
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ư đữ liệu không phải là số hoặc tràn bộ đệm đầu vào
Trang 11
2, Hàm nhập thông tin và thêm vào cây T
2.1 Sơ đồ khối
INSERTNODE(T>RIGHT, X)
INSERTNODE (T,X)
KHÔNG DU BỘ NHỚ
INSERTNODE(T>LEFT, X)
| NODE DA TON TAI
T->LEFT = T-> RIGHT = NULL
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ứ
Nếu T là NULL (cây rồng), thực hiện bước 4
Nêu T không phải NUỮLL (cây không rồng), thực hiện bước 3
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->§V, X) == 0, tra vé gia tri -1, thông báo sinh viên đã tồn tại trong cây Nếu (T->SV, X) >0, đi chuyên sang node con bên trái của T->SV (đi xuống bên trái) Nếu (T->SV, X) < 0, di chuyển sang node con bên phải của T->SV (đi xuống bên phai)
Trang 12Nn
- Lap lai buéc 3 cho dé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
e Gan NEWNode vao NODE con bén trai hoặc bên phải của T->ŠV tùy thuộc vào so sánh trước đó
% Bước 5: Kết thúc
e Travé giá trị L, báo hiệu việc chèn sinh viên thành công
.4, Đánh giá giải thuật (Độ phức tạp):
+* Độ phức tạp không gian: O(1)
® Hàm INSERTNODE 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)
e Trường hợp tốt nhất và trung bình O(log 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 node 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 cac 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á đài so với nhánh còn lại
là số lượng node trong cây
¢ Mã đơn giản và dễ hiểu:
- — Việc sử dụng đệ quy giúp tách biệt
Trang 13
II Chức năng xuất danh sách sinh viên
1 In ra màn hình
1.1 Mục tiêu của giải thuật:
Trình bày chi tiết thông 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à dễ hiểu, giúp người dùng đễ dàng nhận biết và xem xét thông tin của từng sinh viên
® - Đư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
1.2 Diễn giải:
+* Bước 1: 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 “ -" dé 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 hình tén SV “Ten SV”
® In ra màn hình điểm Ti tng dung “Diem Tin ung dung”
® In ra màn hình điểm Cầu trúc đữ liệu “Diem Cau trục đu 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 tạp):
© - Độ 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 đữ 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à OW), vi 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)
e Thuật toán đơn gián, dễ hiệu và để sử e - Hàm không gồm xử lý hoặc kiểm tra dụng Cho phép trình bày chỉ tiết thông lỗi vì vậy nêu đữ liệu đầu vào không tin sinh viên một cách rõ ràng, trực hợp lệ (ví dụ: dữ liệu không phải là
quả không mong muốn
Trang 14
2 Duyệt cây theo LNR để chạy danh sách tăng dần:
® Bước 1 Bat dau từ ham LNR(Tree T):
- Ham nay nhan mét cay (Tree) làm đối só
e Buédc 2 Kiém tra dié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->leÑ) 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.
Trang 15Bước 4 Khi cả hai đệ quy LNR(T->lef) 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
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, Ripht), 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 danh sách các sinh viên theo thứ tự hoặc thực hiện các thao tác khác như tìm kiểm, cập nhật hoặc xóa dữ liệu dựa trên một thuộc tính
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)
¢ Ngoai ra d6 phức tạp không gian cua 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 dà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
Trang 162.5, Nhan xét giai thuat:
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
Sử dụng không gian đệ quy lớn: 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 ñame 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 rat dé hiểu và triên khai
do có cấu trúc đệ quy rõ ràng Nó sử
dụng một phương pháp đệ quy đơn
giản đề đuyệt qua các nút của cây
Nêu cây nhị phân không cân băng và
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ức tạp thời gian ôn đị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ư "gố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
như mm ra danh sách các nút theo
thứ tự tăng dần của các giá trị), giải
thuật LNR là lựa chọn lý tưởng
Trang 17
III Chức năng thêm sinh viên mới vào danh sách
¢ Buéc 1: Bat dau
- Bat đầu hàm InputNode(Tree& T): Hàm này chịu trách nhiệm cho việc nhập danh sách sinh
viên vào cây nhị phân tìm kiếm (BST)
e© Bước 2: Khởi tạo biến và nhãn
Trang 18-Khai bao bién quit dé lưu trữ trang thái lựa chọn của người dùng (tiếp tục hay dừng) -Gán nhãn loop cho đầu vòng lặp while để 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 đảm 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 thi thông báo và lây đầu vào từ người dùng
- Sử dụng cout đề 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
- Sử dụng cin đề 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 dù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 đù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 Thoat khoi ham InputNode()
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 đừng
4 Độ phức tạp của giải thuật:
Trang 19Đơn giản và đề triên khai:
Giải thuật để hiểu và dễ dàng thực
hiện
Người dùng chỉ cần nhập thông tin
sinh viên và lựa chọn tiếp tục hay
dừng
Thao tác trực quan: Sử dụng câu lệnh
"Ves/No” giúp tạo ra giao diện người
Không kiểm tra lỗi nhập liệu:
Giải thuật không kiểm tra lỗi nhập liệu
từ người dùng, dẫn đến khả năng xảy
ra lỗi nêu người dùng nhập sai định đạng hoặc giá trị không hợp lệ
Cây không cân bằng: Giải thuật không
cân bằng cây sau mỗi lần 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 xấu nhất
1 Sơ đồ khối:
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 21Muc tiéu cia 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 tim kiém (BST) lay 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, idSV) đề 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
dé quy deleteNode(T->right, idSV) để xóa sinh viên ở cây con bên phải
Nếu idSV == T->SV.MaSV ( mã 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
Trả về 1 tức là quá trình xóa đã thành công
4 Đá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(log 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 liê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 la yéu tô chính hình thành nên độ phức tạp của cây
Ưu điềm Nhược điềm
® Đơn giản và dễ hiểu: Giải ® Độ phức tạp cao trong trường