999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

代碼抄襲檢測中串匹配算法的比較

2014-09-04 01:33:33孫琳琳
長春工業大學學報 2014年6期
關鍵詞:文本檢測

朱 波, 鄭 虹, 孫琳琳

(長春工業大學 計算機科學與工程學院, 吉林 長春 130012)

代碼抄襲檢測中串匹配算法的比較

朱 波, 鄭 虹*, 孫琳琳

(長春工業大學 計算機科學與工程學院, 吉林 長春 130012)

對程序代碼抄襲檢測中多種字符串匹配算法的實現原理進行了描述,給出匹配算法計算相似度的公式以及相對應的時間復雜度。由于字符串匹配算法在程序代碼抄襲檢測中應用較為廣泛,對其中的B-F(Brute-Force)樸素算法、LCS(Longest Common Subsequence)最長公共字串算法、GST(Greedy String Tiling)貪心字符串匹配算法等經典算法的總結比較是一件有意義的研究工作。

字符串匹配算法; 抄襲檢測; 最長公共字串; GST

0 引 言

隨著信息社會的發展,眾多應用領域中都涉及到了字符串的匹配研究,如在程序抄襲檢測[1]、知識產權保護[2]、網頁搜索[3]等領域都有串匹配算法的應用。在程序類設計課程中,作業抄襲現象普遍存在。澳大利亞蒙納什(Monash)大學對其學生中的代碼抄襲現象進行調查統計顯示:高達85.4%的學生承認抄襲過他人的作業[4]。為扼制計算機課程教學中的不良學風,高效率的代碼抄襲檢測研究日趨重要。而字符串相似性匹配算法的研究以及相似度的計算是抄襲檢測中的關鍵問題。

目前,字符串相似性匹配算法有很多,如B-F算法、KMP算法、動態程序設計算法、GST算法等。這些匹配算法因為其實現的原理不同,算法效率和應用的領域也有一些差異。

1 相關定義

在程序代碼抄襲檢測過程中,程序之間的相似程度可以通過相似度的值來判定。程序間的相似度越高,程序間存在抄襲的可能性也就越大;相反,相似度越低,抄襲的可能性就越小。但是,不能僅僅因為個別語句的相同就判定為抄襲,只有當相似度的值超過某個設定的閾值時,才能判定為抄襲。

1.1基本概念

簡單介紹幾個在算法中用到的概念:

1)文本串(也稱為主串):主要是指在其中查找子字符串的相對較長的字符串T。

2)模式串(也稱為模式):主要是指在文本串T 中查找的需要驗證匹配的字符串P。

3)精確串匹配算法:查找與模式串完全相等的子串的出現位置的算法。

4)近似串匹配算法:查找與特定模式串在一定范圍內相似的所有子串的算法。

1.2相似度定義

Yamamoto T[5]等給出兩個軟件系統的相似度的定義。對于兩個軟件P和X,軟件P是由元素P1,P2,…,Pm組成,P的集合構成表示為:{P1,P2,…,Pm}。同樣,軟件X由元素X1,X2,…,Xn組成,其元素的集合表示為{X1,X2,…,Xn}。其中P,X中的元素可以表示軟件P和X中的文件或者代碼行。

假設能夠求出Pi與Xj(1≤i≤m且1≤j≤n)間的匹配,用集合Rs表示所有的匹配對(Pi,Xj),其中Rs?P×X,則P和X的相似性S的定義為:

(1)

根據式(1)可以看出,相似性S為一個比值,它是由Rs中元素的個數比上P和X中元素的個數和所得。如果Rs較小,相應的S也較小。當Rs=?時,S=0;當P和X完全相等的時候,此時S=1,則說明軟件P和X存在抄襲現象。

目前對于相似度沒有統一的定義,而程序代碼的相似度與上述軟件系統的相似度相同,故可將相似度定義為:定量的比較兩個程序源代碼之間的相關性,其結果一般用一個具體的數值來表示。

2 常見串匹配算法比較研究

2.1 B-F算法

B-F匹配算法(樸素算法)即蠻力匹配算法,算法比較簡單,很適合應用于一些小規模的串匹配。

B-F算法是將模式串和文本串的字符元素分別放置在數P[m-1],T[n-1]中,數組下標從0開始,并且有n≥m。從文本串T=“T0,T1,Tn-1”的第一個字符T0開始與模式串P=“P0,P1,…,Pm-1”的第一個字符P0對應比較,如果相等,就繼續比較T和P后面的字符;如果不相等,從文本串的第二個字符P1開始重新與模式串的第一個字符P0進行比較,如此循環往復直至匹配結束。如果到匹配結束時,存在模式串與文本串中有一段連續的字符序列,則表示匹配成功,此時返回模式串P中第一個匹配字符在文本串中的起始匹配位置下標;如果直到匹配結束時,不存在一個和模式串相同的字符串,則代碼匹配不成功,返回一個-1。

