数据结构与算法--复杂度分析

目录

最常用的20个知识点

相关书籍

时间复杂度分析

算法汇总

参考


 

最常用的20个知识点

10个数据结构

  • 数组
  • 链表
  • 队列
  • 散列表
  • 二叉树
  • 跳表
  • Trie树

10个算法

  • 递归
  • 排序
  • 二分查找
  • 搜索
  • 哈希算法
  • 贪心算法
  • 分治算法
  • 回溯算法
  • 动态规划
  • 字符串匹配算法

 

相关书籍

  • 大话数据结构
  • 算法图解
  • 数据结构与算法分析 C,C++,Java,JavaScript,Python
  • 剑指Offer
  • 编程珠玑
  • 编程之美
  • 算法
  • 算法导论
  • 计算机程序设计艺术
  • 算法帝国
  • 数学之美
  • 算法之美

数据结构与算法--复杂度分析_第1张图片

 

 

时间复杂度分析

大O事件复杂度表示法,并不具体表示代码真正的执行时间,而是表示代表执行时间随数据规模增长的变化趋势,所以也叫 渐进时间复杂度 asymptotic time complexity,简称 时间复杂度

时间复杂度分析

  • 只关注循环执行次数最多的一段代码
  • 加法法则:总复杂度等于两级最大的那段代码的复杂度
  • 如果T1(n)=O(f(n)),T2(n)=O(g(n)),那么T(n)=T1(n)+T2(n)=O(max(f(n),g(n)))
  • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
  • 如T(n)=T1(n)*T2(n)=O(n*n)=O(n^2)

 

对于复杂度量级,可以粗略的分为两类,多项式量级,非多项式量级,其中非多项式量级有O(2^n),和O(n!),即NP时间复杂度

数据结构与算法--复杂度分析_第2张图片

采用大O标记复杂度时,可以忽略系数,即O(Cf(n))=O(f(n)),log3n=log3 2*log2n,其中C=log3 2,所以可以忽略

与时间复杂度对应的是空间复杂度,全称是 渐进空间复杂度 asymptotic space complexity,表示算法的存储空间与数据规模之间的增长关系

数据结构与算法--复杂度分析_第3张图片

 


四个复杂度分析

  • 最好情况时间复杂度 best cast time complexity
  • 最坏情况时间复杂度 worst case time complexity
  • 平均情况时间复杂度 average case time complexity
  • 均摊时间复杂度     amortized time complexity

求一个数组里是否有一个值,需要考虑到这个值在每个位置出现的概率(假设都是1/2)
这个值就是概率论中的加权平均值,也叫期望值,所以平均时间复杂度的全称叫 加权平均时间复杂度 或者 期望
时间复杂度

均摊时间复杂度和摊还分析应用场景比较特殊
对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这时可以将这一组操作放在一起分析,看能否将较高时间复杂度那次操作的好事,平摊到其他哪些时间复杂度较低的操作上
在能够应用均摊时间复杂度分析的场合,一般均摊时间复杂度就等于最好情况时间复杂度

 

 

 

算法汇总

数据结构与算法--复杂度分析_第4张图片

课程目录

数据结构与算法--复杂度分析_第5张图片

 

 

参考

算法的动态演示图

 

 

你可能感兴趣的:(算法)