数据结构是计算机存储、组织数据的一种方式。数据结构是指相互存在一种或多种特定关系的数据元素集合、进行选择的数据结构可以带来更高的程序运行或存储效率。数据结构与高效的检索算法和索引技术有关。
算法是用于解决实际问题的一段程序代码,它有输入、输出并且具有确定性、有穷性和可行性
在算法中,时间复杂度用O表示,常见的时间复杂度有O(1)、O(logn)、O(n)、O(nlogn)、O(n2)、O(nn),时间复杂度指的是运行一段程序所需要花费的时间。
计算时间复杂度往往是计算比较大的,而且是不确定的数,如果已经确定了,那就不用计算了,也就是我们说的常量。
O后面的括号中是一个函数,指明某个算法耗时与数据增长量之间的关系其中n代表输入数据的量
O(1)表示是常数阶,所有能够被确定的执行次数都可以用O(1)表示,它是最低的空间复杂度,也是就是耗时与输入数据大小无关,无论输入数量增大多少倍,耗时都不变。哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到结果(在不考虑冲突的情况下)。
public class HelloWorld{
public static void main(String[]args){
//时间复杂度 O(1)
System.out.println("Hello World!!!");
//时间复杂度 O(1)
for(int i = 0;i<=100;i++){
// ..... 省略逻辑
}
}
}
O(logn)表示对数阶,当数据量增大n倍时,耗时增大logn倍(这里的log是以2为敌,比如当数据量增大256倍时,耗时只增加8被,比线性还要低的时间复杂度)
public class HelloWorld{
public static void main(){
//时间复杂度 O(logn)
int n = 100;
while(n > 1){
n = n * 2;
}
}
}
O(n)表示线性阶,表示数据量增大几倍,耗时量也得增大几倍
public class HelloWorld{
public static void main(){
//时间复杂度 O(n)
int n = 未知大小;
for(int i = 0;i<=n;i++){
// ..... 省略逻辑
}
}
}
O(nlogn)表示线性对数阶,就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍,这个复杂度高于线性低于平方
public class HelloWorld{
public static void main(){
//时间复杂度 O(n)
int n = 未知大小;
for(int i = 0;i<=n;i++){
// ..... 省略逻辑
while(n > 1){
n = n * 2;
}
}
}
}
O(n2)表示平方阶,当数据增大n倍时,耗时增大n2倍
public class HelloWorld{
public static void main(){
//冒泡排序 时间复杂度 O(n^2)
int[]arr = new arr[5]{{0,5,1,3,2}};
for(int i = 0;i < arr.length - 1;i++){
for(int j = i;j<arr.length - 1 - i;j++){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^n)
空间复杂度,指的是运行一段代码所需要消耗的内存大小
找程序代码中开了空间的地方,比如声明数组、链表的地方。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务