国产精品观看在线亚洲人成网_久久激情国产_久久华人_狠狠干天天操_91一区二区三区久久久久国产乱_1区2区3区国产

首頁 > 文章中心 > 貪婪算法的基本原理

貪婪算法的基本原理

前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇貪婪算法的基本原理范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。

貪婪算法的基本原理范文第1篇

關鍵詞:壓縮感知;圖像快速重建;稀疏表示;小波分解;正交匹配追蹤

中圖分類號:TP391.41 文獻標識碼:A 文章編號:1007-9599 (2013) 01-0065-02

1 壓縮感知概述

1.1 壓縮感知理論

美國工程師奈奎斯特于1928年提出,又由信息論創始人香農于1948年將壓縮感知理論加以說明并將其以定理形式進行引用。奈奎斯特理論認為,在轉換模擬/數字信號時,如果采樣頻率2倍于信號最高頻率時,那么采樣后的數字信號就能夠對原始信號的信息進行完整保留。在這種背景之下,近年來,美國科學家在此基礎上提出了新的信息獲取理論,也就是壓縮感知。壓縮感知理論認為,如果利用遠低于奈奎斯特標準的方法實現對可壓縮信號的數據采樣,仍然可以將原始信號進行精確恢復。壓縮感知理論一經提出,便解決了一系列發展與應用瓶頸,使其在各個領域都得到了巨大發展。

1.2 壓縮感知原理

(1)基本原理。壓縮傳感信號x?Rn*1測量過程的公式為y=Ax?RM*1,M??N式中A表示測量矩陣,y表示所獲取的信號測量矢量。而信號重建公式則表示為min||x||0,s.t.y=Ax式中||·||0表示x中非零值元素,即信號的稀疏度。信號重建公式屬于組合優化問題,壓縮感知理論的提出者認為,能夠使用11范數的最小化對矩陣測量進行求解,其公式為min||x||1,s.t.y=Ax。

(2)組成部分。信號恢復算法,即以M個觀測值對N長度的原始信號進行無失真恢復、矩陣測量,即保證當原始信號在維數降低時,維持在最小的信息損失量、信號稀疏表示這三部分組成了壓縮感知的理論。

1)信號恢復算法。與奈奎斯特理論中線性感知特點不同,壓縮感知理論中要復原信號,就要將非線性優化問題進行求解。目前壓縮感知重建算法有三種,一是貪婪算法,它的特點是精度低且測量數據多,二是凸優化算法,其特點是精度高且測量數據少,三是統計優化算法,這種算法介于其他兩種算法。2)測量矩陣。當信號x為長度N時,其在M??N個測量中進行重建,如果非零系數位置為已知,只要K?M,那么這個公式就有解。目前在采樣方式上,較為常見的有JITTER采樣、隨機采樣以及均勻采樣等,而在測量波形上,則包括正交函數、隨機波形以及高期隨機波形等。3)信號稀疏表示。在可壓縮信號的基礎上,壓縮感知可通過兩步驟實現,即先設計不相關于變換基的測量矩陣并對其實施觀測,得到測量向量后,從維度測量向量進行信號的重建。

2 基于壓縮感知的圖像快速重建方法設計

通過設計一種基于觀測矩陣與多稀疏變換基的組合并利用正交匹配追蹤計算法來重建圖像,同時通過實驗使用一級小波分解圖像,將相似的分子量圖像進行提取,而后應用于壓縮感知技術實現對其的恢復操作,最終借助小波逆變換得到圖像的快速重建效果。

2.1 觀測矩陣、稀疏變換基與算法

在本實驗中選取了不相同的稀疏變換基5種,分別是離散傅里葉、離散余弦以及三種各不相同的小波變換基。而觀測矩陣則包括非常稀疏投影、局部哈達瑪、非相關測量、BERNOULLI隨機以及高斯隨機矩陣5種。所采取的恢復算法則是貪婪算法中的正交匹配追蹤算法。

從表1的數據結果顯示,基于觀測次數相同的條件下,本文提出的方法與直接將壓縮感知重建技術應用于整幅圖像相比,顯著提升了其運行的時間與效率,另外對于重建圖像的也有了相當明顯的改善效果。

3 結語

將壓縮感知理論應用于重建二維圖像上,已獲得較好的重建圖像質量,本文在此基礎上,利用觀測矩陣、稀疏變換基的相關算法,并引入小波變換,設計了一種經改進后的圖像快速重建方法,在獲得同等重建質量的圖像同時,還能夠將程序運行時間明顯縮短,使得圖像快速重建的效率得到大幅度提升,因此具備一定的推廣應用前景。

