摘要:本文討論了在線考試系統中優化使用隨機函數的方法,深入研究了在特殊要求下隨機抽題的應對策略,改進了試題重新排列的算法。
關鍵詞:在線考試 隨機函數 隨機抽題
0 引言
隨機抽題是在線考試系統中的核心部分,目前大部分的在線考試系統或無紙化考試系統大都采用了隨機函數實現隨機抽題,但大部分在線考試系統在隨機抽題時存在抽題速度慢、試題覆蓋面不穩定、重點不突出、靈活性差等問題。本文討論了優化隨機抽題的方法,給出了具體的抽題公式和查詢語句。
1 優化使用隨機函數方法研究
原始在線考試系統中,使用隨機函數從題庫中抽取試題,抽題公式為Int(Rnd*M)公式11。在抽取第一題時,直接將題號存放在指定的空數組中,表示抽取成功,以后每抽取一題,將題號和數組中已存在元素進行比較,若存在則抽取失敗,若不存在則抽取成功,并將題號依次存儲在該數組中,直到抽取結束。這種抽題方法的缺陷是時間浪費。這種時間浪費在單機的時候并不明顯,但在B/S模式或C/S模式下,機器越多速度越慢。為了解決重復抽題,避免試題抽取過慢,可采用分段法、分類法和分類分段結合法。
1.1 分段法 分段法是解決重復抽題最簡單的方法,其原理是將題庫中的試題M分成N段,然后從每段中抽取一題,抽取公式為Int(Rnd*(M\\N))+i*(M\\N)(0≤i≤N-1)公式2。分段法的優點顯而易見,可以完全杜絕試題重復抽取,但對題庫中試題的數量有要求,即M>2N,且題庫越大、試題數量越多,抽取效果就越好。在公式2中將M等分成N段,M并不一定能被N整除,也就是說采用公式2試題庫最后M MOD N條試題永遠不會被抽取,為了解決這個問題,可將公式2進行改進,設L=M MOD N,則抽取公式為Int(Rnd*(M\\N+1))+i*(M\\N+1)(0≤i≤L-1)公式3和Int(Rnd*(M\\N))+i*(M\\N)+L(L≤i≤N-1)公式4。分段法避免了重復抽取,但無法控制試題的覆蓋面及難易程度。
1.2 分類法 分類法是在試題庫的結構上添加相應分類字段,字段可以是章節、內容等,將所有試題按章節或內容分類,從每一類中抽取一題,不僅可以解決試題的重復抽取還可以控制試題的覆蓋面。通常將分類字段的類型設置為整形,采用一組連續的整數作為分類字段的取值范圍,這樣方便在試題庫中對分類進行循環查詢,查詢語句為select*from試題庫where分類字段名=i查詢1,設查詢記錄數為Mi,則抽題公式為Int(Rnd*Mi)公式5。分類法可以保證試卷的覆蓋面,但沒有側重點。
1.3 分類分段結合法 分類分段結合法在抽取試題時先分類,然后根據設定給類分段,每類的分段數可以不同,從每個分段中抽取一題。這種方法要求在數據庫中另建分類分段表,存貯每個分類中的抽題數量,數量可以是零,表示該類中不抽取,可以是大于零并小于該類題量的任何一個數Ni,表示將該類分成Ni段,每段抽取一題。從實現角度上看,分段法和分類法使用的是一維循環,分類分段法使用的是二維循環;從訪問數據庫角度看,分段法和分類法僅訪問試題庫,分類分段法除了訪問試題庫外還要訪問分類分段表。
2 特殊要求下隨機抽題的應對策略
在實際應用中,會對試題的抽取有一些特殊的要求。如何合理利用隨機函數,在同一個試題庫中抽取出適合不同系別、專業使用的試卷?隨機函數并不是萬能的,不可能獨立處理以上問題,但是可以創造一個環境,隨機函數在這個環境中通過簡單的計算公式和相應的算法為不同系別、專業抽取需求不同的試卷。為了營造這種環境,通常會通過兩方面來實現:一方面是修改表結構;另一方面是提供一個界面可以針對不同系別、專業設計不同的抽題條件。
2.1 修改表結構 修改表結構通常會在試題庫中添加章、節、難度系數、出題日期、出題教師等字段。添加章、節字段既可以精確抽題范圍,也可以避免抽到未學習的章節。在抽取試題時針對完全學習的章和學習過部分小節的章可以采用不同的查詢方法,對完全學習的章,可以僅對章字段進行查詢:select*from試題庫where章=k查詢2,其中k為章數,對學習過部分小節的章,除了對章字段查詢外還要對節進行查詢,可以針對某一節進行查詢:select*from試題庫where章=k and節=j查詢3,j為節數,也可以針對與所有學習過的小節:select*from試題庫where章=k and節in(j1,j2,…jn) 查詢4,其中j1,j2,…jn為該章中所有學習過的節數。難度系數字段可以根據系、專業學習的難易程度,抽取對應試題的字段,針對不同的章、節的學習程度不同可以有不同的難度系數,以查詢3為例查詢可改為:select*from試題庫where章=k and節=j and難度系數=i查詢5,i為難度系數值。為了抽取方便,可以在試題庫的表結構中添加出題日期字段,字段值為試題編輯日期,可以按日期的范圍抽取出符合條件的試題。每個老師教學的重點會有差別,使用其他教師的試題可能難以評定學生的學習成果,可在試題庫中加入命題教師字段,其值為命題教師工號,可以使用該字段為教師所帶班級抽取試題。
2.2 提供設置抽題條件界面 試題庫雖然需要很多人不斷的維護,但其表結構是相對穩定的,只是在題目數量和內容方面有所變化。但是作為使用在線考試系統的系部、專業,每一年、每一個學期都會變化,他們的抽題要求不盡相同,因此,在考試系統的后臺操作中需要一個設置系部、專業抽題要求的界面,在這個界面中可以通過簡單的選擇為每個系部、專業、班級設置若干抽題條件并存儲在抽題條件數據表中。學生抽題時先判斷學生的系部、專業、班級,然后從抽題條件數據表中讀取對應的抽題要求,并將其轉化成查詢語句,在試題庫中查出符合條件的試題進行抽取。
3 交換算法在隨機抽題中的應用
在大部分在線考試系統中采用現場隨機抽取,試題不完全相同;也有一部分考試系統中采用提前隨機抽取,即在考試前由老師啟動試題抽取程序,考試時所有的考生都使用這套試題,只是試題的順序不同。作為現場隨機抽取的方法前面已經討論了,下面重點討論提前隨機抽取,提前隨機抽取前半部分由老師抽取一套試題和現場抽取實現方法完全相同,后半部分是從抽取的試題當中使用隨機函數重新抽取一遍以保證試題順序不同。為了避免重復抽取,降低實現難度,有些考試系統在改變試題順序時采用了隨機函數結合交換算法的方法,設抽取的題目數量為M,將抽取的所有題號存儲在數組中,下標從1到M,則抽題公式為j=Int(Rnd*M)+1公式6,使用循環For i=1toM,抽題公式放入循環,將下標為i的數組元素值和下標為j的數組元素值互換,這樣可以得到一個新的試題排列。
4 結束語
本文對隨機抽題的方法進行了深入的研究。文中不僅討論了優化使用隨機函數避免抽題重復的方法和滿足特殊抽題要求的應對策略,而且在試題重新排列中引入了交換算法結合隨機函數。靈活運用,可以設計出高效率、靈活性強、大覆蓋面、重點突出的抽題模塊。
參考文獻:
[1]王宇穎,侯爽.題庫系統試卷自動生成算法研究[D].哈爾濱工業大學學報.2003年第35卷第3期.
[2]文嫻.試題庫系統智能組卷與試卷分析的研究[D].湖南師范大學.2007年.
[3]李大輝.題庫系統的智能性分析與研究[J].哈爾濱師范大學自然科學學報.2006年02期.
[4]張月玲,祿樂濱,曹曉敏.一種組卷策略算法[J].微電子學與計算機.2003.(6):18-20.
[5]賈振華,莊連英.淺談網上考試系統中自動抽題的實現[J].大眾科技.2006年03期.
[6]劉亞瓊.基于加強學習的自動組卷算法的研究[D];天津大學.2006年.
[7]王燦輝.計算機自動組卷算法研究[J].福州大學學報.2001.29(增刊):8-10.
注:1.文中公式采用VB程序設計語言,并設題庫中共有試題數M、需抽取試題數N、隨機函數Rnd。