Giải thuật và độ phức tạp giải thuật

Một phần của tài liệu ỨNG DỤNG UML DESIGN PATTERN XÂY DỰNG HỆ THỐNG ĐĂNG KÝ TÍN CHỈ TRỰC TUYẾN (ONLINE COURSE REGISTER SYSTEM) (Trang 103 - 106)

Như hiện tại trường ĐHBK đang áp dụng, nhà trường phát sổ tay sinh viên cho mỗi sinh viên vào đầu mỗi học kỳ, vẫn cho phép sinh viên chọn lớp học phần muốn đăng ký, nhưng trên hết vẫn là khuyến cáo sinh viên nên học theo đúng chương trình đào tạo cho mỗi ngành ở mỗi học kỳ. Sau khi đăng ký, sinh viên phải nộp lại kết quả đăng ký của mình cho phịng đào tạo, và các cán bộ đào tạo phải kiểm tra thật chính xác trên cơ sở kết quả học tập của sinh viên từ khi vô trường đến thời điểm xét, cũng như ba điều kiện của từng học phần, và nhiều những điều kiện khác.

Vì vậy, với những quy định của cơ chế đào tạo tín chỉ, một vấn đề vơ cùng quan trọng và cũng khơng kém phần khó khăn chính là việc quyết định cho phép một sinh viên được học một học phần nào đó hay khơng tại thời điểm xét?

Để kiểm tra quy định về việc cho phép mỗi sinh viên ở mỗi học kỳ được phép học tối đa – tốii thiểu bao nhiêu tín chỉ tổng cộng, chúng ta chỉ cần dựa vào những học phần mà sinh viên đã đăng ký cho học kỳ đó và tính tổng số tín chỉ của chúng là xong. Còn để kiểm tra số lượng sinh viên tối đa theo quy định cho mỗi lớp học phần ta chỉ việc sử dụng các biến đếm với giá trị khởi gán là 0 cho mỗi lớp học phần tương ứng, rồi tăng nó lên một đơn vị mỗi khi có thêm một sinh viên đăng ký vào lớp học phần đó, đồng thời so khớp với số lượng sinh viên tối đa được ấn định ngay khi lớp học phần đó được mở, và kết quả là cho phép sinh viên theo học lớp học phần đó nếu biến đếm tương ứng vẫn chưa lớn hơn số lượng sinh viên tối đa như quy định đó.

Tuy nhiên, để kiểm tra các điều kiện học trước, tiên quyết và song hành của mỗi học phần, chúng ta phải nắm được các danh sách A1, A2 cho biết tất cả những học phần mà một sinh

Phân tích thiết kế hệ thống

viên đã học, những học phần nào sinh viên đã học và có điểm thi kết thúc học phần lớn hơn hoặc bằng năm. Đồng thời chúng ta cũng phải nắm được lần lượt các danh sách A3, A4, A5 các học phần thỏa mãn điều kiện học trước, tiên quyết và song hành của học phần đó, để rồi từ đó tìm kiếm xem tất cả những học phần này có nằm trong tập các tập A1/A2 hay khơng? Điều đó cho thấy đây là cơng việc khá khó khăn và phức tạp, vì vậy việc đưa ra giải thuật và đánh giá độ phức tạp của giải thuật cũng rất quan trọng trong đồ án này.

Khi đã xây dựng được giải thuật và chương trình tương ứng, u cầu về tính đơn giản của giải thuật là rất cần thiết, đặc biệt là với ứng dụng xây dựng hệ thống đăng ký tín chỉ, với một khối lượng dữ liệu đưa vào khá lớn thì vấn đề thời gian phải được xem xét. Vì vậy, yêu cầu đặt ra là tốc độ, hơn nữa khối lượng dữ liệu quá lớn mà dung lượng bộ nhớ lại có giới hạn nên cũng không thể bỏ qua yêu cầu về tiết kiệm bộ nhớ được.

Lưu ý rằng, tất cả các giải thuật dưới đây đều tính cho thời điểm xét và được thực hiện ngay trong hệ quản trị cơ sở dữ liệu SQL trước khi trả dữ liệu về cho đối tượng gọi. Trước hết, ta xét giải thuật kiểm tra điều kiện học trước của học phần X ứng với sinh viên S như sau: 1) Yêu cầu : kiểm tra xem một sinh viên S có được phép học học phần X hay khơng?