參考文獻:

[1]王天荊,鄭寶玉,楊震.基于自適應冗余字典的語音信號稀疏表示算法[J].電子與信息學報.2011,33(10).

貪婪算法的基本原理范文第2篇

【關鍵詞】稀疏表示;MRI;圖像處理

1.引言

磁共振成像技術(Magnetic Resonance Imaging,MRI)是一種利用圖像進行醫療診斷的檢查技術。它沒有電離輻射傷害,能夠直接掃描出器官各個體層的圖像,避免了開顱、開胸、開腹探查等手術。MRI技術可以給醫生帶來清晰實用的人體內部結構圖像,在臨床檢查上得到普遍的應用。但是MRI有一個缺點,它的成像過程太過漫長,一次成像過程要10分鐘到30分鐘。因此如何快速地獲取MRI圖像就成為一個熱點問題,而壓縮感知[1]和稀疏表示理論在MRI上的應用使得在不改變現有MRI系統硬件的條件下減少成像時間成為可能。

2007年Lustig和Donoho等人發表了Sparse-MRI[2],首次將壓縮感知理論應用到MRI中。在SparseMRI方法中作者應用了MR圖像在小波域的稀疏性,對下采樣的K空間數據進行重建,取得較好的重建效果。此后MR圖像的不同稀疏特性不斷被挖掘,MRI重構的效果得到很大的提升。

2.稀疏表示理論

令信號,稀疏字典,稀疏系數。則信號可以表示為,其中是字典原子。是信號在字典域的稀疏系數,如果僅有K個非零項,或者中僅有K個大系數,其它都是接近0的小系數,則我們稱是稀疏度為K。由于實際中K=N,所以我們只要記住這K個項的位置及值我們就可以精確重構信號x。稀疏度K越小,則系數越稀疏,重構信號x所需要保存的數據量就越少。字典D可以是解析字典,例如DCT基底、小波基底,也可以是自適應訓練字典或隨機字典。如圖1是一維信號稀疏表示的示意圖,白的方格表示0,不同的灰度表示不同的值。

圖1 一維信號在高斯隨機字典投影下的2稀疏表示

實際應用中我們通常是觀測到有噪聲的信號x,為了恢復原始信號我們建立如下的目標函數:

(1)

但是這個目標函數的求解是NP難問題,目前解該問題的方法主要有兩種:

一種是貪婪算法,如匹配追蹤(MP)[3]、正交匹配追蹤(OMP)算法[4];一種是松弛算法,比如基追蹤算法(BP)[5]。

匹配追蹤算法(Matching Pursuit,MP)是一種貪婪迭代算法,其基本思想在每一次的迭代過程中,從過完備原子庫里選擇與殘差信號最匹配的原子來進行信號表達,同時從殘差信號中剔除其投影,獲得新的殘差信號。當迭代次數達到設定值,或者重構殘差小于設定閾值時,迭代停止。其算法流程如下:

輸入:字典D,觀測信號x,稀疏度L

輸出:的L稀疏逼近%

初始化:殘差r0=x,索引集,迭代次數t=1;

循環執行步驟1-5

步驟1:找出殘差r0與字典D中最相似列dk的角標,所謂最相似,即:

步驟2:更新索引集,紀錄找到的重建信號字典原子集合(也稱為支撐集)Dt=[Dt-1,d]

步驟3:由最小二乘算法得到t%=argmin ||x-Dtt%||2

步驟4:更新殘差rt=y-Dtt%,t=t+1

步驟5:判斷迭代次數是否滿足,若滿足則停止迭代,否則繼續執行步驟1。

由于MP算法中信號在已選定的原子上的投影并非正交的,MP算法每一次迭代結果有可能是次優,為獲得收斂需要經過較多次的迭代。

3.稀疏表示在MRI領域的應用

信號的稀疏性是壓縮感知理論的一個重要前提,在壓縮感知MRI系統的設計中稀疏表示問題可以歸結為稀疏字典的設計[6]。我們可以從不同的角度,對不同的字典進行分類,因此基于稀疏表示的MRI重構問題也會有不同的重構模型。例如我們可以把字典分為解析字典和訓練字典兩大類:一是解析字典,解析字典是由具有明確的數學理論推導直接產生的基底的集合,常用的如DCT基底組成的DCT字典以及小波基底組成的小波字典。二是訓練字典,訓練字典是根據實際數據自適應的學習字典,這種字典在實際中已經證明了可以對信號有更好的稀疏表示,但是自適應訓練的字典耗時較長,應用沒有解析字典方便。

