算法简介
算法 algorithm 评判算法的好坏有两个指标:
- 时间复杂度
- 空间复杂度
数据结构简介
数据结构 data structure 数据结构常见的组成:
- 线性结构 包括数组、链表、衍生的栈、队列和哈希表
- 树形 包括典型的二叉树,衍生的二叉堆
- 图
- 其他
时间复杂度计算
用数学方式得出执行次数T和输入规模n的函数T(n)=f(n) 因为存在n值的取值不同而得出的T的大小不同的情况,使用渐进时间复杂度来处理。 渐进时间复杂度用最高阶项O(f(n))表示,比如常量的时间复杂度为O(1),线性的O(n),二次方O(n^2)
空间复杂度
在查找重复值得时候,经常使用双重循环来做,其时间复杂度高。想要降低时间复杂度,就用到内存,就涉及空间复杂度。空间复杂度中,js对象和哈希表相当类似,可以直接将遍历的数字当做key值存入对象中,在下一次值的读取的时候直接看有没有映射到对象中的数据。 值得注意的是,js对象中不论key原来的数据是什么类型的,统统转化成字符串了。所以涉及到多种数据类型的一定要小心,可以考虑使用Map。
(哈希表也叫作散列表,js对象是基于哈希表来实现的)
空间复杂度的计算
定值常量为O(1) 线性空间(数组)O(n) 二维空间(二维数组[[1,2],[3,4]])O(n^2) 递归空间(方法调用栈的存储)进栈和出栈 空间复杂度也为O(n)
添加内容 再回来看这个笔记发现有些东西遗漏了
关于算法的时间复杂度,其实基本的指标就是代码执行次数。为什么会有渐进时间复杂度,是因为不同的情况下,算法之间的执行次数比较起来结果不同,在考虑极大值的情况下使用渐进时间复杂度的思想是非常好的。
关于空间复杂度,是计算占用空间和n(输入规模)之间的关系