算法的穩定性:如果排序后,兩個擁有相等關鍵字的元素a和b的相對位置沒有發生變換,則穩定,否則不穩定。
內部排序是指在排序期間元素全部存放在內存中的排序;外部排序是指在排序期間元素無法全部同時存放在內存中,必須在排序過程中根據要求不斷地在內、外存之間移動的操作。
然后再來溫習一下時間復雜度的計算:
時間復雜度的計算其實就是計算出算法某條執行語句的具體執行頻度,之后取頻度的數量級即可。下面用例子溫習:
例1:
void fun(int n){
int i = 1;
while(i<n) i*=2;
}
設語句 i*=2運行t次,則,t=maxtt,s.t.2t<n,即t是使2^t<n成立最大的t。故t=log2n(向下取整)。故時間復雜度O(log2 n)。
例2:
count=0;
for(k=1;k<=n;k*=2)
for(j=1;j<=n;j++)
count++;
外循環t次,2^t=n,t=log2 n。內循環n次。故O(nlog2n)。
例3:
y=0;
while((y+1)(y+1)<=n)
y+=1;
\(t=max_t t , s.t. t^2<=n\)
t=n^(1/2)。O(n^0.5)。
例4:
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
for(int k=1;k<=j;k++)
x++;
內層循環受外循環控制變量大小控制,故不能簡單相乘。研究發現,i=某值c時,最內層循環次數為:1+2+…+c。故\(O(\sum_i^n i*(n-i-1))\)但不會算,不過有個結論可以用:\(\sum_{i=1}^n\sum_{j=1}^i\sum_{k=1}^j l=O(\frac{n^3}{6})=O(n^3)\)
另外總結一些常用數學公式:
等差數列求和公式:\(Sn = \frac{a_1+a_n}{2}n=a_1n+\frac{n(n-1)}{2}d\)
等比數列求和公式:\(Sn = a_1\frac{1-q^n}{1-q}\)
和公式:\(1+2+...+n=\frac{n(n+1)}{2}\)
平方和公式:\(1^2+2^2+...+n^2=\frac{n(n+1)(2n+1)}{6}\)
立方和公式:\(1^3+2^3+...+n^3=\frac{n^2(n+1)^2}{4}=(\frac{n(n+1)}{2})^2\)