當我們采用解析字典對下采樣的MRI數據進行重構時,重構模型可以寫成:

(2)

其中D是稀疏表示字典,在參考文獻[2]中采用小波基組成字典D。y是部分K空間數據,即下采樣后的K空間數據。Fu表示部分傅里葉變換,x是我們要重構的MR圖像。對x進行小波變換后的系數滿足稀疏條件,解這個目標函數就可以得到精確重構的MR圖像。在文獻[2]中,作者采用非線性共軛梯度下降算法解這個目標函數。

當采用自適應訓練學習稀疏字典時,一般是對圖像塊進行訓練得到字典,影響較大的有KSVD[7]訓練模型,基于自適應字典學習的MRI重構模型可以寫為:

(3)

其中Ri是取圖像塊操作,是MR圖像x在字典域的稀疏系數。這種采用自適應訓練學習稀疏字典的MRI重構方法影響較大的有文獻[8]。在文獻[8]中,作者把這個約束函數分成兩個子問題:字典訓練問題和最小二乘問題。字典訓練子問題可以寫成為:

(4)

解這個子問題的時候先固定x,對上一次的重構的x進行字典訓練,字典訓練過程和文獻[7]KSVD算法的過程一樣,利用迭代訓練字典D。最小二乘子問題目標函數可以寫成:

(5)

在這個子問題中利用字典訓練子問題訓練出來的字典D和稀疏系數,更新MR圖像x。由于這個子問題是一個非約束的2范數形式,所以可以用最小二乘來解這個問題。圖2是文獻[2]和文獻[8]在10%隨機下采樣時的重構結果。文獻[2]重構結果PSNR值為29.55dB,文獻[8]的重構PSNR值為39.67dB。從PSNR值上來看,文獻[8]的重建結果比文獻[2]有了較大的提高,這說明了自適應訓練的字典在對MR圖像的稀疏表示上有著比解析字典更好的效果。

圖2 腦部圖像10%隨機下采樣的重構結果

4.總結與展望

稀疏表示理論挖掘信號的稀疏特性,利用MR圖像稀疏性構建目標函數重構MR圖像,在降低K空間數據采樣率的同時不降低MR圖像品質,大大降低了MRI成像過程的時間。本文介紹了兩種主要的基于稀疏表示的MRI重構的模型,同時越來越多的人對于低秩矩陣的特性與稀疏性的聯系進行了研究,相信這些研究會進一步的推動稀疏表示在MRI重構領域的應用。

參考文獻

[1]Donoho D pressed sensing[J].Information Theory,IEEE Transactions on,2006,52(4):1289-1306.

[2]Lustig M,Donoho D,Pauly J M.Sparse MRI:The application of compressed sensing for rapid MR imaging[J].Magnetic resonance in medicine,2007,58(6):1182-1195.

[3]Mallat S G,Zhang Z.Matching pursuits with time-frequency dictionaries[J].Signal Processing,IEEE Transactions on,1993,41(12):3397-3415.

[4]Tropp J A,Gilbert A C.Signal recovery from random measurements via orthogonal matching pursuit[J].Information Theory,IEEE Transactions on,2007,53(12): 4655-4666.

[5]Chen S S,Donoho D L,Saunders M A.Atomic decompos-ition by basis pursuit[J].SIAM journal on scientific computing,1998,20(1):33-61.

[6]焦李成,楊淑媛,劉芳,等.壓縮感知回顧與展望[J].電子學報,2011,39(7):1651-1662.

貪婪算法的基本原理范文第3篇

考試隨筆 阮兒

意外 曾衛星

摘走果子的那個人叫朋友 李莎莎

超級另類的檢討書

如此請假 如此批示

千奇百怪的外國高考

現代文閱讀應試對策(下) 陳蒙

巧抓時態突破口 妙解中考單選題 盧愛龍

話題作文的審題 張達富

考場作文的"三避""三就" 徐大才

值得初學者借鑒的"拆分記憶"法和"陰陽怪調"法 李全

獨有的方法讓我的高考作文僅扣2分 范麗麗

我為什么不花大量的時間做題 楊琦

