《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于優先級鏈表結構的大學排課算法設計與實現
基于優先級鏈表結構的大學排課算法設計與實現
來源:微型機與應用2012年第21期
蒙煥念,黃良永
(柳州師范高等??茖W校 教務處,廣西 柳州 545004)
摘要: 針對計算機解決大學課程表問題的難點,提出使用優先級鏈表解決課表問題的貪心策略。該策略定義了特有的數據優先級權重,并以權重為基礎生成排課數據的優先級鏈表,以優化設計編碼,實現了一種基于鏈表操作的貪心排課算法。
Abstract:
Key words :

摘  要: 針對計算機解決大學課程表問題的難點,提出使用優先級鏈表解決課表問題的貪心策略。該策略定義了特有的數據優先級權重,并以權重為基礎生成排課數據的優先級鏈表,以優化設計編碼,實現了一種基于鏈表操作的貪心排課算法。
關鍵詞: 大學課程表;鏈表;貪心算法

 大學課程表問題是一種時間表問題TTP(Time-Table Problem),是公認的一種NP(Non deterministic Polynomial)困難問題[1]。幾十年來,人們對計算機排課方法做了很多嘗試,但實現的效果并不是很理想[2]。研究表明,解決大規模的課表編排問題僅靠數學方法是行不通的[3]。排課問題是一個多目標條件組合的優化選擇問題,需要實現課程、學生、老師、上課時間和地點的優化組合,加上大學排課約束因素的多樣性,如教師的特殊要求、課程的特殊要求和學生的特殊要求等,致使排課工作復雜而繁重。
 目前,用于解決課程表問題的算法很多,但各種算法同時也存在自身的不足。如遺傳算法復雜,實現難度大;蟻群算法計算時間長,容易出現停滯現象;模擬退火算法控制參數選擇困難,易發生算法迭代不收斂的情況[4]。通過對多種算法的優劣性分析,本文基于貪心算法的思想,以特定的優先級鏈表為主要數據結構,提出并實現了一種改進的排課算法。
1 解決問題的策略
 貪心算法也稱為“貪心策略”,它對解空間進行搜索時,不是從整體上考慮最優,其所做出的選擇只是在某種意義上的局部最優解。換句話說,貪心算法進行的每一次貪心選擇,都是對當前條件做出的最佳選擇。雖然這種局部最優選擇并不總能獲得整體的最優解,但是通常能獲得近似的最優解。由于算法考慮的信息量較小,一旦選擇后就不需再改變(不回溯),所以算法效率比較高。
 由于大學課程的專業性強,科目多,通常情況下,課程的開課班級和任課老師只能通過人工指定。所以在大學課程表問題中,計算機排課要處理的關鍵問題就是安排課程的上課時間和教室,實現上課時間和教室的沖突檢測和智能選擇。因此,本設計的排課采取的貪心策略為:先為所有的課程、上課時間和教室指定排課優先級[5],然后從優先級最高的課程開始排課,在當前的條件約束下,選擇符合條件的、優先級最高的上課時間和教室。
2 數據結構與算法實現
2.1 數據結構
2.1.1 待排課程信息(Course)

 一般來說,可以從各專業的教學計劃自動生成原始課程信息,然后人工進行合班、指定任課教師,就可以得到待排課程信息,其數據結構可定義如下:
struct Course
{
char CourseID;//課程教學任務號,唯一值
char TeacherID;//教師工號
char ClassWeek;//上課周,格式如1~18
int Period;//總學時
int PeriodPerWeek;//周學時
char Term;//學期
int Number;//人數上限(合班或選課人數)
char RoomType;//請求教室類型
int Priority;//排課優先級權值
char ClassInRow//連排節次,如2節,5節
char FinishFlag;//排課完成標識
struct Course*Next;//下一記錄指針
}
 課程的排課優先級可根據學校的具體情況調整,優先級權值大的課程優先排課。優先級權值由4項數據決定,每一項數據權值系數可能取值為0~9,總權值表達式為:課程性質權值系數×103+教室類型權值系數×102+人數容量權值系數×10+學分權值系數。我校的課程性質和教室類型優先級權值系數設置如表1、表2所示,人數容量系數=人數/40取整,如果人數大于360,則系數取最高權值9;學分權值系數用課程本學期學分直接表示(本學期學分不能大于9)。這樣的優先級設計保證了公共必修課必須先排課,然后優先考慮緊缺教室類型的安排和大班教學排課的情況,如果以上三個條件計算出多個課程的優先級權值都一樣,則由課程的學分決定最終的課程優先級。

