下面具體說說程序代碼進行知網查重的方法,具體如下:以c為例,具體流程大概是,先調用預處理器把注釋干掉,把macro展開,因include <>而弄進來的那波標準庫頭文件特殊標記一下,然后建立CFG(control flow graph)進行知網查重。
因為CFG關心的是變量的值會怎么傳播,所以在中間插入一大堆無副作用的語句是不會有任何效果的,把變量換個名或挪個位置(比如加多一層block)也沒啥卵用。c++的話就會麻煩很多,畢竟在c++里就算a + b這么個簡單語句,因為operator+可以重載,所以指不定執(zhí)行完這個語句就可以把地球都炸了呢,而且這個重載在不同namespace里還可能不同,
比如namespace A是用地球,namespace B是對整個地球播一段愛的供養(yǎng)神馬的……在c++里建立CFG會是個噩夢……程序代碼進行知網查重的方法比較復雜吧!!
程序代碼被知網查重很復雜不過說起來我們的課程比較特殊,因為作業(yè)用的是類ACM的提交系統(tǒng),所以對運行環(huán)境有比較嚴格的限制,這保證了程序代碼知網查重查重的準確率。如果是完全開放性的程序代碼知網查重(即對語言和第三方lib等等都不做限制的話)恐怕會很困難。=== 舉個例子 ===以下是前幾天剛剛檢測到的抄襲代碼片段……下面兩段java代碼被檢測出有高度匹配(右圖里getARGBData函數(shù)只是把二維數(shù)組給復制4份湊成一個三維數(shù)組而已,沒干其他事)……
知網查重時程序代碼一樣被算重復另外一點,為了減少漏網之魚,知網查重時一般都會用低閾值初篩,再人工介入復核。
此外建立回溯機制,比如如果某人現(xiàn)場考試的成績和作業(yè)排名差異較大的話,會觸發(fā)重查,專門為他調低閾值重查一遍+人工復核。不過正因為有人工復核,所以思路相同一般是不至于誤判的,畢竟只要代碼行數(shù)一多,思路再相同,代碼風格上也會有很大差異。