数据结构-复杂度分析面试题

1 数据结构

1.1 复杂度分析

什么是复杂度分析?

  • 1 代码执行的效率以及占用的物理资源
  • 2 作用:评价一段代码/一段算法 优劣的一种重要的指标
  • 3 复杂度分析的过程中:一般情况下,排除硬件的影响
  • 4 复杂度分析分为两个:
    1 时间复杂度
    2 空间复杂度

2.1 时间复杂度

什么是时间复杂度?

  • 1 作用:考量代码执行效率的一个非常重要的指标
  • 2 全称:渐进时间复杂度
  • 3 抛开算法运行的软硬件环境,只考虑算法与问题规模之间的关系。
  • 4 算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大成都上能很好反映出算法的优劣与否。
  • 5 算法执行时间需要通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。
    在这里插入图片描述
    时间复杂度,一般采用大O表示,评估算法的一种方式
    O(1):不是代表只有一行代码,只是说没有遍历去影响他,他的时间复杂度是常量级的
public void sum1(){  sout("和="+sum);
}  
public void sum1(){  sout("和="+sum);     sout("和="+sum);     sout("和="+sum);     sout("和="+sum);
}
 
public void sum1(){  sout("和="+sum);     sout("和="+sum);     //.....100行代码     sout("和="+sum);     sout("和="+sum);
}
 
O(n):单层for循环,算法的时间复杂度只跟n的大小有关
O(n^2):嵌套for循环
public void sum1(int[] array){  for(int i=0;i<array.length;i++){  	 	for(int j=0;j<array.length;j++){  	 	 	 	 sum = array[i] * array[j];
 	 	 }
 }
}

在这里插入图片描述
T = 2 n +2 时间复杂度是O(n)
T = 2000
n +10000 时间复杂度是O(n)
T = 1.* n * n +0 时间复杂度是O(n^2)
问题:O(n^2)的执行一定会被O(n)消耗更多的时间吗?
答:不一定
当n=1的时候 T = 2000*n +10000 时间复杂度是O(12000) T = 1.* n * n +0 时间复杂度是O(1)
但是
当n=10000的时候 T = 2000*n +10000 时间复杂度是O(2001 0000) T = 1.* n * n +0 时间复杂度是1 0000 0000
结论:当n趋于无穷大的时候,O(n^2)的时间复杂度一定是高于O(n)

3.1 Array的CRUD复杂度分析

add
addLast:当不需要扩容的时候,时间复杂度是O(1);当需要扩容的时候,时间复杂度是O(n)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值