2.1.2 課程的上課班級(ClassInCourse)
 該數據是對待排課程進行合班操作后生成的附屬數據,用于指明一個課程的上課學生班級。把該數據與待排課程信息(Course)分開是考慮到當一個課程對應多個上課班級時,使關系數據仍能滿足第三范式約束?!lassInCourse數據結構定義如下:
struct ClassInCourse
{
char CourseID;//課程教學任務號
char ClassID;//班級代碼
struct ClassInCourse*Next;
}
2.1.3 上課時間(ClassTime)
 ClassTime數據結構定義如下:
struct ClassTime
{
char ClassTimeID;//時間編碼
char ChineseCharacter;//時間中文含義
int Priority;//排課優先級
int UsedTimes;//排課使用次數
char IsUsed;//是否排課標志
int Period;//課時數,即該時間段包含小節數
struct ClassTime*Next;
}
 為了獲得時間遍歷的高效性,可對時間編碼進行技巧性設計。若每天有5個上課時段,可用“10”表示“星期一第一大節(1、2節)”、“11”表示“星期一第二大節(3、4節)”、“13”表示星期一第三大節(5、6節),如此類推到其他時段。這樣,一周共35個時段,可定義數組a[45]、a[i]表示一個上課時段,則遍歷一周的時間只需要一個循環:
For(i=10;i<=44;i++)
{
printf(GetChineseCharacter(a[i]));
 //使用編碼獲取時間的中文含義
}
 數組之所以不使用a[1]~a[9],是因為1~9不好作相似運算(相似運算不能區分1和11)。對于各時間段的排課優先級,通常設上午時段和下午5、6節的優先級最高,下午7、8節次之,最后是晚上,星期六和星期天不能排課,IsUsed設為False。為了保證上課時間均勻分布,本設計用UsedTimes記錄各時段被使用的次數(初始為零,每使用一次即加1),對于優先級相同的時間段,按時間使用次數升序排列。排課選擇時間時,優先選擇使用次數少的時間。這樣,通常只需檢測序列前面的幾個時間段,就可以命中合適的時間對象,大大提高了選擇時間的命中率。
2.1.4 排課地點(ClassRoom)

 


 排課地點數據結構定義如下:
struct ClassRoom
{
char RoomID;//教室編號
char RoomType;//教室類型
char RoomName;//教室名稱
int SeatingCapacity;//座位數
int Priority;//排課優先級
int UsedTimes//使用次數
char IsUsed;//是否排課標志
struct ClassRoom*Next;
}
 為了避免出現大教室被小教學班占用的資源浪費現象,設計時按教室容量和教室類型分段劃分教室的使用優先級,如表3所示。

 與時間一樣,設計時記錄了每一個教室的使用次數(UsedTimes),在教室的優先級相同時,優先選擇使用次數少的教室,從而使教室資源得到有效利用,同時也大大提高了選擇教室的命中率。
