数据算法学习入门(一)

134 阅读2分钟

算法简介

算法 algorithm 评判算法的好坏有两个指标:

  1. 时间复杂度
  2. 空间复杂度

数据结构简介

数据结构 data structure 数据结构常见的组成:

  1. 线性结构 包括数组、链表、衍生的栈、队列和哈希表
  2. 树形 包括典型的二叉树,衍生的二叉堆
  3. 其他

时间复杂度计算

用数学方式得出执行次数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(输入规模)之间的关系