一元二次方程題型全貌 王英

密度的測定方法 王元鋒,魏正宏

質量守恒定律的考查法兩例 吳海洋,沈家文

學習歐姆定律應注意的幾個問題 張友金

傷腦筋的天平

四色猜想

價格令人乍舌的名畫(二)

海洋獵手

未來世界的幾種能源 郭新

決戰前夕 韓宏宜

"大話西游"式的高考作文

"苦讀"經 陽林霞

解解元對樂樂府

"英雄"的悲哀 吳勇

中外知名企業面試"奇招"

中考文言文閱讀開放性試題例說 曹津源

非謂語動詞考例精彩再現 王先玲

驗證猜想類考題例析 張北春

現代文閱讀應試對策(上) 陳蒙

遇到新題不會怎么辦 李瑞鵬

語文"學什么不考什么" 白海峰

定時定量練習每一種題型 夏晨鐘

七位朋友

電梯遇險怎么辦

閱卷歸來話創新 顧明

巧用估算法解決物理問題 王英

直覺思維法

提取公因式易犯的八種錯誤 王保華

光的折射問題例析 張友金

怎樣證明同一條直線上的四條線段成比例 金中鮮

巧求一元二次方程的公共根 宋子模

一例測電阻擴展實驗的分析 張金曦

拓展思維的微觀模擬題 鄒杰

雨衣上的學問

生活中數學的問與答 袁黎

窗外的風景 陳文峰

過往 曲寒江

簡單的結局 仇春雷

天使的"錯誤" 明要楠

真假美猴王 劉成

我們班的花名冊

妙斷漏字詩

擁有專利中考加分等

弱水三千飲一瓢--考場話題作文策略藝術之組材篇 馬興貴

數學思想在有理數中的體現 金建來

長度測量中幾個特殊問題的分析 張友金

機械能一章的易錯題辨析 王英

分子和原子一章的易錯題辨析

添設輔助線拾遺 肖繼森

歷史學習中的比較法 劉海靜,叢華彬

一類幾何題的證明技巧 朱秀蘭

用玻璃板做幾個小實驗 張友金

中考英語補全對話題型分析與解題指導 冬青

向教材要答案 朱文松

讓機器聽懂中國話等

改變命運的《夜巡》 高飛

如何確定古木的年代

相似的浮沉 張北春

快樂萬歲 高飛

走在晨曦 文志平

幾家歡樂幾家愁 陳丹華

心情小屋 高旭東

安徒生的再創作

人蟲大戰 王堯

數學家的笑話

美國高考的刁鉆考題

解決物理問題的邏輯思想方法(三) 林迪

解中考英語"閱讀理解"題秘訣 任民

吃水果看性格

默寫情境題如何考(二) 邱會榮

考場作文審題"五要" 閆永鋒

向著每一個方向微笑 張翔

認真

計劃·行動·堅持 佟欣

從中考看反意疑問句 劉世一

小細節有大作用

從名著中學語言描寫(功能篇) 曹津源

"設而不求"與"不設而求" 周奕生

"等腰"障目,問題多多 王保華

學會拾起生活的小樹枝--讀《改變一生的閃念》 曉君

改變一生的閃念 李陽波

學生作文《起名字》評改 黑子

聚焦《一元二次方程》 李慶社

人造衛星為什么會飛出地球

科學史上④個著名的夢

70規則的魔力--復利的巨大能量

饅頭、餅干里的小洞洞

電梯里的兇殺案

超完美銜接

幽默叢林

大學生哥哥們的談話

真情傳遞

時空連線

2005年中考英語書面表達題集錦(一) 佴啟龍

找尋規律記憶化學方程式 徐雙華

創建"素材庫"妙用"整容術" 黃松海

作文擂臺

分散時間等于沒有時間 書源

與發電有關的中考物理題 王梅軍

你像他們中的哪一個

用幻想飛翔 小雨

當你作弊的時候 劉墉

可怕的期末作文 查里琳·特雷爾

沒有天生的第一名——學習成績的轉變

不可忽視的非智力因素——班級環境的影響

數學解題意識當先

聯想——數學解題的導航塔 任小牧

四邊形難點剖析 陳振良

讓古典詩詞成為作文的一道亮麗風景

讓你的文章"會說話" 李冬梅

動詞不定式專項練習

中考物理實驗題題型大觀 雨林

初中化學基本概念和基本原理復習方法及常見題型