2.1.5 排課條件約束(Constraints)
 排課條件約束是自動排課非常關鍵的數據結構,因為條件約束很大程度上決定了自動排課的成敗和課表的科學合理性。常見的個性化排課約束條件有:(1)某個老師特定時間(或地點)排課/不排課;(2)某個課程特定時間(或地點)排課/不排課;(3)某個班級特定時間(或地點)排課/不排課;(4)課程的多個上課時間應有合理的時間間隔(1天以上),而上課地點應盡可能相同。
 可以看出,條件約束基本可以分為對課程、教師和學生的三種約束類型,約束項目主要有上課時間和上課教室(或教室類型),其取值格式如表4所示。

 表4中,設“大學英語”、“李四”和“數學101班”分別是約束類型課程表、教師表和學生(班級)表中的唯一主鍵值,約束對象必須是約束類型表(待排課程信息,教師表和學生表)的一個主鍵值。為了簡化程序,邏輯符號只有等于和不等于兩種取值。表中第一行的含義為:安排課程“大學英語”時,上課時間不能選擇“10(星期一第一大節)”。
 除了以上自定義的約束外,排課還應該遵循一些基本的常理性約束,如:(1)每個學生在同一時間只能上一門課;(2)每個教室同一時間只能上一門課程;(3)每個教師在同一時間只能在一個地點上課;(4)每個課程任務同一時間只能在一個地點上課;(5)每門課程安排的課時應等于計劃的總課時等。
2.1.6 課程安排表(TimeTable)
 課程安排表數據結構定義如下:
    struct TimeTable
    {
char CourseID;
char RoomID;//教室編號
char TimeID;//時間編碼
char WeekFlag;//上課周標識
int Period;//不完全占用大節時標注學時數
struct TimeTable*Next;   
}
2.2 算法描述
 根據以上的數據結構來實現排課的貪心算法。算法步驟描述如下:
?。?)初始化。按優先級從高到低生成待排課程鏈表(*Course)、時間鏈表(*ClassTime)和教室鏈表(*ClassRoom);新建課程安排空鏈表(*TimeTable)。
?。?)遍歷課程鏈表。對應遍歷的每一個課程,做以下3個操作:①為當前課程選擇符合條件的、優先級最高且使用次數最少的上課時間(無論是否找到合適的時間,限定每個課程對時間鏈表的匹配次數不超過10次)。如果找到符合條件的課程,則把課程和時間加入TimeTable中,時間段使用次數加1;否則,說明該課程無法安排,跳轉到下一門課程,重新執行3個操作;②對當前課程排定的時間,選擇符合條件的、優先級最高且使用次數最少的教室(無論是否找到合適的教室,限定每個課程對教室鏈表的匹配次數不超過10次)。如果找到符合條件的教室,則把教室派給當前課程,教室使用次數加1;否則,說明該課程沒有教室可排,跳轉到下一門課程,重新執行3個操作;③如果當前課程已排時間節次小于課程的周課時,時間指針跳轉到下一天時間段(保證同一門課上課時間間隔一天以上),繼續對當前課程執行3個操作;否則,說明該課程已經安排完畢,調整時間和教室鏈表排序,跳轉到下一門課程(Course=Course->Next),重新執行3個操作。
 (3)課程鏈表遍歷完成,返回*TimeTable,算法結束。
3 算法復雜度分析及使用效果
3.1 復雜度分析

 本算法為每個課程的上課時間和教室進行了貪心選擇,核心是使用了三層循環嵌套。通常情況下,三層循環嵌套算法的時間復雜度為O(n3)。由于算法根據預先設定的優先級規則生成時間鏈表、教室鏈表,對時間和教室采取先排序,后選擇的貪心策略,使算法總能在鏈表序列前部命中對象,保證循環每次命中目標所遍歷鏈表節點的個數不大于10(如果超過10次未命中則跳出循環)。因此,算法的時間復雜度接近O(n)。
3.2 使用效果
 本算法在安排課程的上課時間和教室時,總是選擇優先級高且利用率低的時間和教室對象,保證了資源利用的均衡化。但如果學校的資源確實緊缺或排課約束條件苛刻,則必須調整時間和教室的優先級規則,更改排課約束條件,再進行排課。如仍找不到合適的時間和教室排課,則需要人工調整排課。
 本文使用Visual C++6.0和SQL Server2000實現本算法,對我校42個課程、12個班級、36個教室進行排課,每周排課總次數為142,在P4雙核2.8、內存1 GB的機器上運行,所有課程都成功排課,共耗時3.505 s。此外,還對我校2010~2011年第二學年的1056個課程、130個班級、305個教室級進行完全編排,整個過程耗時60.121 s,比我校正在使用的某公司教務管理系統的排課耗時少了15.826 s。實踐證明,本文排課算法能夠較好地解決大學排課問題,是一個實用而高效的排課算法。