由算法的描述可知,算法的時間復雜度為O(m(n-m+1)),算法效率并不是太高。因為B-F算法屬于精確字符串匹配算法,其多應用于小規模的文本檢測等精準度要求較高的領域。

2.2KMP算法

KMP(Knuth-Morris-Pratt)算法是對B-F算法的一種改進算法,由DEKnuth,JHMorris和VRPratt在1977年提出。

KMP算法主要是對樸素算法做了一些改進,當發現文本串和模式串字符的某次匹配比較不相等的時候,文本串的查找指針不需要回溯到串起始位置,而是通過已經得到的“部分匹配”結果將模式串向右進行滑動若干距離,然后再從滑動后的新位置繼續進行比較。例如,文本串T=“acacbbc”,模式串P=“acbb”,利用KMP算法匹配過程如圖1所示。

在第一輪匹配過程中,當文本串第3個字符和模式串中第3個字符不相等時,模式串向右“滑動”。在第二輪匹配中就是用模式串P的第1個字符代替第3個字符與文本串的第3個字符進行比較,依次完成匹配過程。

圖1 KMP算法匹配過程

通過對KMP算法的描述可知,算法的時間復雜度近似為O(m+n),其最大的特點是文本串不需要回溯,具有很高的時間優越性。在文本檢測和網絡安全方面都有應用,是一種效率較高的精確串匹配算法。

2.3LCS算法

LCS算法,又稱最長公共子序列算法[6-7],其主要用于解決LCS問題。

LCS算法是將給定的兩個字符串(文本串和模式串)分別刪去零個或者多個字符,在不改變剩余字符順序的同時,所得到的長度最長的相同字符序列。LCS即為文本串和模式串的最長公共子序列,除它之外,再也無法找出比它更長的子串。因為在匹配時兩個串可以有多個長度相同的最大公共子序列,所以LCS可以有多個。例如,文本串T=“abcdefghmnopq”,模式串P=“mabxypqfgh”,利用LCS算法匹配結果如圖2所示。

圖2 LCS算法匹配結果

根據式(1)得到LCS算法相似度計算式(2),并根據公式計算得到文本串T和模式串P的相似度S為:

(2)

由算法相關描述可知,LCS算法的時間復雜度為O(m+n),已經證明LCS算法的時間復雜度不能小于O(mlog(n))[8]。

LCS算法是有序的,也就是說得到的所有子串都是嚴格有序的,這就對于改變書寫順序的模式串的檢測失去了作用。LCS算法多應用于文件版本比較以及疾病監測等領域。

2.4動態程序設計

動態程序設計(Dynamic Programming)[9]曾應用于YAP2系統中對兩個標記串進行分析比較。該算法也屬于LCS算法,可解決LCS問題。

動態程序設計算法是對于將要進行匹配分析的字符串(模式串),在其字符中間插入空格,以此進行排列操作。經過處理后,就能得到一系列的排列。然后再將處理后得到的排列進行比較分析,最終得到比較后的最大匹配結果。例如,文本串T=“chinena”,模式串P=“china”,是兩個長度不同的字符串,可以通過插入空格的方式讓文本串和模式串的長度相同。即在模式串P中插入空格,讓其和文本串T的長度相同,如此可以有多種不同的排列。

用sequence表示此時排列中得到最大匹配值的字符序列。則對于上述兩個排列“chin”和“na”為兩個最大的sequence,對應的值分別為4,2。

利用動態程序設計對文本串T=“abcdefghmnopq”,模式串P=“mabxypqfgh”進行匹配操作的結果和LCS算法相同,計算得到的相似度也一樣。

2.5 Rabin-Karp算法

Rabin-Karp是一個用于解決字符串匹配問題的隨機算法[10]。Rabin-Karp算法相對于樸素算法的改進之處是有點使用hash的思想。把模式字符串進行預處理,并進行求mod操作,文本串進行逐個簡單的hash映射,然后進行mod比較。

Rabin-Karp算法首先是定義一個散列函數,同時得到模式串的散列值,故在文本串中,只有那些與模式串具有相同散列值的子串才有可能與模式串相匹配,此時就沒有必要考察文本串中同等長度的所有子串。只有當兩者的散列值相等時,才進行模式串和文本子串逐個字符的比較。故Rabin-Karp算法首先要進行預處理,生成散列值,這需要一定的時間代價。

通過對Rabin-Karp算法的描述,Rabin-Karp算法的預處理時間為O(m),其匹配時間在最壞的情況下為O(m(n-m+1))。雖然Rabin-Karp算法在最壞的情況下時間復雜度和樸素算法相同,但它的平均時間復雜度卻接近線性,在實際應用中往往比樸素算法快很多,應用范圍還是很廣的。

