① 自頂向下的語法分析和自底向上的語法分析解決的核心問題分別是什麼
備忘錄方法是動態規劃方法的變形。與動態規劃演算法不同的是,備忘錄方法的遞歸方式是自頂向下的,而動態規劃演算法則是自底向上的。
如: 求LCS的問題:
當xi=yj時,求C[i,j]只需知道C[i-1,j-1],而無需用到C[i,0]~C[i,j-1]及C[i-1,j]~C[i-1,n]。
∴ 當只需求出一個LCS時,可能有一些C[p,q]在整個求解過程中都不會用到。
一般地,當某個問題可以用動態規劃法求解,但二維數組中有相當一部分元素在整個計算中都不會被用到。我們就不需要以遞推方式逐個計算二維數組中元素。
而採用備忘錄方法:數組中的元素只是在需要計算時才去計算,計算採用遞歸方式,值計算出來之後將其保存起來以備它用。
如:求LCS的問題:
首先將C[i,0](0≤i≤m)與C[0,j](1≤j≤n)初始化為0。其餘m×n個C[i,j]全部初始化為-1。
計算C[i,j]的遞歸演算法LCS_L2(X,Y, i,j,C)(備忘錄方法):
若x[i]=y[j],則去檢查C[i-1,j-1],若C[i-1,j-1]> -1(已經計算出來),就直接把C[i-1,j-1]+1賦給C[i,j],返回。
若C[i-1,j-1]=-1(尚未計算出來),就遞歸調用LCS_L2(X,Y, i-1,j-1,C) 計算出C[i-1,j-1],然後再把C[i-1,j-1]+1賦給C[i,j] ,返回。
若x[i] 1 y[j],則要檢查C[i-1,j]和C[i,j-1]。
若兩者均 > -1(已經計算出來),則把max{ C[i-1,j], C[i,j-1]} 賦給C[i,j],返回。
若C[i-1,j], C[i,j-1] 兩者中有一個等於-1(尚未計算出來),或兩者均等於-1,就遞歸調用LCS_L2將其計算出來,然後再把max{ C[i-1,j], C[i,j-1]} 賦給C[i,j]。
∴若有大量的子問題無需求解時,用備忘錄方法較省時。
但當無需計算的子問題只有少部分或全部都要計算時,用遞推方法比備忘錄方法要好(如矩陣連乘,最優二分搜索樹)
② 自底向上和自頂向下語法分析方法要解決的核心問題是什麼
首先兩種程序設計析
自頂向:種主旨給定輸入符號串應文始符號根結點發自頂向輸入符號串建立棵析樹
自底向:種移進-歸約種程看作:歸約輸入符號串文始程換句說析輸入符號串始逐步進行歸約直至歸約文始符號
③ 使用自頂向下方法與自底向上方法分層有何差異,哪些類型的項目能最佳的匹配每種方法
自頂向下方法與自底向上方法分層是兩種程序設計的分析方法:
自頂向下:這種方法的主旨是,對給定的輸入符號串,從對應文法開始符號的根結點出發,自頂向下地為輸入符號串建立一棵分析樹。
自底向上:是一種「移進-歸約」法。將這種過程看作為:歸約一個輸入符號串到文法開始的過程。換句話說,這樣的分析法是從輸入符號串開始,逐步進行歸約,直至歸約到文法的開始符號。
項目的學習需要持續不斷的自頂向下的學習與自底向上的學習。何謂自頂向下的學習,即先著手系統架構,然後逐層進入業務模塊,最後進入細粒度功能模塊的開發。所謂自底向上的學習,就是先從一行代碼,一個Bug,一個模塊做起,然後在做一個流程,一個業務模塊,最後熟悉整個系統的架構。
自頂向下的學習與自底向上的學習是離不開的,沒有自頂向下的學習,你就不能很好的理解業務,在開發過程中就會很被動。沒有自底向上的學習,你就不能建立起自己的技術優勢,無法去攻堅。在項目初期,通常系統架構師會講解項目的架構,主要是業務架構。通過了解業務架構,熟悉整個系統的業務,便於在後續系統中根據業務進行開發,這就是所謂的自頂向下的學習。
有時候開發的新項目是自己之前未接觸過的類型,在理解項目的業務時,就會有一定的難度,而每一個項目的開發時間又不是那麼充裕,所以項目上不會給你那麼多的時間來理解系統的業務架構(也包含其它的架構,如邏輯架構等),這時候就需要在項目開發中進行自底向上的學習。如果不是時間特別緊的話,通常會給你一定的時間去了解一個模塊,熟悉系統框架之間各層次間的調用。以此為基礎點,逐步深入,在開發過程中逐漸熟悉系統的架構。
當我們在開發中以模塊為單位開發的樂此不疲時,一定要記得時不時的回頭看看我們的系統架構,無論是業務架構,還是邏輯架構,甚至物理架構,這些都是我們深入理解一個項目的基本。如果我們不滿足於當前的工作狀況,更要記得時時學習系統架構,以整體為單位,進行全面的學習。
無論是作為一名現在的或未來的開發人員或者架構師,我們都不應該止步於當前的學習,時時刻刻切記自頂向下的學習與自底向上的學習是分不開的。自頂向下的學習需要自底向上的學習來完善,自底向上的學習需要自頂向下的學習來指導。
④ 結構化系統分析主要通過什麼進行分析
結構化系統分析主要通過處理功能分解進行分析。
結構化系統分析方法是運用系統工程原理於大型軟體開發的產物,就是採用「自頂向下,由外到內,逐層分解」的思想對復雜的系統進行分解化簡,從而有效地控制了系統分析每一步的難度,並運用數據流圖、加工說明和數據字典作為表達工具的一種系統分析技術。
結構化分析一般包括以下工具:數據流圖(Data Flow Diagram,DFD)、數據字典、結構化語言、判定表、判定樹。在接下來的部分將對它們一一做簡單介紹。結構化系統做叢分析方法從總體上來看是一種強粗胡虛烈依賴數據流圖的自頂向下的建模方法。它不僅是需求分析技術,也是完成需求規格化的有效技術手段。
採用結構化的思想、系統工程的觀點和工程化的方法,按照「自岩燃上而下,逐步求精」的原則,從全局出發,全面規劃分析,從而確定簡明的、易於導向的系統方式,是管理信息系統建設的主流方法。經過多次逐層分解,每個最底層的問題都是足夠簡單、容易解決的,於是復雜的問題也就迎刃而解了。這個過程就是分解過程。
⑤ 結構化分析方法
結構化分析方法(Structured Method,結構化方法)是一種軟體開發方法,一般利用圖形表達用戶需求,強調開發方法的結構合理性以及所開發軟體的結構合理性。
主要用於分析需求,形成需求規約結構化分析方法是以自頂向下,逐步求精為基點,以一系列經過實踐的考驗被認為是正確的原理和技術為支撐,以數據流圖,數據字典,結構化語言,判定表,判定樹等圖形表達為主要手段,強調開發方法的結構合理性和系統的結構合理性的軟體分析方法。
其基本思想主要是把一個復雜問題的求解過程分階段進行,而且這種分解是自頂向下,逐層分解,使得每個階段處理的問題都控制在人們容易理解和處理的范圍內。而它的基本要點是自頂向下、逐步求精、模塊化設計、結構化編碼。