数据结构算法 时间复杂度

  • 数据结构是什么 是一种“存储结构” 算法是什么 是一种操作数据得一种方法,数据结构和算法相辅相成 离了数据结构 某些算法就没有用了 比如二分查找需要随机访问也就是在数组这个数据结构下操作,但是在链表下就不适用了,因为链表是不能随机访问的,数据结构只是一种数据的存在形式如果没有算法来操作数据,那么孤立存在的数据结构就是没有用的
  • 时间复杂度 概念 是算法的执行时间与数据规模的关系 怎么求就是看哪个代码执行的次数最多 而且有未知数 常数 系数 有高阶时的低阶都对时间复杂度影响较低 可以忽略不记
  • T(n) = O(f(n));大O时间复杂度
  • O(1)常数时间复杂度 没有循环 没有递归 那么无论多少条代码都是O(1)
  • O(n) 一行代码执行n次 第三行代码执行了n次 其实第二行代码也得执行n次 就是 2n了 但是系数可以省略
    void test(int n){
    	for(int i = 0;i<n;i++){
    	 i = i +i ;
    	}
    }
    
  • O(n^2) 嵌套循环 俩层循环
  • O(log n)
	void test(int n){
		int i=0;
		for(i=0;i<n;){
			i = i * 2;
		}
		return i;
	}
	

2^1 2^2 2^3 最后2^x=n 停止执行 则执行了多少次第四行代码
x次 x=以2为底的log n 若是i=i*3;则是以3为底的 则表示在大O就是O(log n)

  • O(nlog n)就是多加了一层for执行了n次 快速排序 归并排序就是这么个时间复杂度
void insert(int value,int n){
	int temp = -1;
    int[] a = new int[n]
    for(int i=0;i<n;i++){
		if(a[i] == value) {
			temp = i;
			break;
		}
    }
    return temp;
}
  • 这是一个查找方法 没有找到返回-1 找到返回value在数组中的位置

  • 最好时间复杂度 O(1) 执行一次就找到

  • 最坏时间复杂度 O(n) 执行结束了才找到

  • 平均时间复杂度 假设在数组中占概率1/2 在某一个位置为1/n 则存在概率为1/(2*n) 则加权平均值为(3n+1)/4 则简化一下就是O(n)

  • 还有一个均摊时间复杂度 如果O(1)出现的次数大于O(n)则为O(1) 靠感觉吧 看了一会也感觉和平均差不多

  • 空间复杂度 代码存储大小和数据增长规模的关系

  • 复杂度分析法则

    1. 单段代码 :看执行次数最多的代码 循环
    2. 多段代码:比如说一段代码里有单重循环和多重循环 看多重循环
    3. 嵌套代码:求乘积 O(n^2) 递归 多重循环
    4. 多个参数:求加法 有多个参数影响的代码 但不是多重循环 比如说两个单重循环 一个执行m次 一个执行n次 则O(m+n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值