2.6 GST算法

GST算法是一種貪婪字符串匹配算法[11],算法是由澳大利亞悉尼大學的Wise[12]最先提出的,用于解決字符串的相似問題。在說明GST算法之前,首先給出幾個基本概念。

1)最大匹配(Max-Match):是指在匹配過程中,從i處開始的模式串子串Pi與從j處開始的文本串子串Tj的最長可能匹配。

2)Tiles:表示模式串P和文本串T的最大匹配的集合,每個tile都是唯一不能重復的包含同一個位置的字符。

3)最小匹配長度(Min-Match-Length):GST算法進行串匹配時設定所允許的最小值,如果匹配長度小于該值,則舍棄。其一般取大于1的整數。

GST算法的基本思想是首先通過嵌套循環,盡可能的擴展文本串和字符串中未加標記的字符,將每次的匹配長度和上次記錄進行比較,直至匹配過程結束。將所有Max-Match集合中的元素放入到tiles中,該集合包含所有大于最小匹配長度的文本串和模式串的匹配子串。將所有匹配字符串的長度和記為sum,模式串和文本串相似度使用式(3)計算,其中P.length和T.length分別為模式串和文本串的長度。

(3)

例如:對于文本串T=“abcdefghmnopq”,模式串P=“mabxypqfgh”,利用GST算法匹配結果如圖3所示。

圖3 GST算法匹配結果

根據式(3)計算文本串T和模式串P的相似度S(P,T)=0.348,與LCS算法的結果比較可知GST算法的匹配分析因不再受字符串順序的制約,具有較高的匹配準確性。

由上述GST算法的描述可知,GST算法在最好的情況下時間復雜度為O(n2),最壞的情況下時間復雜度為O(n3)。即使兩個字符串順序改變了,GST仍能進行相關的查找匹配。目前在抄襲檢測系統中應用較為廣泛,但因為GST算法采用兩個串逐個字符比較的方法,算法的時間復雜度較大。故為了節約時間開銷,引入KR算法對GST算法進行改進,改進后的RKR-GST算法在最好的情況下時間復雜度變為O(n),而最壞的情況下時間復雜度仍為O(n3)。

3 結 語

綜上所述,B-F算法和KMP算法屬于精確字符串匹配算法,對匹配的精準度要求較高,在程序代碼抄襲檢測中的應用范圍也相對較小。LCS算法和動態程序設計算法屬于近似字符串匹配算法,其匹配檢測效率較高。但因為是基于有序的匹配算法,在檢測改變順序的字符串匹配問題時,匹配效率會受一定的影響。所以在程序抄襲檢測中,由于LCS算法得到的公共子序列是嚴格有序的,對于改變代碼塊的順序、語句的順序、操作符和操作數的順序等程序抄襲手段檢測效率較低。

而GST算法因為屬于無序匹配算法,能夠解決LCS算法存在的問題,故具有較高的檢測效率,同時它也能解決重復出現的語句查找問題。因此,就程序抄襲檢測這一應用領域來說GST算法具有較好的性能。此外,GST算法在信息檢索、文本編輯、信息提取等領域也有重要的應用。而引入K-R算法思想對GST算法進行改進的RKR-GST算法也因其更加優越的效率性能而被廣泛應用。

[1] 鄧愛萍,徐國梁,肖奔.基于串匹配方法的源代碼復制檢測技術研究[J].科學技術與工程,2007,7(10):1671-1819.

[2] Schleimer S, Wilkerson D S, Aiken A. Winnowing: Local Algorithms for Document Fingerprinting[C]//Proc. of ACM SIGMOD International Conference on Management of Data. San Diego, California, USA:[s.n.],2003.

[3] 薛曄偉,沈鈞毅,張云.一種編輯距離算法及其在網頁搜索中的應用[J].西安交通大學學報,2008,42(12):1450-1454.

[4] Georgina C, Mike J. Source-code plagiarism: A UK academic perspective[R]. Research Report RR-422. Department of Computer Science,University of Warwick,2006.

[5] Yamamoto T, Matsushita M, Kamiya T. et al. Measuring similarity of large software systems based on source code correspondence[C]//6th Intl PROFES (Product Focused Software Process Improvement) conference, PROFES.2005.

[6] 于海英.字符串相似度度量中LCS和GST算法比較[J].電子科技,2011,4(2):101-103.

[7] Irvine V C, Samir Khuller. Design and Analysis of Algorithms Lecture Notes[R]. Dept. of Computer Science, University of Maryland,2003.

[8] Aho A V, Hirschberg D S, Ullman J D. Bounds on the complexity of the longest common subsequence problem[J]. J Assoc. Comput. Mach.,1976,23(1):1-12.