虛擬世界也需知榮辱——一個大學生網友的心聲

放大你的價值

英漢文化的常見差異

世界最經典的雕像

新新玩意兒(5)

地球的故事

A4紙帶來的驚嘆

巴霍姆的貪婪 李慶社

架橋

橡膠的黑與白

多普勒效應與雷達測速

視覺的游戲(下)

骨灰盒里的鉆石

實習醫生的一星期

漫畫也能助學習

向偵探學習推理能力

貪婪算法的基本原理范文第4篇

關鍵詞:編譯原理;教學案例;相似性檢測

中圖分類號:G64文獻標識碼:A 文章編號:1673-9795(2014)04(A)-0000-00

Design of an Integrated Application-oriented Teaching Instance

in “Compiler Principle”

ZHANG Ni,YAN Di-xin,LU Wei-zhong

(School of Electronic and Information Engineering, USTS, Suzhou 215011)

Abstract: Facing to the practice problems of the lack of the "compiler principle" teaching,the paper designed an integrated application-oriented teaching instance . The instance make compiler principle course as center, and integrate using of the relations knowledge of other professional courses,and has a similar detection function which can detect similarity of the students’ project, and verify the originality of students’ project. The design and implementation of the instance are completed by different combinations and expansion of knowledge. The instance make up for the deficiencies in teaching process, and also has a certain practicality.

Key words: Compiling Principles; teaching instance; similarity detection

“卓越工程師教育培養計劃”是教育部于2010年6月啟動的為期10年(2010―2020年)的重大改革項目。該計劃旨在培養一大批創新能力強、適應社會經濟發展需要的高質量工程技術人才[1-3]。編譯原理課程作為計算機專業卓越工程師培養計劃中一門核心專業基礎課程,在新形勢下要求其教學過程必須以學生為中心,鞏固理論知識,加強實踐教學,注重學生創新意識的培養。

然而,由于編譯原理課程教學內容不僅包含形式語言、有限自動機、正規文法、正規表達式和LL(1)分析法等理論知識,而且編譯的每個階段都包含大量的復雜算法,學生在學習過程中感到抽象和難以理解[4]。通過對國內各高等院校教學現狀的調查,目前編譯原理課程教學過程中存在編譯教學難點較多[5],實踐環節缺少實際應用背景和以及未與其他課程進行有效的融合[6]等幾個方面問題。為了達到“卓越計劃”培養目標,必須對現有的教學方法和手段進行改革,探討如何將編譯原理課程的理論知識應用于實踐或實際項目和如何加強編譯原理課程與其他計算機課程之間的聯系的問題,更好地將理論知識點貫穿融合到實踐教學或實際項目中。

本文在“卓越計劃項目”的資助下,將案例教學法[7,12,13]引入編譯原理課程的教學過程中。通過選取恰當的理論知識點,結合數據結構、面向對象程序設計等計算機專業的相關課程,設計了一個能吸引學生興趣,實踐強化的綜合應用型教學案例。

1 案例設計思想及意義

在計算機專業程序設計類課程的教學過程中,學生提交作業的形式是源程序的電子文檔,這為有些同學拷貝和抄襲提供了便利,不僅影響學生對課程的掌握度,還影響了老師判分的公正性。程序相似性檢測技術能夠對學生提交的程序設計作業進行檢測,驗證學生作業的原創性,幫助教師在大量的學生作業中找出相似性較高,即存在抄襲嫌疑的作業對象[11],也有利于發現學生的創新性成果。通常程序相似性檢測過程由程序源代碼預處理,源代碼轉化,相似性比較,結果檢測四個階段構成。

在設計案例時,我們用編譯原理課程中詞法分析和語法分析算法思想來完成代碼相似性檢測過程中的源代碼預處理和源代碼轉化兩個階段,使用數據結構課程中學過的字符串比較算法(如最長公共子序列算法等)作為相似性檢測算法,可以選擇案例開發環境有Eclipse,VC6.0和VS2010等。

此案例以編譯原理課程為中心,結合了數據結構、面向對象程序設計等計算機專業的相關課程,實現了具有程序相似性檢測功能的系統。大多數學生在理解和掌握案例中給出知識點的基礎上,通過對其進行不同組合來完成案例的設計和程序實現,達到教學的基本要求,基礎好的學生在掌握已給出案例的基礎上選擇更難的知識點來設計和實現案例,學到更多知識。使學生通過一個綜合案例的設計和實現,鞏固了多門課程的相關知識點,彌補了課程教學中缺乏實踐的問題,加強計算機相關課程之間的橫向聯系,培養學生的學以致用的實踐能力和創新能力。