2) Phác thảo giải thuật :

• Lấy tập những học phần có Điều_Kiện_Học_Phần = “Học trước” ở bảng dữ liệu điều kiện học phần trong cơ sở dữ liệu của học phần X, và đưa vào tập hợp T1. • Duyệt từng phần tử ai của tập hợp T1 trên:

 Lấy tập những học phần sinh viên S đã học, và đưa vào tập hợp T2.

 Kiểm tra ai có thuộc T2 hay khơng  nếu ai khơng thuộc T2 thì điều kiện học trước khơng được đảm bảo và dừng việc kiểm tra lại, kết luận sinh viên S khơng được học học phần X; cịn nếu đã duyệt hết các phần tử của T1 mà vẫn khơng rơi vào trường hợp trên thì cũng dừng việc kiểm tra và kết luận sinh viên S được phép học học phần X.

3) Mô phỏng hàm kiểm tra bằng giả ngữ :

Function HỌC_TRƯỚC(Học_Phần X, Sinh_Viên S):Boolean;

Begin

T1,T2 : Set; T1 := ∅, T2 := ∅;

T2 := select HọcPhần from BảngKếtQuảThi where HọcPhần=X & SinhViên=S; T1 := select HọcPhần from BảngĐiềuKiệnHọcPhần where HọcPhần=X & Điều_Kiện_Học_Phần=“Học trước”;

Với mỗi học phần ai của T1 chưa được kiểm tra thì làm nếu ai ∉ T2 thì

{Có một học phần sinh viên chưa hồn thành trước đó} HỌCTRƯỚC := false;

{Đảm bảo điều kiện học trước, và cho phép sinh viên S theo học} HỌCTRƯỚC := true;

End

4) Đánh giá độ phức tạp : với những quy tắc xác định độ phức tạp, ta thấy trong đoạn lệnh

giả ngữ trên các phép gán có thời gian thực hiện là hằng số nên độ phức tạp thời gian là O(1). Tiếp đến là câu lệnh lặp bên trong có câu lệnh nếu…thì và phép gán nên có độ phức tạp bậc một, và gọi là O(n). Tuy nhiên, trong trường hợp này, thời gian thực hiện không

Phân tích thiết kế hệ thống

chỉ phụ thuộc vào kích thước dữ liệu mà cịn phụ thuộc vào cả tình trạng dữ liệu nữa. Vì vậy, ta cần phải xét đến cả độ phức tạp thời gian trung bình. Có thể thấy, trong trường hợp thuận lợi nhất, tức là ngay khi xét phần tử đầu tiên của tập T1 thì điều kiện kiểm tra được thỏa mãn và khi đó Ttốt = O(1); ngược lại với trường hợp xấu nhất, tức là phải duyệt tất cả các phần tử của tập T1 thì khi đó Txấu = O(n). Vậy độ phức tạp thời gian của giải thuật trường hợp xấu nhất vẫn là O(n).

Như đã phân tích, việc kiểm tra điều kiện tiên quyết, song hành cũng giống như điều kiện học trước, chỉ khác ở chỗ với điều kiện tiên quyết thì tập T2 phải thỏa điều kiện điểm thi học phần khơng dưới năm và với điều kiện song hành thì lệnh điều kiện là xét ai ∈ T2 thì dừng đồng thời kết luận cho phép sinh viên theo học học phần X này. Do đó, việc đánh giá độ phức tạp cũng hoàn toàn tương tự và cho kết quả cũng giống nhau.

PHẦN V

XÂY DỰNG VÀ TRIỂN KHAI HỆ THỐNG

Dựa vào những kết quả đạt được trong q trình phân tích thiết kế nêu trên, chúng tôi đã tiến hành xây dựng hệ thống đăng ký tín chỉ trực tuyến OCRS với các trang cơ bản cùng các chức năng ở mỗi trang, và minh họa qua các hình dưới đây.

Một phần của tài liệu ỨNG DỤNG UML DESIGN PATTERN XÂY DỰNG HỆ THỐNG ĐĂNG KÝ TÍN CHỈ TRỰC TUYẾN (ONLINE COURSE REGISTER SYSTEM) (Trang 103 - 106)