算法的时间复杂度定义.
常见的时间复杂度
O(1)—常数阶
单条操作的频度为1,即使他有成千上万条操作,也只是个较大常数,这一类的时间复杂度为O(1);
temp=a;a=b;b=temp;
O(N)—线性阶
第一行频度1,第二行频度为n,第三行频度为n,所以f(n)=n+n+1=2n+1。 根据守则:只要高阶项,不要低阶项目,常数项置为1,去除高阶项的系数:所以时间复杂度O(n)。这一类算法中操作次数和n正比线性增长。
sum=0;for(i=0;i<n;i++)sum++;
O(log2N)—对数阶(二分查找)
假设n为100,number是1,小于100退出循环。
- 第1次循环,number = 2,2^1。
- 第2次循环,number = 4, 2^2。
- 第3次循环,number = 8, 2^3。
- 第x次循环,number = 2^x
也就是2^x=n得出x=log₂
int number = 1;//执行1次int n = 100;//执行1次while (number < n) {number = number * 2; // 执行n/2次printf("ssssss");//执行1次}
O(nlogn)—线性对数阶
数组a和b,a的规模为n,遍历的同时对b进行二分查找
for(int i =0;i<n;i++)binary_search(b);}
O(n^2)—平方阶
int n = 100;for (int i = 0; i < n; i++) {//执行n次for (int j = 0; j < n; j++) {//执行n次printf("2222222");}}for (int i = 0; i < n; i++) {//执行n次for (int j = i; j < n; j++) {//执行n - i次System.out.println("哈哈");}}
常用算法的时间复杂度和空间复杂度


