国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

相似度算法在源程序比較中的應(yīng)用

2016-10-18 23:20朱利龍
電腦知識與技術(shù) 2016年21期
關(guān)鍵詞:相似度

朱利龍

"

摘要:在計算機程序課的教學(xué)過程中,時常需要對學(xué)生所提交的源程序進行檢查,特別是源程序的重復(fù)率檢查。純?nèi)斯Ρ炔坏ㄙM時間長,而且效率低下。因此,本文提出利用文本相似度算法解決源程序?qū)Ρ鹊姆椒?,并設(shè)計出相應(yīng)的源程序比較系統(tǒng),來幫助老師從繁重的工作中解脫出來。

關(guān)鍵詞: 相似度;距離編輯算法;源程序?qū)Ρ?/p>

中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)21-0214-01

源程序?qū)Ρ确治鍪且粋€復(fù)雜的過程,不僅需要考慮實用性和考慮準(zhǔn)確性,而且還要兼顧運行效率等問題。在程序上機課的過程性考核中,很多同學(xué)提交的程序源代碼之間重復(fù)率很高。本文借助計算機實現(xiàn)源程序的自動對比,不但可以降低勞動強度,提高工作效率,而且可以減少誤判的可能性,進一步保證源程序?qū)Ρ冉Y(jié)果的正確性。

1 特征提取

要獲取源程序重復(fù)率,判斷是否抄襲程度,可以通過計算源程序的相似率來代替。相似率越高說明源程序重復(fù)部分越多,學(xué)生抄襲的可能性越高。要計算代碼的相似率,就得提取源代碼的有關(guān)特征參數(shù)。

根據(jù)源程序塊粒度大小不同,可以利用源程序中諸如換行符之類的分割符來分解成程序語句,分解得到的每一部分稱為一個程序塊。源程序塊的選擇將在很大程度上影響程序的效率,要比較源程序部分復(fù)制,就必須減少源程序塊的長度。本文將每一個語句看成一個源程序塊,即粒度大小為一條語句。于是,源程序就被分解為語句集合,源程序的相似程度便可以由語句的相似率來計算。因此,對于源程序的對比,選擇程序語句作為源程序的對比粒度塊是具有可行性的。

本文系統(tǒng)采用的是距離編輯算法,利用字符串的模式匹配實現(xiàn)對源程序相似度進行判斷。把兩篇源程序進行全文對比得出相似度;得出相似度后,根據(jù)源程序分隔符把兩源程序分割成逐條語句的,然后對這些語句進行一一對比,得出語句的相似度;比較出來的超過語句的相似度的語句稱為相似句,把相似句對應(yīng)的原句進行紅色標(biāo)記;統(tǒng)計出相似句對應(yīng)原句占原源程序的比例,在比較中可以通過紅色顯示相同。

2 距離編輯算法

距離編輯算法,簡稱為LD算法。該方法主要從源程序中選取一些源程序塊,利用LD算法比較兩源程序塊字符串的相似性,由此得出比較子串相似度(即子串間的距離)。兩個字符串距離就是一個字符串轉(zhuǎn)換成另一個字符串過程中,進行添加、刪除、修改等基本操作的次數(shù),將源程序的語句作為字符串,借助LD算法對比代碼間的距離,然后計算取其占代碼長度的比例作為判斷代碼重復(fù)率,從而即可得到學(xué)生源程序的抄襲程度。如果兩個源程序字符串的距離越大,就說明他們越不同。

該算法對兩個字符串(句子或整篇源程序)進行對比,得出兩個字符串之間的“距離”,然后根據(jù)相似度計算公式計算出兩個字符串之間的相似度。下面給出了在Visual Basic編程環(huán)境下,利用遞歸法實現(xiàn)的算法代碼。

Dim mA() As Byte,mB() As Byte 模塊級變量,存放語句單元

計算編輯距離函數(shù)LD

