一般法則
法則1 - for迴圈
乙個for迴圈的執行時間至多是該for迴圈內部那些語句的執行時間乘以迭代的次數。
法則2 - 巢狀的for迴圈
從裡向外分析這些迴圈。在一組巢狀迴圈內部的一些語句總的執行時間為該語句的執行時間乘以該組所有的for迴圈的大小的乘積
例如,下列程式片斷為o(n2
):
法則3 - 順序語句for(i = 0;i < n; i++)
}
將各個語句的執行實際求和即可。 n和n
2 相加為n2
法則4 - if/else語句
乙個if/else語句的執行時間從不超過判斷的執行時間再加上s1和s2中執行時間長者總的執行時間。if(condition) s1
else s2
分析的基本策略是從內部向外部展開工作的。如果有方法呼叫,那麼要首先分析這些呼叫。
最大子串行和問題
//第一層迴圈控制首數字位置
//第二層迴圈控制尾數字位置
//第三層迴圈在生成首尾後 把從首到尾的數字相加
//複雜度:n^3
public static int maxsubsum1(int a)
}return maxsum;
}//第一層迴圈控制首數字位置
//第二層迴圈控制尾數字位置
//1,2兩種方法不同點:
// 1.演算法1每次的生成的子串行都要從首到尾計算
//複雜度:n^2
public static int maxsubsum2(int a)
}return maxsum;
}//分治法 複雜度 nlogn
private static int maxsumrec(int a, int left, int right)
int center = (left + right) / 2;
int maxleftsum = maxsumrec(a, left, center);
int maxrightsum = maxsumrec(a, center + 1, right);
int maxleftbordersum = 0, leftbordersum = 0;
for (int i = center; i>=left; i--)
int maxrightbordersum = 0, rightbordersum = 0;
for (int i = center + 1; i <= right; i++)
system.out.println(maxleftbordersum+","+maxrightbordersum);
return max3(maxleftbordersum,maxrightbordersum,maxleftbordersum+maxrightbordersum);
}private static int max3(int num1, int num2, int num3)
//1,2演算法的優化,關鍵任何負序列的末端子串行不能作字首
public static int maxsubsum4(int a)
else if(thissum < 0)
}return maxsum;
}
資料結構與演算法(緒論)
作為乙個準程式設計師,在讀本科的時候,就一直被老師不停的灌輸資料機構與演算法的重要性,但是好像我們從來就沒遇到過真正棘手的需要通過資料結構去解決的問題,可能唯一再聽到它的時候就是找工作實習的時候會被面試官提問,因此我們似乎覺得資料結構沒那麼重要,而且又因為各種程式語言,尤其是python,各種內建的...
資料結構與演算法 緒論
重要性 使用者資訊表usersid name 001 bigsai man002 smallsai man003 菜虛鯤woman users的pojo物件 class users list和woman是資料 listlist 資料物件list listwoman 資料物件woman list.ad...
演算法與資料結構緒論
資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科 程式設計 資料結構 演算法 傳統上,我們把資料結構分為邏輯結構和物理結構 邏輯結構 是指資料物件中資料元素之間的相互關係,也是我們今後最需要關注和討論的問題。物理結構 是指資料的邏輯結構在計算機中的儲存...