複雜方法的開發 分治策略

2022-09-14 11:30:10 字數 1770 閱讀 5886

軟體開發的關鍵在於應用抽象的概念。

方法抽象是通過將方法的使用和它的實現分離來實現的。

使用者在不知道方法是如何實現的情況下,就可以使用方法。

方法的實現細節封裝在方法內,對使用該方法的使用者來說是隱藏的。這就被稱為資訊隱藏或者個封裝。

如果決定改變方法的實現,但只要不改變方法簽名,使用者的程式就不會受到影響。

方法的實現對使用者隱藏在「黑匣子」中

我們前面編寫過一些方法,也使用過一些方法。

我們知道,作為方法的使用者,並不需要知道它們是如何實現的。

方法抽象的概念可以應用於程式的開發過程中。

當編寫乙個大程式時,可以使用「分治」策略,也成為逐步求精,將大問題分解成為子問題。

子問題又分解成更小、更容易處理的問題。

例如,想要編寫方法實現如下圖的輸入年月,得到月份日曆表的程式:

1、分治策略的首先是分析需求,將需求拆分成各個部分

1)、接受輸入

public int readinput()

2)列印月曆

public void printmonth(int date)

1))、列印月份頭

public void printhead(int date)

2))、列印月份體

public void printbody(int date)

簡單的方法拆分之後,我們先完成部分的**編寫

public static void main(string args) 

public void printmonthdate()

private void printdate(int date)

private void printhead(int date)

private string transfermonth(int month)

} private void printbody(int date)

private int readinput()

我們發現,列印月份體**比較複雜,因此我們先只寫了乙個空的方法宣告,將其他**部分完成並簡單測試,為了不影響程式效果,可以將方法體置空,或者方法體內模擬資料執行。

現在再來分析列印方法體:

1、列印空格

public void printspace(int week)

2、列印數字

public void printdaynumber(int week, int monthday)

列印空格和列印數字需要兩個資料:

1、當月第一天是星期幾

getfirstdayweek(int year, int month)

2、本月有多少天

getmonthdaycount(int month)

對應編寫方法與測試:

private void printbody(int date)

private void printspace(int week)

} private void printdaynumber(int week, int monthday){

int daystart = 1;

while(daystart分治策略,指的就是將問題拆分成為多個子問題,然後挑簡單的先完成,這樣,就不會出現問題太過複雜而難以下手的情況了。

分治策略 求解遞迴式的方法

分解 將原問題劃分成形式相同的子問題,規模可以不等,對半或2 3對1 3的劃分。解決 對於子問題的解決,很明顯,採用的是遞迴求解的方式,如果子問題足夠小了,就停止遞迴,直接求解。合併 將子問題的解合併成原問題的解。這裡引出了乙個如何求解子問題的問題,顯然是採用遞迴呼叫棧的方式。因此,遞迴式與分治法是...

簡單的分治策略

簡單的分治策略 分治,是程式設計中常用的一種策略,例如在歸併排序中就有使用。分治策略是一種遞迴求解問題的方法,在每層的遞迴中可分為三個步驟 分解 divide 解決 conquer 合併 combine 分解 divide 指的是將問題劃分為一些子問題,子問題與原問題具有相同的形式,但規模較之更小。...

關於分治法的時間複雜度

分治法類似於二叉樹法,將乙個大問題,分成兩個小問題解決。由於子問題與母問題有相同的屬性,也就是一類問題,分步解決問題。這裡用歸併排序舉例。如果不用分治法,a1與a2到an每個數比較,進行n 1次,a2進行n 2次,總次數為 n 1 1 n 1 n 2 n一般排序為o n 2 時間複雜度較高。採用分治...