Public Function LD(ByVal A As String,ByVal B As String) As Integer

mA = StrConv(A,vbFromUnicode) :mB = StrConv(B,vbFromUnicode)

ReDim L(Len(A),Len(B)) As Integer

For i = 1 To Len(A)

L(i, 0) = i

Next

For j = 1 To Len(B)

L(0, j) = j

Next

For I = 1 To Len(A)

For j = 1 To Len(B)

If mA(I - 1) = mB(j - 1) Then

L(I, j) = L(I - 1, j - 1)

Else

L(I, j) = Min(L(I - 1, j - 1), L(I - 1, j), L(I, j - 1)) + 1

End If

Next

Next

LD = L(Len(A), Len(B))

End Function

計算最小值函數(shù)Min

Public Function Min(ByVal A As Integer,ByVal B As Integer,ByVal C As Integer) As Integer

Min = IIF(A > B,A,B) :Min = IIF(Min < C,Min,C)

End Function

3 源程序比較過程

在上述算法的基礎(chǔ)上,本文所設(shè)計的源程序比較系統(tǒng)主要有三個步驟,該系統(tǒng)所對應(yīng)的流程圖見圖1。

1)從存放源程序的數(shù)據(jù)庫里取出程序代碼,構(gòu)成源程序集合。學(xué)生提交的程序代碼都會被提煉出主要部分匯總到程序數(shù)據(jù)庫中。在后期進行代碼對比時,就可以直接從數(shù)據(jù)庫中讀取學(xué)生提交的源代碼,甚至可以用于年級之間學(xué)生編程能力的縱向比較。

2)分割源程序并從中提取特征參數(shù)。本文使用語句結(jié)束標(biāo)記或其他代碼間隔符(如“空格”“換行”等)作為語句的天然分割符,刨除源程序中影響對比操作的無用代碼,即程序通用框架部分,例如集成開發(fā)工具產(chǎn)生的代碼,只保留學(xué)生自己編寫的主要代碼,然后借助系統(tǒng)提取相關(guān)的特征參數(shù)。

3)計算源程序相似度。從上一步分割得到的語句集合,計算出語句之間的編輯距離,其占語句長度的百分比即為語句相似度;將所有語句間的編輯距離累加作為源程序間的編輯距離,其占源程序代碼長度的百分比就是源程序間的相似度;若相似度量值大于教師所給定的臨界值,說明程序代碼間的重復(fù)率過高,學(xué)生存在復(fù)制抄襲的可能,并通過顏色標(biāo)示出重復(fù)部分,從而達(dá)到系統(tǒng)自動對比源程序的目的,而且可以提高學(xué)生的自律性和積極性。

4 總結(jié)

本文所設(shè)計的源程序比較系統(tǒng),在程序類課程的教學(xué)過程中,已經(jīng)作為該類課程過程考核手段之一,不僅幫助老師從繁重的工作中解脫出來,而且提高了學(xué)生的學(xué)習(xí)積極性。在今后將逐步引入數(shù)據(jù)挖掘的處理過程,以便可以實現(xiàn)程序類課程教學(xué)效果的縱向?qū)Ρ龋瑥亩么龠M程序類教學(xué)。

參考文獻:

[1] 李俊民,趙東. 零基礎(chǔ)學(xué)Visual Basic[M].北京:機械工業(yè)出版社,2010.

[2] 劉宏哲. 文本語義相似度計算[M]. 北京:電子工業(yè)出版,2014.

[3] 張憲超. 數(shù)據(jù)結(jié)構(gòu)、算法及應(yīng)用[M].北京:科學(xué)出版社,2012.

[4] 程海濤,王俏,盧亮,等.探索Visual Basic教學(xué)方法改革[J].科技信息,2011(12):225.

猜你喜歡
相似度
改進的協(xié)同過濾推薦算法
模糊Petri網(wǎng)在油田開發(fā)設(shè)計領(lǐng)域的應(yīng)用研究