2 案例相關的知識點

案例教學法的核心是案例的設計,案例設計應該與教學內容、教學進度相適宜,能恰當地融入相關的知識點。本案例的相關知識點有:與編譯原理課程相關的基于程序設計語言的詞法分析程序實現方法(手工方式)和基于LEX的詞法分析程序實現方法(自動方式);與數據結構課程相關的一些字符串比較算法,如最長公共子序列(LCS)算法,Halstead算法和RKR-GST算法等;以及有一定的面向對象編程基礎,能使用JAVA,C++,C#等其中一種語言編寫程序。學生在熟悉和掌握這些知識點的基礎上進行案例的設計和實現。

2.1 詞法分析程序的實現方法

詞法分析程序的工作原理是,從左至右掃描源程序的字符串,按照詞法規則(正則文法規則)識別出一個個正確的單詞,并轉換成該單詞相應的二元式(種別碼、屬性值),以數組、鏈表或文本文件等形式保存,交給后續模塊使用。通常構造詞法分析程序有兩種方法。第一種是手工方式,即根據識別語言單詞的狀態轉換圖,使用某種高級程序設計語言,如C、C++、JAVA等,直接編寫詞法分析程序。第二種是自動方式,即利用LEX工具自動生成詞法分析程序。

2.1.1 基于程序設計語言的詞法分析程序

設計的主要思想就是構造出目標語言單詞符號的有窮自動機(DFA)。手工方式實現詞法分析的程序的步驟分為四個階段,第一,定義目標語言的可用符號表和構詞規則,即目標語言單詞的狀態轉換圖;第二,依次讀入源程序符號,對源程序進行單詞切分和識別,直到源程序結束;第三,對正確的單詞,按照它的種別以〈記號類別,屬性值〉的形式保存在符號表( 數組或鏈表)中;最后對不正確的單詞,做出錯誤處理。

2.1.2 基于 LEX的詞法分析程序

LEX是一個詞法分析器[8]的自動生成系統,它的輸入是一個文本文件,文件的擴展名習慣用.l表示,稱之為LEX源文件,該文件包含了用戶定義的正規表達式以及每個正規表達式相對應的處理動作。LEX的工作原理是將源程序中的正規式轉換成相應的DFA,而相應的動作則插入到輸出的詞法分析器中適當的地方,控制流由該DFA的解釋器掌握。對不同的源程序,這個解釋器是相同的。LEX最常見的版本是Flex,可以免費得到?;?LEX的詞法分析程序設計思路:編寫LEX源文件,按要求抽象出正規表達式,同時濾掉輸入串中所有的空格、Tab、回車及注釋,最終形成.l文件。最后使用Flex編譯器生成詞法分析程序。

2.2 字符串匹配算法

除了數據結構課程已經介紹的字符串匹配算法(KMP算法),本案例還可以使用其他的字符串匹配算法,如最長公共子序列(LCS)算法,Halstead算法和RKR-GST算法等。依據詞法分析程序的輸出結果(單詞符號串),利用字符串匹配算法來度量兩個標記串的相似度。本案例提供這些算法的實現思想和源代碼,供學生參考和進一步改進。

2.2.1 最長公共子序列(LCS)算法

LCS(Longest Common Subsequence)算法[9]即求兩個字符串的最長公共子序列算法。算法的主要思想是用一個矩陣來記錄兩個字符串中所有位置的兩個字符之間的匹配情況,若是匹配則為1,否則為0。然后求出對角線最長的1序列,其對應的位置就是最長公共子序列的位置。其算法由求最長公共子序列的長度Length(l,j)和最長公共子序列LCS(A,B)兩步構成。

2.2.2 Halstead算法

Halstead算法[10]以源代碼中出現的操作符和操作數為計數對象,以它們的出現次數作為計數目標來測算程序容量和工作量。其基本原理是:統計每個程序段中用到的操作符和操作數,最終生成一個特征向量。操作符包括所使用編程語言的關鍵字、運算符和標準庫名稱。操作數是指程序段中所有由用戶自己定義的符號串。系統為每個待檢測相似性的源代碼生成一個特征向量之后,再計算每兩個向量之間的歐幾里德距離,若兩個程序段的特征向量之間的距離很小,就可以認為這兩段程序很相似。