參考文獻
[1] 熊焱,王莉,李大衛,等.大學課程表問題的模型與算法[J].鞍山科技大學學報,2005,28(1):26-29.
[2] 高喜瑪,張萍.大學自動排課系統內核算法設計[J].南陽師范學院學報(自然科學版),2003,2(12):55-58.
[3] 潘以鋒.高校智能排課系統的算法[J].上海師范大學學報(自然科學版),2006,35(5):31-37.
[4] 張晶,李廣軍,徐娟.智能排課算法綜述[J].西南民族大學學報(自然科學版),2009,35(3):675-678.
[5] 馮思玲,李艷梅,梁瑜.基于分治和貪心相結合的排課算法研究[J].現代計算機(專業版),2009(3):11-13.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲一区视频在线观看视频| 欧美视频在线免费看| 国产精品99久久久久久人| 一本色道久久综合亚洲精品不卡| 亚洲精品欧美专区| 中文国产成人精品| 久久精品日韩欧美| 先锋影音久久| 在线观看欧美亚洲| 在线电影一区| 欧美日韩免费高清| 国产午夜精品一区理论片飘花| 欧美精彩视频一区二区三区| 国产日韩欧美中文在线播放| 久久精品免费| 久久精品网址| 欧美日韩三区| 一区二区激情小说| 欧美精品在线观看一区二区| 极品尤物av久久免费看| 午夜视频精品| 欧美区二区三区| 欧美高清视频一区| 一区二区三区产品免费精品久久75| 国产日韩久久| 欧美日韩精品国产| 国产精品一区二区在线观看网站| 国产精品男人爽免费视频1| 国产精品理论片在线观看| 最近看过的日韩成人| 欧美xart系列高清| 欧美激情一二区| 欧美精品v日韩精品v国产精品| 国产精品亚洲综合天堂夜夜| 国产精品国产馆在线真实露脸| 亚洲夜间福利| 欧美日韩在线高清| 免费日本视频一区| 亚洲一二三区在线观看| 久久久久久久综合| 欧美日韩国产bt| 久久久99国产精品免费| 欧美高清自拍一区| 国产精品高潮粉嫩av| 久久国产欧美精品| 欧美超级免费视 在线| 欧美一区二区三区播放老司机| 国产精品亚洲综合一区在线观看| 欧美三级欧美一级| 欧美亚洲成人精品| 国产精品尤物福利片在线观看| 精品999成人| 欧美日韩精品一区二区| 久久亚洲综合网| 一区二区国产在线观看| 欧美成人精品福利| 国产专区欧美精品| 国产夜色精品一区二区av| 在线观看日韩专区| 亚洲国产成人av| 欧美顶级艳妇交换群宴| 欧美韩国日本一区| 亚洲日韩欧美视频一区| 久久亚洲综合| 欧美成人午夜| 制服丝袜激情欧洲亚洲| 欧美日韩中文字幕综合视频| 国产精品国产三级国产专区53| 欧美制服丝袜第一页| 久久久久久久久伊人| 国产精品视频你懂的| 亚洲电影自拍| 中日韩美女免费视频网址在线观看| 免费亚洲电影在线观看| 欧美视频在线观看免费网址| 亚洲国产成人一区| 国产精品日韩在线一区| 尤物yw午夜国产精品视频明星| 欧美高清视频一区二区三区在线观看| 国产综合在线看| 国外视频精品毛片| 夜夜躁日日躁狠狠久久88av| 欧美成人午夜剧场免费观看| 亚洲国产精品久久久久秋霞蜜臀| 亚洲二区在线| 亚洲国产精品福利| 亚洲欧美日韩国产中文| 欧美午夜精品伦理| 久久不射2019中文字幕| 一区在线电影| 美女网站在线免费欧美精品| 亚洲一级片在线观看| 亚洲日本电影| 在线观看91久久久久久| 国产女精品视频网站免费| 免费在线成人av| 久久精品99国产精品| 久久aⅴ国产欧美74aaa| 欧美日韩高清在线| 在线日本高清免费不卡| 久久国产精品一区二区三区四区| 亚洲人人精品| 欧美日韩国产综合新一区| 欧美视频在线观看一区| 亚洲综合另类| 欧美日韩大片一区二区三区| 久久亚洲影院| 国产欧美精品xxxx另类| 国产精品入口麻豆原神| 国产精品一区二区黑丝| 一区二区三区在线观看欧美| 国产精品久久久久久户外露出| 香港久久久电影| 一区福利视频| 欧美高清视频免费观看| 欧美视频亚洲视频| 中文欧美在线视频| 国产女人aaa级久久久级| 欧美成人综合网站| 男人的天堂亚洲在线| 欧美日本免费| 欧美日韩精品伦理作品在线免费观看| 国产日韩综合一区二区性色av| 欧美日韩在线播放三区| 红桃视频成人| 欧美日韩不卡视频| 欧美视频中文在线看| 久久久999精品视频| 国产精品久久久久毛片软件| 在线观看成人av| 亚洲一区国产一区| 亚洲欧美日本视频在线观看| 欧美一区二区三区视频在线观看| 欧美日韩国产精品专区| 久久久青草婷婷精品综合日韩| 亚洲伦理中文字幕| 国产精品欧美久久久久无广告| 欧美极品一区| 欧美寡妇偷汉性猛交| 久热这里只精品99re8久| 国产精品久久久久久av下载红粉| 国产精品99久久久久久人| 欧美理论片在线观看| 国产精品亚洲一区二区三区在线| 在线看无码的免费网站| 国产精品福利网站| 国产一区二区精品丝袜| 久久久激情视频| 国产在线不卡精品| 一区二区三区在线免费播放| 精品69视频一区二区三区| 国产日本精品| 亚洲字幕一区二区| 欧美成人免费网站| 欧美国产1区2区| 久久视频在线免费观看| 亚洲视频中文| 欧美大片第1页| 亚洲一区免费在线观看| 亚洲精品美女91| 国产日韩精品入口| 国产精品亚洲综合一区在线观看| 精品成人久久| 久久一区激情| 精品福利免费观看| 亚洲国产成人高清精品| 国产精品私拍pans大尺度在线| 欧美午夜www高清视频| 国产欧美视频在线观看| 国产精品久久激情| 极品少妇一区二区三区| 亚洲深夜福利网站| 国产精品久久久久久亚洲调教| 美女性感视频久久久| 久久爱另类一区二区小说| 亚洲一区二区三区四区五区黄| 亚洲性av在线| 有坂深雪在线一区| 亚洲乱码精品一二三四区日韩在线| 欧美视频日韩视频在线观看| 欧美性猛交视频| 99在线精品视频在线观看| 99riav国产精品| 亚洲破处大片| 亚洲图片欧洲图片av| 欧美精品色一区二区三区| 篠田优中文在线播放第一区| 日韩一级黄色av| 亚洲激情中文1区| 国产欧美韩国高清| 亚洲精品免费看| 亚洲国产高清在线观看视频| 欧美成人综合| 国产精品扒开腿爽爽爽视频| 欧美日韩精品是欧美日韩精品| 欧美一级黄色录像| 亚洲午夜电影网| 国产主播一区二区三区| 亚洲视频精品在线| 欧美激情精品| 欧美多人爱爱视频网站| 国产精品人成在线观看免费| 欧美激情片在线观看| 国产精品你懂的在线| 欧美国产日韩亚洲一区| 欧美黄色免费| 欧美精品一二三| 国产精品v片在线观看不卡| 国内精品美女av在线播放| 136国产福利精品导航网址应用| 亚洲精品久久| 国产精品jizz在线观看美国| 国产精品av一区二区| 国产欧美精品日韩| 麻豆国产va免费精品高清在线| 欧美另类变人与禽xxxxx| 宅男精品视频| 亚洲欧美视频一区二区三区| 在线亚洲欧美专区二区| 亚洲国产高清自拍| 欧美成人精品1314www| 日韩视频免费看| 亚洲欧美在线免费| 欧美大片一区| 国产精品一区视频网站| 欧美日韩极品在线观看一区| 日韩视频免费在线| 亚洲人成绝费网站色www| 欧美中文字幕久久| 亚洲欧美另类在线| 欧美成人一区二区| 欧美亚韩一区| 久久精品国产成人| 国产欧美日韩视频在线观看| 欧美91视频| 亚洲一区二区精品在线观看| 在线精品亚洲一区二区| 欧美尤物巨大精品爽| 欧美成在线观看| 香蕉av777xxx色综合一区| 久久久久免费观看| 亚洲美女中文字幕| 久久精品视频在线免费观看| 亚洲中字黄色| 久久嫩草精品久久久精品一| 亚洲一二三区在线观看| 欧美a级大片| 欧美日韩国产精品一区二区亚洲| 亚洲国产日韩综合一区| 欧美丰满少妇xxxbbb| 亚洲电影天堂av| 黄色免费成人| 欧美+日本+国产+在线a∨观看| 久久精品国产69国产精品亚洲| 亚洲高清一区二| 最新国产拍偷乱拍精品| 欧美日韩国产精品成人| 国产视频在线观看一区二区三区| 亚洲色图在线视频| 欧美午夜片在线免费观看| 另类天堂视频在线观看| 午夜天堂精品久久久久| 欧美激情视频一区二区三区免费| 国产精品视频在线观看| 欧美体内she精视频在线观看| 国产精品高潮视频| 亚洲宅男天堂在线观看无病毒| 欧美激情中文字幕一区二区| 1024成人网色www| 亚洲福利视频在线| 久久国产精品久久久久久久久久| 国产视频一区三区| 国产精品揄拍500视频| 欧美亚洲在线| 亚洲一区3d动漫同人无遮挡| 亚洲国产精品一区制服丝袜| 亚洲美女av网站| 国产精品亚洲аv天堂网| 一区免费视频| 欧美日韩一区二区国产| 在线观看精品视频| 欧美一区二区精品久久911| 久久久久久色| 亚洲欧美在线视频观看| 亚洲伊人久久综合| 日韩午夜激情电影| 欧美日韩在线一区二区三区| 亚洲视频自拍偷拍| 免费成人网www| 欧美精品在线免费| 久久www免费人成看片高清| 欧美日韩123| 国产精品xnxxcom| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲日韩第九十九页| 91久久在线视频| 欧美精品久久一区二区| 六月丁香综合| 国产精品你懂的在线欣赏| 国产精品亚洲综合一区在线观看| 久久综合精品国产一区二区三区| 国产精品扒开腿做爽爽爽软件| 亚洲一区二区精品在线观看| 欧美日产国产成人免费图片| 国产亚洲免费的视频看| 一区二区91| 中国成人在线视频| 亚洲毛片在线看| 久久一区二区三区四区五区| 国产欧美日韩免费| 亚洲伦理中文字幕| 亚洲破处大片| 欧美电影免费观看| 欧美精品一区二区精品网| 欧美日韩国产va另类| 久久天天躁狠狠躁夜夜爽蜜月| 在线激情影院一区| 久久精品国产亚洲一区二区| 国产精品久久久久天堂| 欧美日韩在线直播| 欧美日韩三级视频| 欧美成人性网| 老鸭窝亚洲一区二区三区| 欧美系列一区| 亚洲乱亚洲高清| 欧美亚洲第一区| 国产农村妇女毛片精品久久麻豆| 欧美日韩国产综合视频在线观看中文|