一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法
【專利摘要】本發(fā)明提出了一種遞歸最大執(zhí)行頻度與最大執(zhí)行深度的靜態(tài)估計方法,該方法通過靜態(tài)掃描程序源代碼以定位遞歸作用域并收集遞歸中函數(shù)調用與返回的執(zhí)行條件,然后引入可滿足性模求解器來求解這些收集到的符號條件約束,并最終直接獲得估計結果。由于避免了反復執(zhí)行程序,相比于傳統(tǒng)的動態(tài)估計方法,本發(fā)明的方法具有更為高效、準確等優(yōu)點。所分析的結果可以幫助程序設計、開發(fā)、維護人員用于性能優(yōu)化、能耗估計、實時性分析等計算機應用【技術領域】。
【專利說明】一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法
【技術領域】
[0001] 本發(fā)明屬于計算機程序分析應用領域,涉及利用靜態(tài)程序分析、可滿足性模條件 約束求解等技術,高效求解程序遞歸最大執(zhí)行頻度與最大執(zhí)行深度,從而為設計開發(fā)人員 進行程序優(yōu)化,能耗估計,時間分析等提供依據(jù),為一種程序遞歸最大執(zhí)行頻度與最大執(zhí)行 深度的靜態(tài)估計方法。
【背景技術】
[0002] 遞歸作為一種算法設計思想,在程序設計與開發(fā)中被廣泛使用。實際工業(yè)程序中 的遞歸具有執(zhí)行密度大,占用執(zhí)行時間長等特點,對程序的執(zhí)行效率,計算機的性能和吞吐 量有重要影響。因此,遞歸作用域的最大執(zhí)行頻度和深度是程序優(yōu)化,時間分析,系統(tǒng)能耗 分析等領域所關注的重要指標。
[0003] 已有的遞歸執(zhí)行頻度和深度估計方法一般采用動態(tài)測試方法,通過生成測試用例 對程序反復執(zhí)行,來獲得遞歸作用域可能達到的執(zhí)行頻率和執(zhí)行深度。這樣的方法有以下 幾個不足:1.檢測效率不高:由于動態(tài)方法需要反復執(zhí)行程序,因此需要一定的執(zhí)行量才 能檢測到所關心的遞歸作用域的相應指標;2.檢測結果準確度不夠:由于動態(tài)檢測方法依 賴于測試用例,當測試用例的覆蓋度不夠時,未覆蓋到的遞歸作用域是無法獲得檢測結果 的;即使測試用例能覆蓋到的遞歸,也很難保證測試用例能使得遞歸執(zhí)行到最大的頻度和 深度。
[0004] 近年來,計算機自動化的符號約束求解能力大大提升,為能自動地靜態(tài)檢測遞歸 執(zhí)行頻度和深度提供了可能。本發(fā)明基于可滿足性模理論,通過靜態(tài)收集與求解不同深 度與頻度的遞歸符號執(zhí)行條件,來獲得遞歸能在程序執(zhí)行中達到的最大執(zhí)行頻度與深度信 息,能夠在較少的計算時間內達到較為準確的檢測結果。
[0005] 可滿足性模理論是計算機科學領域中在一階謂詞邏輯等式的基礎上發(fā)展起來的 邏輯公式判定理論,主要用于判斷一階邏輯公式是否可被滿足。由于許多領域的實際問題 最終都可以被歸結為可滿足性模理論問題(例如軟硬件的形式化驗證問題、電路的自動向 量測試生成、人工智能中的規(guī)劃與優(yōu)化問題等),可滿足性模理論近年來受到計算機理論界 的廣泛關注。目前廣泛使用的可滿足性模理論求解方法大約有三種:第一種方法將一階謂 詞邏輯公式轉換成更為簡單的布爾公式,然后在此基礎上求解布爾公式的可滿足性;第二 種方法將需要求解的內容根據(jù)其特性而劃分成專門的理論域,并在各個理論域分別求解; 第三種方法將該問題的求解歸結到一種基于回溯的搜索算法框架中,并通過置換理論域, 而達到高效可滿足性求解的目的。經(jīng)過研究者多年的努力,可滿足性模理論求解算法得到 了不斷的改進與完善,已經(jīng)能夠解決實際應用中規(guī)模較大的問題。本發(fā)明利用可滿足性模 理論來靜態(tài)求解遞歸作用域的執(zhí)行條件約束,從而實現(xiàn)遞歸最大執(zhí)行頻度與最大執(zhí)行深度 的靜態(tài)估計。
【發(fā)明內容】
[0006] 技術問題:本發(fā)明提出了一種遞歸最大執(zhí)行頻度與最大執(zhí)行深度的靜態(tài)估計方 法,該方法不需要反復執(zhí)行程序,即可以較為準確的估計出程序遞歸的最大執(zhí)行頻度和最 大執(zhí)行深度。
[0007] 技術方案:本發(fā)明的一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法,通過靜態(tài)程 序分析的方法來收集程序的遞歸路徑條件,并使用可滿足性模理論來求解該遞歸路徑條 件,從而能高效準確的估計程序中遞歸作用域的最大執(zhí)行深度,以及作用域中各遞歸函數(shù) 的最大執(zhí)行頻度,具體步驟為:
[0008] 1-1)、使用基于調用圖的回路查找技術來檢測程序中的遞歸作用域,所檢測到的 遞歸作用域為一個函數(shù)集合,集合中的各個函數(shù)相互調用,而構成遞歸,在檢測過程中,使 用強連通組件擴展技術來擴展調用圖的回路,從而保證了所得到的函數(shù)集合包含當前遞歸 作用域中的每一個函數(shù);
[0009] 1-2)、分別分析步驟1-1)所得到的各個遞歸作用域,收集作用域中各個遞歸函數(shù) 調用和遞歸函數(shù)返回的分支條件與路徑條件,并將相同遞歸函數(shù)的調用條件和返回條件合 并,作為符號條件約束儲存,以供步驟1-3)進行綜合求解;
[0010] 1-3)、將各遞歸作用域放回原始程序中進行綜合分析與求解,即在原始程序中求 得各個遞歸作用域的初始入口條件,并依據(jù)此入口條件與步驟1-2)給出的符號條件約束 綜合構建不同執(zhí)行深度與執(zhí)行頻度的實際遞歸執(zhí)行約束,最終使用可滿足性模求解器對這 些實際的遞歸執(zhí)行約束求解。通過結合不同的遞歸深度與頻度嘗試策略,求解器能估計出 遞歸實際可達的最大執(zhí)行頻度和深度。
[0011] 所述的步驟1-1)中使用強連通組件擴展技術來擴展調用圖的回路的遞歸檢測方 法,使得所得到的函數(shù)集合必然包含當前遞歸作用域中的每一個函數(shù),具體如下:
[0012] 2-1)、由程序源代碼按照傳統(tǒng)方法構建調用圖,調用圖是一個用來表示程序調用 關系的有向圖,圖中每一條有向邊(f,g)代表程序中存在函數(shù)f到函數(shù)g的調用關系,因 此,調用圖上的任意回路表明在程序中存在函數(shù)遞歸關系;
[0013] 2-2)、查找調用圖中的回路,具體方法為按次序從調用圖中的節(jié)點出發(fā),嘗試是否 能夠沿圖中的有向邊回到當前節(jié)點,通過不斷的迭代,算法能夠遍歷調用圖中所有的可能 而找到回路,或者證明圖中不存在回路;
[0014] 2-3)、在步驟2-2)找到回路以后,使用強連通組件擴展算法擴展在調用圖中的回 路,從而保證所找到的遞歸作用域完整包含了所有的相關函數(shù),即當遞歸作用域中存在子 遞歸回路時,本算法保證找到的是整個遞歸作用域,在由步驟2-1)生成的調用圖上反復迭 代步驟2-2)和步驟2-3),即可得到程序中的所有遞歸作用域。
[0015] 所述通過靜態(tài)程序分析的方法來收集程序的遞歸路徑條件,以便后續(xù)的步驟來進 一步求解遞歸的最大執(zhí)行頻度與深度,步驟2-1)到步驟2-3)所檢測得到的遞歸作用域被 標記為一個程序函數(shù)的集合f\, f2,…,fn,這n個函數(shù)會通過相互調用而構成遞歸,特殊地, 如果僅有單個函數(shù)參與遞歸,則n = 1,在此基礎上收集各遞歸條件,并構建符號約束的具 體步驟如下:
[0016] 3-1)、對于每一個遞歸作用域的每一個遞歸函數(shù)掃描其源代碼,定位其所有的 函數(shù)出口即函數(shù)返回位置,和遞歸函數(shù)調用位置即調用當前遞歸作用域中的函數(shù)A的位 置;
[0017] 3-2)、分析遞歸函數(shù)&到其內部各個遞歸調用與函數(shù)出口的路徑,并使用約束收 集器收集路徑上的分支條件,將每一條路徑上的各個分支條件按邏輯合取式合并作為整個 路徑條件;
[0018] 3-3)、對于遞歸函數(shù)fi中所有調用遞歸函數(shù)A的不同路徑的路徑條件,將按邏輯 析取式合并,記為條件約束Cu ;而對于遞歸函數(shù)&到達所有出口的路徑條件,也按邏輯析 取式合并,記為條件約束c' i ;這些條件約束信息將用于后續(xù)步驟的約束求解。
[0019]使用可滿足性模理論來求解該遞歸路徑條件,具體過程如下:
[0020]4-1)、首先要從程序入口開始,沿程序控制流找到各遞歸作用域的入口,并由此路 徑分析得到當前遞歸作用域的初始條件,以便結合步驟3-3)的條件約束構建當前程序在 具體執(zhí)行到某一遞歸深度或頻度的實際約束條件;
[0021]4-2)、按照遞推式策略確定一個可滿足性模理論的求解驗證目標,即以遞歸深度p 為目標,或者以某一遞歸函數(shù)的執(zhí)行頻度q為目標,并按照這一目標從遞歸作用域入口向 內構建調用過程鏈,在結合步驟4-1)的遞歸初始條件和步驟3-3)的條件約束的基礎上,按 照調用過程鏈生成驗證目標的實際組合約束條件;
[0022]4-3)、將步驟4-2)生成的實際組合約束條件轉換成可滿足性模的求解公式,并交 由求解器求解,求解結果會有兩種可能:當求解結果為當前公式真時,即當前條件可滿足, 表示當前遞歸最大深度> P,或者某一遞歸函數(shù)的執(zhí)行頻度> q,在這種情況下,如果不知 道遞歸最大深度或者最大執(zhí)行頻度的上界,則以遞推式策略嘗試更大的P或者q ;當求解結 果為假,當前條件不可滿足,表示當前遞歸的最大深度一定達不到P或者執(zhí)行頻度< q,此 時P或q為驗證目標的上界,本方法將繼續(xù)以二分查找的方式嘗試更小的P或者q,迭代直 到滿足P-I <遞歸最大深度< P或者q_l <遞歸函數(shù)最大執(zhí)行頻度< q,由于目標值為整 數(shù),故而在此時我們能得到遞歸最大深度值=P-I或遞歸函數(shù)最大執(zhí)行頻度值=q_l。
[0023] 有益效果:本發(fā)明所描述的程序遞歸最大執(zhí)行頻度與最大執(zhí)行深度的靜態(tài)估計方 法,能夠在不執(zhí)行程序的狀況下通過靜態(tài)掃描程序源代碼,來求解程序遞歸中各遞歸函數(shù) 的最大執(zhí)行頻度與遞歸本身的最大執(zhí)行深度。具體來說有如下有益效果:
[0024] 1.相對于通過生成測試用例對程序反復執(zhí)行的傳統(tǒng)動態(tài)測試方法,本發(fā)明所提供 的靜態(tài)估計方法更能高效、準確地獲得程序遞歸的最大執(zhí)行頻度與深度。一方面本發(fā)明使 用可滿足性模求解器來直接求解程序遞歸的約束條件,避免了反復執(zhí)行程序,從而使得本 方法能更為快速的達到目標;另一方面,由于本方法并不依賴于測試用例,而以邏輯符號條 件的求解來獲得結果,因而所得到的結果比傳統(tǒng)方法更為準確。
[0025] 2.本發(fā)明所生成的遞歸最大執(zhí)行頻度與深度具有可達性,即必然至少存在一個程 序輸入,在以該輸入執(zhí)行程序時,程序中的遞歸能達到估計的深度或者執(zhí)行頻度。由于本發(fā) 明使用可滿足性模求解器來求解程序遞歸的約束條件,當條件可滿足時,求解器會輸出滿 足當前條件的具體輸入值,因此,以這一輸入值運行程序時能保證估計結果的可達性。
[0026] 3.本發(fā)明獲得的程序遞歸最大執(zhí)行頻度與深度具有重要的應用價值。由于遞歸作 用域是實際工業(yè)程序中高密度執(zhí)行區(qū),分析遞歸的最大執(zhí)行頻度和深度有助于幫助開發(fā)人 員定位與分析是程序熱點,以便其進一步對程序進行優(yōu)化及能耗分析。另外,本發(fā)明所提供 的程序遞歸頻度與深度估計方法可以分析程序中多個遞歸作用域的組合效果,這可以幫助 工業(yè)控制程序的設計與開發(fā)人員進行實時性分析。
【專利附圖】
【附圖說明】
[0027] 圖1為遞歸最大執(zhí)行頻度與深度靜態(tài)估計的總流程。
[0028] 圖2為遞歸作用域的檢測流程。
[0029] 圖3為遞歸作用域內部的符號約束收集流程。
[0030] 圖4為程序遞歸組合約束收集與求解流程。
【具體實施方式】
[0031] 本發(fā)明提出了一種靜態(tài)分析程序遞歸作用域最大執(zhí)行頻度和深度的方法,該方法 通過掃描程序源代碼來檢測與收集遞歸作用域的相關符號條件約束,并引入了可滿足性模 求解器來求解約束,從而獲得目標結果。以下部分就實施過程中的一些具體細節(jié)作更進一 步的描述:
[0032] -、關于遞推式策略與二分回溯式策略等構建策略
[0033] 由于可滿足性模求解器的求解結果為一個布爾值,即僅能得到當前條件是否能滿 足,因此,要得到遞歸最大頻度和深度,我們還需要構建一個與頻度與深度值相關的條件構 造器,以輔助可滿足性模求解器來進行工作。通過不斷嘗試不同的遞歸頻度或者深度是否 可滿足,我們可以得到可以被當前條件滿足的最大遞歸頻度或深度值。本發(fā)明所設計的構 建策略目標在于使得可滿足性模求解器通過盡可能少的嘗試次數(shù)來找到目標結果,該策略 用于搜索遞歸最大頻度和深度的過程是完全一樣的,這里以遞歸最大深度P為例來描述構 建策略。
[0034] 首先需要引入p的初始值pQ,在實際工業(yè)上使用本發(fā)明方法的時候,可以根據(jù)經(jīng)驗 估計一個遞歸最大深度的可能值來作為P的初始值,在完全沒有經(jīng)驗指導的情況下,可以 采用一個隨機整數(shù)來作為P的初始值P〇。
[0035] 當可滿足性模求解器的求解結果為真時,表示p > Ptl,這時我們取到一個p的下 界,而不知道P的上界,則下一次嘗試則采用P1 = 2Xlv事實上,當我們不知道p的上界 的時候,則每一次嘗試取前一次值的兩倍,即Pi+1 = 2XPi,以便能更快定位到p的上界。這 樣層層遞推來尋找P的上界的過程在本發(fā)明中被稱為遞推式策略。
[0036] 當在某一次Pi的嘗試中,可滿足性模求解器的求解結果為假時,即表示p〈Pi,這時 我們取到了 P的上界,由于P的下界本來就已知(未知情況下取下界為〇),從而查找P的 過程就被轉化為二分搜索過程。即已知P的上界為Pu,下界為Pb,則下一次嘗試值為上下界 的中值Pm= IX (Pu + P6)。如果求解器的結果為真,則用Pi+1代替Pb,否則代替Pu進行反復迭 代,直至Pu = pb+l時算法終止,這時得到P = Pb。
[0037] 這一過程在本發(fā)明中被稱為二分回溯式策略。
[0038] 二、調用圖的閉合回路搜索算法
[0039] 本發(fā)明采用了一種基于函數(shù)調用圖的貪心算法來檢測程序中遞歸作用域。具體來 說,在一個調用圖g。中,每一個節(jié)點代表一個程序中的函數(shù)或過程,而每一條從節(jié)點i到節(jié) 點j的有向邊(記為i,j)表示一個從過程i到過程j的調用。當我們使用N。和E。來表示 調用圖g。的節(jié)點集和有向邊集時,閉合回路搜索算法描述如下:
[0040] 2-2-1)、在調用圖g。中標示可達集E'。。將E'。的初值設為E。,然后遍歷E' C 中的每一條邊,當存在首尾相連的兩條邊時,例如i,k GE'。八k,j GE'。時,說明節(jié)點 i到節(jié)點j可達,則將可達關系i,j也加入到E'。中。
[0041] 2-2-2)、反復迭代步驟2-2-1)直至調用圖g。中所有的可達關系都被E'。標定。 然后對應于集合N。中的每一個節(jié)點k,查看可達關系k,k是否在可達集E'。中,如果在可 達集E'。中,則表明調用圖g。中必然存在一條從節(jié)點k出發(fā)最終到達節(jié)點k的回路。從 而可以將節(jié)點k輸出至強連通組件擴展算法來獲得當前回路對應的強連通組件。
[0042] 三、強連通組件擴展算法
[0043] 為了較為全面的處理更具有一般性的互遞歸,本發(fā)明在找到調用圖中的回路以 后,采用了強連通組件擴展算法來將回路擴展為調用圖中的強連通組件,從而避免了直接 使用調用圖回路可能會取到嵌套遞歸作用域中的子回路的問題。有向圖中的強連通組件 是指該有向圖中的子圖,且要求子圖中任意節(jié)點都可以沿有向邊到達子圖中的其他任意節(jié) 點。
[0044] 本發(fā)明采用了一個可達遍歷搜索的算法來擴展調用圖中的回路成為一個強連通 組件S,具體算法如下 :
[0045]2-3-1)、首先將強連通組件S清空。
[0046] 2-3-2)、從步驟2-2-2)獲得調用圖g。的回路節(jié)點k,將節(jié)點k加入S。沿此回路 節(jié)點k,從可達集E'。中遍歷所有能夠被節(jié)點k到達的節(jié)點h,即要求(I^h)GE'。。
[0047] 2-3-3)、通過可達集E'。檢查節(jié)點h是否能夠到達節(jié)點k,即如果(h,k) G E'。, 則將節(jié)點h加入S。
[0048] 2-3-4)、遍歷所有E'。中節(jié)點k出發(fā)的邊,將滿足條件的節(jié)點均加入S,S即所求 的強連通組件。從而我們有:
[0049]
【權利要求】
1. 一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法,其特征在于通過靜態(tài)程序分析的方 法來收集程序的遞歸路徑條件,并使用可滿足性模理論來求解該遞歸路徑條件,從而能高 效準確的估計程序中遞歸作用域的最大執(zhí)行深度,以及作用域中各遞歸函數(shù)的最大執(zhí)行頻 度,具體步驟為 : 1-1)、使用基于調用圖的回路查找技術來檢測程序中的遞歸作用域,所檢測到的遞歸 作用域為一個函數(shù)集合,集合中的各個函數(shù)相互調用,而構成遞歸,在檢測過程中,使用強 連通組件擴展技術來擴展調用圖的回路,從而保證了所得到的函數(shù)集合包含當前遞歸作用 域中的每一個函數(shù); 1-2)、分別分析步驟1-1)所得到的各個遞歸作用域,收集作用域中各個遞歸函數(shù)調用 和遞歸函數(shù)返回的分支條件與路徑條件,并將相同遞歸函數(shù)的調用條件和返回條件合并, 作為符號條件約束儲存,以供步驟1-3)進行綜合求解; 1- 3)、將各遞歸作用域放回原始程序中進行綜合分析與求解,即在原始程序中求得各 個遞歸作用域的初始入口條件,并依據(jù)此入口條件與步驟1-2)給出的符號條件約束綜合 構建不同執(zhí)行深度與執(zhí)行頻度的實際遞歸執(zhí)行約束,最終使用可滿足性模求解器對這些實 際的遞歸執(zhí)行約束求解。通過結合不同的遞歸深度與頻度嘗試策略,求解器能估計出遞歸 實際可達的最大執(zhí)行頻度和深度。
2. 根據(jù)權利要求1所述的一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法,其特征在于 所述的步驟1-1)中使用強連通組件擴展技術來擴展調用圖的回路的遞歸檢測方法,使得 所得到的函數(shù)集合必然包含當前遞歸作用域中的每一個函數(shù),具體如下: 2- 1)、由程序源代碼按照傳統(tǒng)方法構建調用圖,調用圖是一個用來表示程序調用關系 的有向圖,圖中每一條有向邊(f,g)代表程序中存在函數(shù)f到函數(shù)g的調用關系,因此,調 用圖上的任意回路表明在程序中存在函數(shù)遞歸關系; 2-2)、查找調用圖中的回路,具體方法為按次序從調用圖中的節(jié)點出發(fā),嘗試是否能夠 沿圖中的有向邊回到當前節(jié)點,通過不斷的迭代,算法能夠遍歷調用圖中所有的可能而找 到回路,或者證明圖中不存在回路; 2- 3)、在步驟2-2)找到回路以后,使用強連通組件擴展算法擴展在調用圖中的回路, 從而保證所找到的遞歸作用域完整包含了所有的相關函數(shù),即當遞歸作用域中存在子遞歸 回路時,本算法保證找到的是整個遞歸作用域,在由步驟2-1)生成的調用圖上反復迭代步 驟2-2)和步驟2-3),即可得到程序中的所有遞歸作用域。
3. 根據(jù)權利要求1所述的一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法,其特征在于 通過靜態(tài)程序分析的方法來收集程序的遞歸路徑條件,以便后續(xù)的步驟來進一步求解遞歸 的最大執(zhí)行頻度與深度,步驟2-1)到步驟2-3)所檢測得到的遞歸作用域被標記為一個程 序函數(shù)的集合{f\,f 2, . . .,fj,這η個函數(shù)會通過相互調用而構成遞歸,特殊地,如果僅有 單個函數(shù)參與遞歸,則η = 1,在此基礎上收集各遞歸條件,并構建符號約束的具體步驟如 下: 3- 1)、對于每一個遞歸作用域的每一個遞歸函數(shù)f\,掃描其源代碼,定位其所有的函數(shù) 出口即函數(shù)返回位置,和遞歸函數(shù)調用位置即調用當前遞歸作用域中的函數(shù)A的位置; 3-2)、分析遞歸函數(shù)&到其內部各個遞歸調用與函數(shù)出口的路徑,并使用約束收集器 收集路徑上的分支條件,將每一條路徑上的各個分支條件按邏輯合取式合并作為整個路徑 條件; 3- 3)、對于遞歸函數(shù)A中所有調用遞歸函數(shù)A的不同路徑的路徑條件,將按邏輯析取 式合并,記為條件約束Cy ;而對于遞歸函數(shù)&到達所有出口的路徑條件,也按邏輯析取式 合并,記為條件約束c' i ;這些條件約束信息將用于后續(xù)步驟的約束求解。
4.根據(jù)權利要求1所述的一種遞歸最大執(zhí)行頻度與深度的靜態(tài)估計方法,其特征在于 使用可滿足性模理論來求解該遞歸路徑條件,具體過程如下: 4- 1)、首先要從程序入口開始,沿程序控制流找到各遞歸作用域的入口,并由此路徑分 析得到當前遞歸作用域的初始條件,以便結合步驟3-3)的條件約束構建當前程序在具體 執(zhí)行到某一遞歸深度或頻度的實際約束條件; 4-2)、按照遞推式策略確定一個可滿足性模理論的求解驗證目標,即以遞歸深度p為 目標,或者以某一遞歸函數(shù)的執(zhí)行頻度q為目標,并按照這一目標從遞歸作用域入口向內 構建調用過程鏈,在結合步驟4-1)的遞歸初始條件和步驟3-3)的條件約束的基礎上,按照 調用過程鏈生成驗證目標的實際組合約束條件; 4-3)、將步驟4-2)生成的實際組合約束條件轉換成可滿足性模的求解公式,并交由求 解器求解,求解結果會有兩種可能:當求解結果為當前公式真時,即當前條件可滿足,表示 當前遞歸最大深度> P,或者某一遞歸函數(shù)的執(zhí)行頻度> q,在這種情況下,如果不知道遞 歸最大深度或者最大執(zhí)行頻度的上界,則以遞推式策略嘗試更大的P或者q;當求解結果為 假,當前條件不可滿足,表示當前遞歸的最大深度一定達不到P或者執(zhí)行頻度< q,此時P或 q為驗證目標的上界,本方法將繼續(xù)以二分查找的方式嘗試更小的P或者q,迭代直到滿足 P-I <遞歸最大深度< P或者q_l <遞歸函數(shù)最大執(zhí)行頻度< q,由于目標值為整數(shù),故而 在此時我們能得到遞歸最大深度值=P-I或遞歸函數(shù)最大執(zhí)行頻度值=q_l。
【文檔編號】G06F17/10GK104317773SQ201410589530
【公開日】2015年1月28日 申請日期:2014年10月28日 優(yōu)先權日:2014年10月28日
【發(fā)明者】湯恩義, 劉璐, 方園, 李宣東, 馮世寧, 張慶壘 申請人:南京大學