2.2.3 RKR-GST算法

RKR-GST (Running Karp Rabin Greedy String Tiling)是一種貪婪式字符串匹配算法[14],循環求取兩個標記串中未被匹配部分的最大公共子串,并根據相應公式求出兩個字符串的相似度。對源程序代碼進行相似性檢測的過程通常可分為兩個階段:第一階段,對源程序進行詞法分析或語法分析,剔除與程序結構無關的表面元素,產生標準化輸出。第二階段,采用字符串匹配技術兩兩比較各程序的標準化輸出,進行相似度度量,求出其相似度。

3 案例設計與實現

本案例要求學生選擇一種熟悉的開發平臺(VC 6.0,Eclipse,VS 2010等),依照第二節中給出的基本知識點(學生需提前查閱相關資料,做好預習),通過對知識點的不同組合和擴展,如基于程序設計語言的詞法分析程序+ LCS算法,基于 LEX的詞法分析程序+RKR-GST算法和基于程序設計語言的詞法分析程序+RKR-GST算法等,設計具有程序相似性檢測功能的系統,然后編程實現綜合教學案例系統。

在此,將以采用基于 LEX的詞法分析程序(自動方式)來完成代碼預處理及轉換,使用RKR-GST算法進行代碼相似性檢測為例,給出設計和實現程序相似性檢測系統的過程。在學生設計和實現本案例前,教師先演示這個已事先設計好的案例供學生參考,讓學生對案例實現過程有一個直觀的認識。本次設計具體分為代碼預處理及轉換、將源代碼轉化為標記串、RKR-GST算法實現及結果分析四個階段。

3.1代碼預處理及轉換階段

在理解有窮自動機知識點的基礎上,結合第二節中給出的設計思想,設計了LEX源文件――LexScanning.l,其中自定義了一些詞法規則、getToken()以及printToken()等函數,實現了詞法分析功能,同時濾掉了用戶源程序中所有的空格、Tab、回車及注釋。如圖1所示。之后使用Flex編譯器將LexScanning.l文件編譯生成名為CiFa.exe詞法分析程序。

圖1 LexScanning.l文件

3.2將源代碼轉化為標記串

在主程序中運行時,通過創建一個線程來調用CiFa.exe文件,進行詞法分析,將用戶源代碼轉化為標記串。

3.2.1參數設置

STARTUPINFO si;

memset(&si,0,sizeof(STARTUPINFO));

si.cb=sizeof(STARTUPINFO);

si.dwFlags=STARTF_USESHOWWINDOW;

si.wShowWindow = SW_HIDE;

PROCESS_INFORMATION pi;

3.2.2 創建線程

CString cmd = _T("CiFa.exe ")+m_file_path_1;

if(CreateProcess(_T("CiFa.exe"),(LPTSTR)(LPCTSTR)cmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))

{ WaitForSingleObject(pi.hProcess,INFINITE);

CFile file(_T("C:\\temp.txt"),CFile::modeRead);

……

dwFileLen=file.GetLength();

pBuf=new CHAR[dwFileLen+1];

pBuf[dwFileLen]=0;

…… }

3.3 RKR-GST算法

兩個程序段之間的相似性即為它們對應的標記串之間的相似性。可將每個標記串看成由若干個子串組成,那么兩個標記串中相同的子串就是它們的公共子串,其相似性可用所有公共子串在整個串中所占的百分比表示。公式如下[14]:

其中: | A |、|B |為token串A、B的長度。match(i,j,length ) : 在 A 中起始位置為i,在B中起始位置為j, 長度為n 的子串。Matches為公共子串集合。

案例中設計了函數void Greedy_String_Tiling (tile_type *tiles, char *A, char *B, unsigned MML) 循環求取兩個標記串中未被匹配部分的最大公共子串,并根據公式求出兩個token串A、B的相似度。其中參數 *tiles存放求出的所有最長公共子串,*A和*B分別來存放字符串A和字符串B,MML給出公共子串應達到的最小長度。

4 系統的測試及結果分析

準備了三個C語言源程序作為測試用例,其中測試用例一(test1.c)和測試用例二(test2.c)有少數變量名不一樣和源程序的組織結構稍有差別之外,其他的內容幾乎一樣。測試用例三(test3.c)與測試用例一和測試用例二在內容和結構上則完全不一樣。

4.1 test1.c與test2.c的比較