[9] David Gitchell, Nicholas Tran. Sim: A Utility for Detecting Similarity in Computer Programs[C]//Proceedings of the 30th SIGCSE Technical Symposium, March.1999.

[10] Richard M Karp, Michaelo Rabin. Efficient randomized pattern-matching algorithms[J]. IBMJ. Res. Develop,1987,31(2):249-260.

[11] Matthew Szuskiewicz. Automatic Plagiarism Detection in Software code[C]//Information and Communications Technology.2003.

[12] Michael J Wise. String Similarity Via Greedy String Tiling and Running Karp-Rabin Matching[D]:[Master’s Degree Thesis]. Sydney: University of Sydney,1993.

Comparative study of string matching algorithm for detecting plagiarism

ZHU Bo, ZHENG Hong*, SUN Lin-lin

(School of Computer Science & Engineering, Changchun University of Technology, Changchun 130012, China)

The program code plagiarism detection in a variety of string matching algorithm implementation principle are described, given the similarity matching algorithm formula and corresponding to a time complexity. The string matching algorithm is widely used in detecting plagiarism in program code, the B-F (Brute-Force) simple algorithm, LCS longest common string algorithms, GST greedy string matching algorithm summary is a meaningful comparison study.

string matching algorithm; copy detection; the longest common string; GST (Greedy String Tiling).

2014-05-25

吉林省科技廳自然科學基金資助項目(20130101060JC); 吉林省教育廳“十二五”科學技術研究項目(2014132, 2014125)

朱 波(1988-),男,漢族,山東五蓮人,長春工業大學碩士研究生,主要從事軟件工程方向研究,E-mail:xuesong_502@126.com. *通訊作者:鄭 虹(1974-),女,漢族,吉林長春人,長春工業大學副教授,博士,主要從事人工智能方向研究,E-mail:hollytz@126.com.

TP 301.6

A

1674-1374(2014)06-0672-05

猜你喜歡
文本檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
初中群文閱讀的文本選擇及組織
甘肅教育(2020年8期)2020-06-11 06:10:02
在808DA上文本顯示的改善
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
小波變換在PCB缺陷檢測中的應用
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學隱喻
主站蜘蛛池模板: 亚洲一区二区精品无码久久久| 日韩在线影院| 91精品情国产情侣高潮对白蜜| 国产主播一区二区三区| 亚洲欧美日本国产综合在线| 91精品情国产情侣高潮对白蜜| 一区二区影院| 亚洲人成人伊人成综合网无码| 日韩欧美高清视频| AV网站中文| 国产一区在线观看无码| 99久久精品免费观看国产| 一边摸一边做爽的视频17国产| 亚洲区第一页| 日韩精品一区二区三区免费| 免费一极毛片| 萌白酱国产一区二区| 国产精女同一区二区三区久| 久久99精品久久久久久不卡| 亚洲男人天堂2020| 日本尹人综合香蕉在线观看| 内射人妻无码色AV天堂| 亚洲无码高清一区| 亚洲国产成人自拍| 国产精品网址在线观看你懂的| 国产亚洲视频中文字幕视频| 怡红院美国分院一区二区| 天天摸夜夜操| 毛片在线播放网址| 日本欧美精品| 亚洲欧洲天堂色AV| 欧美国产视频| 五月婷婷伊人网| 日韩av在线直播| 波多野结衣二区| 国产va欧美va在线观看| 日韩在线1| 亚州AV秘 一区二区三区| 中文成人在线视频| 2021国产v亚洲v天堂无码| 波多野结衣在线se| 经典三级久久| 日本在线免费网站| 国产精品免费p区| 尤物午夜福利视频| 四虎亚洲精品| 狼友av永久网站免费观看| 久久这里只精品热免费99| 欧美国产精品不卡在线观看| 亚洲天堂日韩在线| 亚洲av无码人妻| 99爱视频精品免视看| 国产亚洲视频中文字幕视频| 无码电影在线观看| 在线欧美a| 91麻豆精品国产91久久久久| 国产成人乱无码视频| 国产日韩精品欧美一区灰| 久久性视频| 国产系列在线| 日本在线欧美在线| 福利姬国产精品一区在线| 久久亚洲AⅤ无码精品午夜麻豆| 91亚洲影院| 在线视频亚洲欧美| 婷五月综合| 六月婷婷激情综合| 色综合天天视频在线观看| 国产精品三级av及在线观看| 国产自视频| 日韩欧美国产成人| 亚洲第一视频免费在线| 日本不卡在线视频| 国产精品七七在线播放| 国产成人综合日韩精品无码不卡| 亚洲国产精品美女| 综合色区亚洲熟妇在线| 国产亚洲美日韩AV中文字幕无码成人| 精品综合久久久久久97| 国产极品美女在线播放| 亚洲成肉网| 国产免费久久精品99re不卡|