①常數的時間操作:乙個操作如果和資料量沒有關係,每次都是固定時間操作,叫做常數操作。
②時間複雜度常用o(讀作big o)來表示。具體來說,在常數運算元量的表示式中,
只要高階項,不要低階項,也不要高階項的係數,剩下的部分記為f(n),那麼時間複雜度記為
o(f(n))。
對乙個長度為n的陣列進行排序:
演算法:依次從0—-n-1個數中選出最小的數,放在陣列的0位置
從1—n-2個數中選出最小的數,放在陣列的1位置
從2—n-3個數中選出最小的數,放在陣列的2位置
time=n+(n-1)+(n-2)**+1=(n+1)n/2
只要高階項,不要低階項,也不要高階項的係數
所以時間複雜度位o(n*n)
乙個有序陣列a,另乙個無序陣列b,請列印b中所有不在a中的數,a陣列的長度為n,
b陣列的長度為m。
·演算法1:對於陣列b中的每乙個數,都在a中通過遍歷的方式找一下;
·演算法2:對於陣列b中的每乙個數,都在a中通過二分的方式查詢一下;
·演算法3:先把b中的數進行排序,然後用類似外排的方式列印所有不在a中出現的數。
計算時間複雜度:
1、o(m*n)
2、①對有序的陣列,二分查詢的時間複雜度o(logn) 底數為2
在1,3,5,6,8,10中找出x
l………………r
mid=(l+r)/2 ,根據,陣列[mid]與x比較大小的結果,確定下一次二分的方向,n個數二分最多能分logn次。
②所以演算法2的時間複雜度為 o(m*logn)
3、 ①對無序陣列使用基於比較的排序演算法o(m*logm)
②1,3,5,7,10,16,18;2,4,8,17,20
….a…………………….b…………
使用類似外排的方式:如果a
//o(n*n)
package day01;
public
class
day01_bubblesort
for(int end=arr.length-1;end>0;end--)}}
}public
static
void
swap(int arr,int i,int j)
public
static
void
main(string args) ;
day01_bubblesort.bubblesort(a);
for (int i=0;ipublic
class
day01_selectionsort
for(int i=0;i1;i++)
public
static
void
main(string args) ;
day01_selectionsort.selectionsort(a);
for(int i=0;ipackage day01;
/*輸入:乙個含有n個元素的陣列
* 1、遍歷陣列的下標 1.......n-1
* 2、依次把下標所對應的元素與前乙個元素進行比較,小於之前的元素就交換,並不斷比較
**時間複雜度o(n^2)
** 最好o(n)
* 最壞o(n^2)
** */
public
class
day01_instertionsorting
for (int i=1;ifor(int j=i;j>=0;j--)
else }}
}private
static
void
swap(int arr, int i, int j)
public
static
void
main(string args) ;
day01_instertionsorting.insertionsorting(arr);
for (int arr_ele:arr)}}
public
class
day01_recursion
int mid=(l+r)/2;
int maxleft=getmax(arr,l,mid);
int maxright=getmax(arr,mid+1,r);
return math.max(maxleft,maxright);
}public
static
void
main(string args) ;
system.out.println(day01_recursion.getmax(arr,0,8));}}
設a>=1,b>1為常數,f(n)為函式,t(n)為非負整數,且
t(n)=at(n/b)+f(n)
a是歸約後子問題的個數
b是子問題的規模
f(n)是歸約過程及組合子問題解的工作量
如歸併排序:t(n)=2t(n/2)+o(n)
帶入公式其時間複雜度為o(n*logn)
package day01;
/*歸併排序的時間複雜度是o(n*lgn)
t(n)=2t(n/2)+o(n)
* */
public
class day01_mergesort
sortprocess(arr,0,arr.length-1);
}public
static
void
sortprocess(intarr,int l,int r)
int mid=(l+r)/2;
sortprocess(arr,l,mid);//t(2/n)
sortprocess(arr, mid+1, r);//t(2/n)
merge(arr,l,mid,r);//o(n)
}public
static
void
merge(int arr,int l,int mid,int r)
while (p1<=mid)
while (p2<=r)
for (i=0;ipublic
static
void
main(string args) ;
day01_mergesort.mergesort(arr);
for (int i=0;iout.println(arr[i]);}}
}
2022 1 6 時間複雜度及簡單排序演算法
1.時間複雜度 2.簡單排序演算法 1 選擇排序 public class selectionsoft selectionsoft arr public static void selectionsoft int arr for int i arr 2 氣泡排序 從第i個數一直到n 1個數上一直找最...
1 時間複雜度
演算法的計算成本涵蓋許多方面,為確定計算成本的度量標準,我們不妨從計算速度這一重要因素入手。但是這一問題並不是容易直接上手回答,原因在於,運算時間是由許多因素綜合作用而決定的。即使是同一演算法,對於不同的輸入所需的運算時間並不相同。問題規模往往是決定計算成本的主要因素。一般的,問題規模越相近,相應的...
01 時間複雜度 空間複雜度
1 時間頻度 乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。2 時間複雜度 若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n f ...