運行程序,點擊“瀏覽”按鈕選擇要比較的兩個源程序文件test1.c和test2.c,點擊“詞法分析”按鈕輸出test1.c和test2.c經詞法分析后的結果,如圖2所示。

圖2 詞法分析結果

接下來,設置相似閾值為5之后,點擊“比較”按鈕,則進行兩個源程序的相似性比較,比較的結果如圖3所示。兩個文件的相似度為91.089112%,結果符合我們的預想。

圖3 相似性檢測結果

4.2 test1.c與test3.c的比較圖4給出了test1.c和test3.c的相似性檢測結果,過程與上面相類似。相似度為13.265306%,符合我們的預期。

圖4 相似性檢測結果

5 結語

本文給出了筆者在編譯原理教學過程中使用的一個案例。該案例以編譯原理課程為中心,結合數據結構、面向對象程序設計等計算機核心專業課程,將幾門課程的知識點聯系在一起,突出“編譯原理”課程的實用性。學生在實現綜合案例之前,教師通過對已實現案例的演示,讓學生有對實驗過程及要求有了直觀的了解,促使學生設計實現出更好的具有程序的相似性檢測功能系統,鞏固編譯原理和數據結構等課程相關的知識點,激發學習興趣,提高學生的學習質量和效率。今后的教學研究中,我們將對該案例進行擴展,使之能分析如.net等高級語言編寫的源程序代碼,增加一些新的知識點,進而可供高年級學生在課程設計中使用。

參考文獻

[1] 林健.面向卓越工程師培養的研究性學習[J]. 高等工程教育研究,2011,(6):5-15.

[2] 徐世軍,范偉,黃賢英.面向卓越工程師培養的專業課程教學實踐. 計算機教育.2013(13) 22-25.

[3] 李鋒,夏小玲.計算機軟件工程專業卓越計劃實踐教學. 計算機教育.2013(13) 18-21.

[4] 李冬梅,施?;?"編譯原理"課程的教學研究與探索. 計算機教育.2008(08):10-12.

[5] 張昱,陳意云,鄭啟龍. 編譯原理課程的教學方法和教材建設[J]. 中國大學教學,2005,(7):61-62.

[6] 計衛星,陳英等.簡析計算機專業知識在編譯課程教學中的滲透與融合.計算機教育. 2010(03):23-25.

[7] 秦艷琳,吳曉平.“信息安全數學基礎” 案例教學[J].計算機教育,2010(01):141-144.

[8] 陳火旺,劉春林,譚慶平等. 程序設計語言編譯原理[M].北京:國防工業出版社,2000.

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

[10] Halstead, Howard M. Elements of Software Science[Z].Elsevier,1977.

[11] 張莉,周祖林.代碼相似性檢測在程序設計教學中的應用.計算機教育.2009(13):116-118.

[12] 張月琴,孫冰.案例教學法在“大學信息技術”課程中的應用研究[J].中國電力教育,2012,(25):63-64.

相關期刊更多

上海經濟

省級期刊 審核時間1個月內

上海社會科學院

法庭內外

省級期刊 審核時間1個月內

北京市高級人民法院

計算機學報

北大期刊 審核時間1-3個月

中國科學院

主站蜘蛛池模板: 91在线区| 91久久精品一区二区二区 | 91精品久久久久久久91蜜桃 | 国产成人av在线播放 | 久久99精品久久久久婷婷 | 久久国产精品视频免费看 | 91网在线| 在线看国产 | 岛国黄色 | 日韩影音 | 天堂欧美| 国产一二三区在线 | 欧美在线观看视频一区二区 | 99在线视频免费观看 | 欧美 日韩 国产 在线 | 中国三级网站 | 玖玖国产精品视频 | 麻豆精品 | 在线麻豆av | 91看片在线观看视频 | 日韩一区二区av | 亚洲一区二区久久久 | 国产精品久久久一区 | 国产一区二区三区高清 | 欧美精品一区二区久久 | 亚洲男人av | 国产精品一区二区三区四区视频 | 精品在线一区二区 | 国产精品午夜在线 | 久久国产精品一区二区 | 一二三区在线 | 久久久久一级 | 日韩视频久久 | 久久久久成人精品免费播放 | 成人免费淫片视频软件 | 亚洲色图35p | 亚洲成人在线视频播放 | 男人都懂的网站 | av免费网站| 五月色综合 | 色婷婷999|