时间复杂度
一、时间复杂度
使用时间复杂度O()来描述算法的性能和程序执行的效率,告诉我们们给定的算法是否可测量。
二、O(1)
(示例1):
public class Main {
public void log(int[] numbers){
//时间复杂度为O(1)
System.out.println(numbers[0]); //O(1)
}
}
(示例2):
public class Main {
public void log(int[] numbers){
//时间复杂度O(1+1)
//时间复杂度O(1)
System.out.println(numbers[0]); //O(1)
System.out.println(numbers[0]); //O(1)
}
}
三、O(n)
(示例1):
public class Main {
public void log(int[] numbers){
//时间复杂度O(n)
for(int num:numbers){
System.out.println(num); //O(n)
}
}
}
(示例2):
public class Main {
public void log(int[] numbers){
//时间复杂度O(n+1+1)
//时间复杂度O(n)
System.out.println(numbers[0]); //O(1)
for(int num:numbers){
System.out.println(num); //O(n)
}
System.out.println(numbers[0]); //O(1)
}
}
(示例3):
public class Main {
public void log(int[] numbers){
//时间复杂度O(n+n)
//时间复杂度O(n)
for(int num:numbers){
System.out.println(num); //O(n)
}
for(int num:numbers){
System.out.println(num); //O(n)
}
}
}
(示例4):
public class Main {
public void log(int[] numbers,String[] nums){
//时间复杂度O(n+m)
//时间复杂度O(n)
for(int num:numbers){
System.out.println(num); //O(n)
}
for(String num:nums){
System.out.println(num); //O(m)
}
}
}
四、O(n^2)
(示例1):
public class Main {
public void log(int[] numbers){
//时间复杂度O(n*n)
//时间复杂度O(n^2)
for(int num1:numbers){ //O(n)
for(int num2:numbers){ //O(n)
System.out.println(num1 + "," + num2);
}
}
}
}
(示例2):
public class Main {
public void log(int[] numbers){
//时间复杂度O(n*n*n)
//时间复杂度O(n^3)
for(int num1:numbers){ //O(n)
for(int num2:numbers){ //O(n)
for(int num2:numbers){ //O(n)
System.out.println(num1 + "," + num2);
}
}
}
}
}
五、O(logn)
(示例1):
public class Main {
public void log(int[] numbers){
//时间复杂度O(log2(n))
for(int i = 0; i < numbers.length; i = i* 2){
System.out.println(i); i=2,4,8,16...时执行,可通过对数近似计算次数,执行log2(n)次
}
}
}
总结
- n是指输入的数
- O(1)无论输入数据多大或改变多少,都不会改变。一般应用于根据数组索引查询数据,哈希算法。
- O(n) 随着输入数据的增大而增大。一般应用于根据数组遍历查询数据,冒泡排序O(n^2)。
- O(logn)一般应用于有序数组的二分查找中。