Thuật toán giúp tự động sắp xếp thời khóa biểu THPT cho học sinh và giáo viên. Chất lượng của thời khóa biểu được đánh giá dựa trên nhiều ràng buộc cứng và mềm dựa trên dữ liệu thực tế. Đây là thuật toán được cài đặt hỗ trợ cho bài báo khoa học của học viên cao học Nguyễn Hồ Thiên Đăng và TS. Phan Tấn Quốc.
Cấu trúc tập tin
Chương trình chính: main.cpp
Input Files:
(Dữ liệu mẫu - Trường THPT Ngô Quyền, Q.7, TP.HCM)
PC_HK1.txtPC_HK2.txt(Danh sách phân công của học kì I và II).
cấu trúc file:
vd: PC001 10A Anh GV1024 3 2
Output Files:
TKB của lớp: TKB_lop.txt
TKB của gv: TKB_gv.txt
Vi phạm của lớp: VP_lop.txt
Vi phạm của gv: VP_gv.txt
Vi phạm chi tiết: VP_chitiet.txt
Vi phạm tổng: VP_tong.txt
Số liệu về điểm vi pham (Cải Thiện 2): `main.cpp`0
Tiêu chí đánh giá chất lượng
Chất lượng của một thời khóa biểu thể hiện qua thời khóa biểu của các lớp học và thời khóa biểu của mỗi giáo viên. Việc đánh giá chất lượng một thời khóa biểu là công việc khó khăn và thông thường giáo viên sẽ đánh giá dựa vào thông tin thời khóa biểu có vi phạm các ràng buộc của bài toán
1. giá sinh viên – ZALO:0973.287.149-TEAMLUANVAN.COM Tải tài liệu tại kết bạn zalo : 0973.287.149 Đà Nẵng, 2013 ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC --- ĐỒ ÁN MÔN HỌC ĐỀ TÀI SẮP XẾP LỊCH THI ĐẤU TENNIS BẰNG THUẬT TOÁN CHIA ĐỂ TRỊ Sinh viên thực hiện: Khổng Thanh Dũng Lớp: 11CNTT2 Giảng viên hướng dẫn: TH.S.Lê Thị Bích Hồng
2. giá sinh viên – ZALO:0973.287.149-TEAMLUANVAN.COM 2 Tải tài liệu tại kết bạn zalo : 0973.287.149Đồ án môn học 11CNTT2 Khổng T MỤC LỤC MỞ ĐẦU .......................................................................................................................3 CHƯƠNG 1 CƠ SỞ LÝ THUYẾT...........................................................................4 1.1. KỸ THUẬT CHIA ĐỂ TRỊ............................................................................4 1.1.1. Khái niệm.................................................................................................4 1.1.2. Chiến thuật...................................................................................................4 1.1.3. Phương pháp. ...............................................................................................4 1.1.4. Mô tả giải thuật chung. ................................................................................5 1.2. CÁC BÀI TOÁN ÁP DỤNG KỸ THUẬT CHIA ĐỂ TRỊ. ...........................5 1.2.1. Tìm max, min trong dãy. .............................................................................5 1.2.2. Sắp xếp nhanh..............................................................................................5 1.2.3. Sắp xếp trộn.................................................................................................6 1.2.4. Tìm kiếm nhị phân.......................................................................................6 1.2.5. Bài toán tháp Hà Nội (Brahma)...................................................................7 1.3. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN. .................................8 1.3.1. Định nghĩa................................................................................................8 1.3.2. các tính chất của O, Ω, ⱺ.........................................................................8 1.3.3. Phân tích tiệm cận........................................................................................8 1.3.4. Các cách đánh giá thuật toán. ......................................................................9 1.3.5. Các kiểu phân tích........................................................................................9 1.3.6. Độ phức tạp thời gian...................................................................................9 CHƯƠNG 2 BÀI TOÁN SẮP XẾP LỊCH THI ĐẤU THỂ THAO TENNIS ........10 2.1. ĐẶT VẤN ĐỀ. .....................................................................................................10 2.2. GIẢI QUYẾT VẤN ĐỀ........................................................................................10 2.3. GIẢI THUẬT........................................................................................................10 2.4. THIẾT KẾ DỮ LIỆU CHO BÀI TOÁN. .............................................................12 2.5. LẬP LỊCH THI ĐẤU. ..........................................................................................12 2.6. ĐỘ PHỨC TẠP CỦA GIẢI THUẬT...................................................................13 2.7. NHẬN XÉT. .........................................................................................................13 KẾT LUẬN..............................................................................................................14 TÀI LIỆU THAM KHẢO ...........................................................................................14 PHỤ LỤC.....................................................................................................................15 Chương trình sắp xếp lịch thi đấu thể thao Tennis. .................................................15
3. giá sinh viên – ZALO:0973.287.149-TEAMLUANVAN.COM 3 Tải tài liệu tại kết bạn zalo : 0973.287.149Đồ án môn học 11CNTT2 Khổng T MỞ ĐẦU 1. Lý do, mục đích chọn đề tài Kỹ thuật “chia để trị” là vấn đề quan trọng trong phân tích và thiết kế giải thuật, nó đã được nghiên cứu từ lâu và có nhiều ứng dụng trong nhiều ngành khoa học nói Chung và khoa học máy tính nói riêng. Nhiều giải thuật đã được phát triển để giải được rất nhiều bài toán, có thể nói rằng “chia để trị” là kỹ thuật quan trọng nhất và được áp dụng rộng rãi nhất để thiết kế các giải thuật có hiệu quả hiện nay.. Trong đó bài toán sắp xếp lịch thi đấu là một chủ đề khá thú vị, là chủ đề mang tính chất thực tế trong cuộc sống và được ứng dụng rất rộng rãi. 2. Mục tiêu cần đạt được của đề tài Đề tài này được thực hiện nhằm đạt được mục tiêu là hiểu rõ, sâu sắc hơn về thuật toán chia để trị, ứng dụng của thuật toán vào một số bài toán. Tìm hiểu ứng dụng quan trọng của nó trong chia lịch thi đấu thể thao trong Tennis. 3. Cơ sở lý thuyết - Toán học - Mảng - Danh sách liên kết. 4. Đối tượng và phạm vi nghiên cứu - Ngôn ngữ lập trình C++. - Thuật toán chia để trị và bài toán chia lịch thi đấu Tennis. 5. Phương pháp nghiên cứu - Tìm hiểu thông tin trên mạng internet, sách, báo, tạp chí… - Thông qua sự hướng dẫn của thầy cô giáo và nghiên cứu những tài liệu tham khảo liên quan. 6. Cấu trúc đề tài - Mở đầu. - Chương I: Cơ sở lý thuyết. - Chương II: Bài toán sắp xếp lịch thi đấu thể thao. - Kết luận. - Tài liệu tham khảo - Phụ lục.
4. giá sinh viên – ZALO:0973.287.149-TEAMLUANVAN.COM 4 Tải tài liệu tại kết bạn zalo : 0973.287.149Đồ án môn học 11CNTT2 Khổng T CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1.1. KỸ THUẬT CHIA ĐỂ TRỊ 1.1.1. Khái niệm - Chia để trị ( Divide and conquer) là phương pháp thiết kế được sử dụng rộng rãi và quan trọng. Có lẽ thuật toán được sử dụng nhiều nhất, quan trọng nhất là kỹ thuật chia để trị. Kỹ thuật này sẽ chia bài toán hiện thời thành N bài toán nhỏ hơn, thực hiện lời giải cho từng bài toán nhỏ này và từ đó xây dựng thuật toán cho bài toán lớn tổng hợp. Ví dụ cho thuật toán này là Sắp xếp trộn hoặc Tìm kiếm nhị phân. Chia để trị là chìa khóa để thiết kế nhiều giải thuật quan trọng, là cơ sở của quy hoạch động. 1.1.2. Chiến thuật Chiến thuật của thuật toán chia để trị gồm các bước sau: a. Chia bài toán thành nhiều bài toán nhỏ hơn. b. Trị (giải) mỗi bài toán nhỏ, trừ khi bài toán đủ nhỏ để có lời giải. Dùng đệ quy để thực hiện điều này. c. Nếu cần thì tổ hợp các lời giải của các bài toán nhỏ để nhận được lời giải của bài toán gốc. Nói là “nếu cần” ở bước 3 vì như bài toán tìm kiếm nhị phân bằng đệ quy chẳng hạn thì bài toán lớn được thu gọn thành đúng một bài toán nhỏ, vì vậy không cần phải tổ hợp các lời giải. 1.1.3. Phương pháp a) Quá trình Kỹ thuật chia để trị gồm 2 quá trình: - Phân tích bài toán đã cho thành bài toán cơ sở. - Tổng hợp kết quả từ bài toán cơ sở để có lời giải của bài toán ban đầu. Tuy nhiên đối với một số bài toán, thì quá trình phân tích đã chứa đựng việc tổng hợp kết quả do đó nếu chúng ta đã giải xong các bài toán cơ sở thì bài toán ban đầu cũng đã được giải quyết. Ngược lại, có những bài toán mà quá trình phân tích thì đơn giản nhưng việc tổng hợp kết quả lại rất phức tạp. b) Ý tưởng Ta có thể tóm tắt ý tưởng chính của phương pháp này như sau: - Chia bài toán đã cho thành một số bài toán con có kích thước nhỏ hơn. - Giải các bài toán con (kích thước giảm đến trường hợp tầm thường hay còn gọi là bài toán cơ sở). - Tổng hợp kết quả để được bài toán ban đầu. Thông thường ta nhận được các bài toán con trong quá trình phân chia có cùng dạng với bài toán ban đầu, chỉ có cỡ là nhỏ hơn. Trong trường hợp như thế thuật toán tìm được có thể biểu diễn một cách tự nhiên bởi thủ tục đệ quy. Vì vậy để hiểu rõ hơn về kỹ thuật chia để trị ta cũng sẽ có một số tìm hiểu về đệ quy ở phần sau.
5. giá sinh viên – ZALO:0973.287.149-TEAMLUANVAN.COM 5 Tải tài liệu tại kết bạn zalo : 0973.287.149Đồ án môn học 11CNTT2 Khổng T 1.1.4. Mô tả giải thuật chung Nếu gọi D & C(R) với R là miền dữ liệu là hàm thể hiện cách giải bài toán theo phương pháp chia để trị ta có thể viết: Void D&C (R){ If (R đủ nhỏ) giải bài toán; Else{ Chia r thành R1,…..Rn ; For (i=1 ; I <=m ; i++) D&C(Ri) ; Tổng hợp kết quả ; } } 1.2. CÁC BÀI TOÁN ÁP DỤNG KỸ THUẬT CHIA ĐỂ TRỊ 1.2.1. Tìm max, min trong dãy Chia mảng A gồm hai nửa, tìm giá trị lớn nhất của mỗi nửa bằng đệ quy. Trả về giá trị lớn nhất trong hai giá trị lớn nhất của mỗi nửa. max(i,j) { if (j-i≤1) return A[i]>A[j]?A[i]:A[j]; else { m1=max(i,(i+j)/2) m2=max((i+j)/2+1,j); return m1>m2? m1:m2; } } 1.2.2. Sắp xếp nhanh Thuật toán QuickSort sắp xếp hai danh sách con bằng đệ quy để kết quả là toàn bộ danh sách được sắp xếp. qsort (low, high) { i=low; j=high; x=A[(low+high)/2]; do{ while (A[i]x) j--; if (i<=j){ swap(A[i],A[j]); i++; j--; } } while (i<=j); if (low
6. giá sinh viên – ZALO:0973.287.149-TEAMLUANVAN.COM 6 Tải tài liệu tại kết bạn zalo : 0973.287.149Đồ án môn học 11CNTT2 Khổng T } 1.2.3. Sắp xếp trộn Sắp xếp trộn bằng cách trộn hai mảng con đã sắp xếp thành mảng kết quả. Ví dụ, để sắp xếp một mảng gồm 16 phần tử, có thể chia mảng này thành hai mảng con, mỗi mảng gồm 8 phần tử, sắp xếp hai mảng con rồi trộn chúng lại thì có được mảng kết quả. Cùng cách này, mỗi mảng con kích thước 8 được chia thành hai mảng con kích thước 4, sắp xếp chúng và trộn lại. Cuối cùng, kích thước các mảng con là 1 thì đã sắp xếp tầm thường. Thủ tục này gọi là “sắp xếp trộn”. Cho mảng kích thước n, để đơn giản giả sử n là số mũ của 2, sắp xếp trộn bao gồm các bước sau: 1. Chia mảng thành hai mảng con kích thước n/2. 2. Trị (giải) mỗi mảng con bằng cách sắp xếp chúng. Trừ khi kích thước mảng con đủ nhỏ, dùng đệ quy để thực hiện điều này. 3. Tổ hợp các lời giải của các mảng con bằng cách trộn chúng vào một mảng. mergesort (n, A[ ]) { if (n>1) { h=[n/2], m = n - h; chép A[1..h] vào U[1..h]; chép A[h+1..n] vào V[1..m]; mergesort(h, U); mergesort(m, V); merge (h, m, U, V, A); } } 1.2.4. Tìm kiếm nhị phân Cho mảng n phần tử đã được sắp xếp tăng dần và một phần tử x. Tìm x có trong mảng hay không? Nếu có x trong mảng thì cho biết vị trí đầu tiên của x trong mảng, ngược lại cho kết quả trả về bằng 0. int RecBinarySearch(int a[max],int First,int Last,int x) { if(First>Last) return (0); int Mid=(First+Last)/2; if(x==a[Mid]) return (Mid); if(x