Bài toán xếp lịch

5 1.3K 17
Bài toán xếp lịch

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài toán xếp lịch

Bài toán xếp lịchLê Thanh HàGiới thiệu bài toánBài toán xếp lịch có một lịch sửphát triển dài, trải qua nhiều sự thay đổi lớn. Kể từ những thế hệ đầu tiên củamáy tính, người ta đã nghĩ đến việc sử dụng máy tính để trợ giúp người xếplịch. Ban đầu đó chỉ là những công cụ trợ giúp cho việc phân công những côngviệc điều hành phối hợp. Sau này mới thực sự được phát triển thành những côngcụ xếp lịch cụ thể.Bài toán xếp lịch được chia thành những lớp bài toán cụ thểsau:- Xếp thời khoá biểu. Thường được sử dụngtrong các trường Phổ thông, Đại học.- Xếp lịch thi. Được quan tâm mỗi khi kì thi tuyển sinh Đại họchoặc thi học kì ở các trường Đại học và Cao đẳng.- Xếp lịch công tác cán bộ. Được sử dụng chủ yếu ở các cơ quan, tổ chức lớn . Tuy nhiên trong bài báo này chúngta chỉ quan tâm đến bài toán xếp lịch thi trong các trường Đại học.Phát biểu bài toánBài toán được phát biểu nhưsau: Vào cuối mỗi một học kì, các trường đại học phải tổ chức một đợt thicho từng khoa hoặc cả trường.Trường có một nhiều phòng thi,các phòng có kích cỡ khác nhau (khả năng chứa thí sinh). Mỗi lớp có thể được chia thành nhiều nhóm thi, mỗi nhóm thi thi trong mộtphòng, mỗi phòng có thể có nhiều nhóm cùng thi. Và tổng số lượng thí sinh củacác nhóm phải nhỏ hơn hoặc bằng kích cỡ của phòng.Kì thi được chia thành các đợtthi. Mỗi nhóm sẽ thi một môn trong một đợt thi. Yêu cầu chặt chẽ: có một số mônthi không được thi cùng đợt với môn thi khác, các nhóm của cùng một lớp (nếu cóthể) phải thi trong cùng một đợt.Ta có thể chia bài toán trên thành 2 bài toán đơn giản hơn:- Phân bổ các nhóm thi vào các đợt thi sao cho chúng không xung đột nhau (không vi phạm ràng buộc). Xây dựng một đồ thị G, với mỗi đỉnh là một nhóm, nối cạnh giữa hai đỉnh mà nhóm của chúng có ràng buộc với nhau, tìm cách tô màu và sắc số p của đồ thị G. Số p là giới hạn dưới của số các đợt thi. Các đỉnh được tô cùng màu có nhóm tương ứng được xếp vào một đợt thi. - Tìm cách xếp các nhóm trong mộtđợt thi (đã tìm được ở trên) vào các phòng thi của trường.Bài toán tô màu đồ thị và sắc số đồ thịCho trước một số nguyên dương P,ta nói rằng đồ thị G có P sắc có nghĩa là: chỉ bằng P màu khác nhau ta có thểtô màu tất cả các đỉnh sao cho 2 đỉnh liền kề bất kỳ có màu khác nhau. Khi số pnhỏ nhất thì ta gọi P là sắc số của đồ thị và việc tìm cách tô P màu lênđồ thị chính là bài toán tô màu đồ thị.Ví dụ: Việc tô màu bản đồ hành chính, ta phải tô màu các nước sao cho: mỗi Quốc gia được tô một màu, hai nước có liền kề (có chung biên giới) không được tô cùng một màu.Ta thiết lập một đồthị G, có tập các đỉnh là tập tất cả các quốc gia trên bản đồ. Hai nước liền kềnhau thì có cạnh nối hai đỉnh tương ứng với nhau. Ta tiến hành tìm sắc số củađồ thị này. Đây là trường hợpriêng của bài toán tô màu đồ thị. Khi đồ thị chỉ là đồ thị phẳng. Người ta đãchứng minh được rằng: chỉ cần nhiều nhất là 4 màu để tô đồ thị này. Từ lâungười ta đã chứng minh bài toán tô màu đồ thị thuộc lớp NP - đầy đủ. Tuy nhiênnếu dùng một chiến thuật thuật hợp lý thì kết quả thu được cũng có thể chấpnhận được.Thuật toán tìm sắc số củađồ thị (Thuật toán 1):Giả sử chúng ta có một đồ thịchứa các đỉnh x và y. G: xy là một đồ thị thu được từ đồ thị G bằng cách thaythế hai đỉnh x và y bằng một đỉnh, đỉnh đó có cạnh nối tới tất cả các đỉnh kềvới đỉnh x, y hoặc cả x lẫn y. Hay là hai đỉnh x và y đã được nhập vớinhau. Đồ thị G - {x} là một đồ thị thu được từ đồ thị G bằng cách loại bỏ đỉnhx cùng với tất cả các cạnh nối tới đỉnh x đó. Một đồ thị trống là đồ thị khôngchứa một đỉnh hay một cạnh nào. Hai đỉnh gọi là kề nhau nếu có cạnh nối vớinhau. Với một đỉnh x bất kỳ, ta xâydựng một tập các bộ 3 như sau:(x,z(1,1), y1)(x,z(1,2), y1)(x,z(1,m1), y1)(x,z(i,1), yi)(x,z(i,2), yi)(x,z(i,mi), yi) (x,z(n,mn), yn)Trong đó đỉnh thứ nhất kề vớiđỉnh thứ hai, đỉnh thứ 2 kề với đỉnh thứ 3. Và không tồn tại một bộ 3 nào mà:đỉnh thứ nhất kề hoặc trùng với đỉnh thứ 3. Từ tập các bộ 3 đó, ta tìm các đỉnhyi sao cho có: mi = max(m1, m2, .,mn) và đặt yi = x. Nếu có nhiều đỉnh y đạtmax ta chọn đỉnh đầu tiên. Ta có thể hình dung: Chọn một đỉnh trong số nhữngđỉnh không kề với đỉnh x, kề với đỉnh (đỉnh trung gian) kề với đỉnh x, có sốđỉnh trung gian là lớn nhất.Các bước của thuật toán (đồ thị Glà dữ liệu vào):Bước 1: Đặt j = 1, H=G.Bước 2: Đặt vjlà đỉnh có bậc cao nhất trong H.Bước 3: Từ vjxây dựng tất cả các bộ 3 như trên và tìm đỉnh x. Nếu không tìmđược x, trong trường hợp không tìm được bộ 3 nào, chọn một đỉnh có bậc lớn nhất không kề với vj.Bước 4: Nhập x vào vjvà quay lại bước 3 cho tới khi không chọn được một đỉnh nào nữa thì quay lạibước 2 với : H=H-{vj}, j=j+1.Bước 5: Khi không còn mộtđỉnh nào còn lại trong H, dựng lại và tô màu i cho tất cả các đỉnh được nhậpvào vi với (1 ≤ i ≤ j). Khi đó j ;à sắc số của đồ thị G.Cài đặt:Dữ liệu:Mảng hai chiều M chứa matrận thể hiện đồ thị n đỉnh.Mảng 1 chiều n phần tử: Colorđánh dấu màu của đỉnh i là Color[i].Mảng 1 chiều n phần tử: Merged,Merged[i]=true nếu đỉnh i đã bị nhập vào 1 đỉnh khác.Sắc số của đồ thị: Cromatic.Một số thủ tục và hàm sửdụng trong chương trình:Procedure Input; Nhập ma trận thểhiện đồ thị G từ file.Procedure Output; Xuất mảngColor[i] là màu của đỉnh i ra file.Function Degree(x:byte):byte; Tínhbậc của đỉnh x, bậc của đỉnh x là số đỉnh chưa bị nhập vào đỉnh khác (hayMerge[I]=false) có cạnh nối với x (M[x,i]=true).Function MaxDegree:byte; Trả lạiđỉnh chưa được tô màu (Color[i]=0) và có bậc lớn nhất (Degree(i) * Max). Function NumIntermediate(x,y:byte):byte;Trả về số đỉnh trung gian giữa hai đỉnh x và y (Đỉnh i là trung gian của x và y(i<>x; i<>y; Merged[i]=false; M[x,i]=true và M[i,y]=True);)Function MaxIntermediate(x:byte):byte;Trả về đỉnh có số đỉnh trung gian với đỉnh x là lớn nhất. NumIntermediate(x,I) * Max.Function Merge(i,x:byte); Nhậpđỉnh I vào đỉnh x. Tìm tất cả các đỉnh chưa nhập vào đỉnh nào có cạnh nối với đỉnh i(Merged[j]=false; M[i,j]=true), nối đỉnh đó với đỉnh x(M[j,x]:=true;M[x,j]:=true), xoá cạnh nối giữa đỉnh đó với đỉnh i(M[i,j]:=0;M[j,i]=0). Function NonMaxDegree(x:byte):byte;Tương tự như hàm MaxDegree, tìm đỉnh khác đỉnh x (i<>x), không có cạnhnối với x (M[i,x]=false) có bậc lớn nhất (Degree(i) * Max).Chương trình chính:Procedure main;var ncol,m,i,mx:byte;Begininput;ncol:=0;{Đặt màu ban đầubằng 0}m:=MaxDegree;{m là đỉnh cóbậc lớn nhất}while(m<>0) do{Nếu đồthị chưa rỗng}begininc(ncol);{Tăng màu,sắc số đồ thị tại vòng lặp này}color[m]:=ncol;{tô màuđỉnh m}mx:=MaxIntermediate(m);? {mx là đỉnh có số đỉnh trung gian với đỉnh m là lớnnhất}if(mx=0) then mx:=Non_MaxDegree(m);{Khôngtìm được đỉnh có đỉnh trung gian với? đỉnh m, tìmđỉnh không kề với m có bậc lớn nhất}while(mx<>0) dobegin Merge(mx,m);{Nhậpmx vào m}color[mx]:=ncol;{Tô màu cho đỉnh mx, mx có cùng màu với đỉnh m}mx:=MaxIntermediate(m);if(mx=0) thenmx:=Non_MaxDegree(m);{Tiếp tục tìm đỉnhmx như trên cho đến khi không còn tìm được nữa}end;m:=MaxDegree;{m là đỉnhcó bậc lớn nhất trong đồ thị còn lại, nếu m=0 thì đồ thị đã rỗng và việc tô màuđã hoàn thành}end;Cromatic:=ncol;{Đặt sắc sốcủa đồ thị là ncol}Ouput;End;Thuật toán trên không phải là mộtthuật toán tốt trong mọi trường hợp, nhưng nó cố gắng để tìm một giải pháp cóthể chấp nhận được để tìm sắc số cho đồ thị. . Bài toán xếp lịchLê Thanh HàGiới thiệu bài toánBài toán xếp lịch có một lịch sửphát triển dài, trải qua nhiều sự. được phát triển thành những côngcụ xếp lịch cụ thể .Bài toán xếp lịch được chia thành những lớp bài toán cụ thểsau:- Xếp thời khoá biểu. Thường được sử

Ngày đăng: 07/09/2012, 11:11

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan