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

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

43 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 43
Dung lượng 3,63 MB

Nội dung

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 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

Trang 2

TP 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 5

A 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 6

B 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 7

NHAP LAI DiemCTDL

DiemCTDL >=0 AND DiemCTDL <=10 (x.DiemCTDL)

Trang 8

1.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 9

1.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 12

Nn

- 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 15

Bướ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 16

2.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 21

Muc 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

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

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w