7

这是一辆开往算法幼儿园的车,磨磨唧唧地看完了《算法图解》这本书,真的是不错的算法入门书。
趁这个机会再复习一下并优化一下之前的笔记,也分享下之前的笔记,有些许心得和思考。全书不到200页,对算法感兴趣还未接触过的同学推荐你看下原书。
笔记中小结皆引自原文


第一至第四章内容较少,笔记记为一篇
第五至第六章内容较少,笔记记为一篇

第一章 简介

  1. 二分查找:很常见的在有序列表中做比较再做范围排除的查找算法,例如:35?大了。20?小了。25?对了。这就是个二分查找。
  2. 大O表示法,一种指出算法运行时间(随元素数)的增速的表示方法(忽略常数系数),可让你比较方便的比较达到目的的(所需的)操作(次)数。如O(n),则对于元素数为n的列表,查找所需操作次数也为n。

第二章 选择排序

  1. 数组和链表两种数据结构。数组在内存中是连续的,由索引指向。链表中的每个元素都有指向下个元素的地址。
  2. 选择排序:逐步找出剩余项中最大(小)值的算法。

第三章 递归

  • 递归的本质是压栈和出栈
  • 使用尾递归进行优化

第四章 快排算法

  • 使用分而治之的思想解决问题,将问题拆分为最小问题,解决并合并得到最终解。
  • 快排算法正是使用了这种思想的算法。快排算法找一项的值为基准值,将每个元素与基准值按大小关系分为左分区和右分区,并在左分区和右分区做重复操作,直至分区只有一项(分而治之),然后合并所有(单项)子分区,得到排序结果。
  • 合并排序:将待排序列逐层拆分,直到成为单个项,并逐层两两合并,合并时比较第一项的大小并放入新的数组(同样是分而治之)。

第五章 散列表

  • js中的对象是基于散列表结构的。
  • 散列表是根据关键码值(Key value)而直接进行访问的数据结构,所以查找很快。应用也就是用来做查找,去重和缓存(去重和缓存还是依赖于查找)。

第六章 广度优先搜索

  1. 图:节点加边,如:○———>○,这就是个基本的图。图根据有没有箭头分为有向图和无向图,其中无向图是即双向关系(a指b,b也指向a)的图。
  2. 广度优先搜索:按层遍历,遍历完第一层关系后进行第二层的遍历,实际操作时,可先将根节点添加至队列,检测根节点,如不是目标值,移出根节点,再将根节点的子节点(所指向的节点)添加至队列,循环直到找到目标值。

第七章 狄克斯特拉算法

此章节书中有错误,纠错查看笔记

  • 加权图:边上有权重值的图
  • 如果说广度优先搜索可查找至目标的(经过)最少边路径,那么狄克斯特拉算法就可以查找最低(权重,可以是金钱花费,时间花费)成本的路径。
  • 实际操作(详细实例操作看笔记):

    1. 列出除起点外的所有节点;
    2. 对起点外节点添加权重值,其中起点直接指向的节点的权重是能直接列出的,其他节点可列为∞(无穷);
    3. 找到目前权重最小的节点,重复步骤2,即列出此节点指向节点的权重(需途径当前节点),若已有权重,则与当前权重比较取较小值并更新,同时将当前节点标记为已操作。
    4. 找到目前未操作的权重最小的节点,重复上述步骤;
    5. 所有节点操作完毕后,即可得到达到终点的最小权重。
    6. 路径怎么找呢,在上述添加个更新权重的时候,应该记录到达此节点的上一个节点是谁,那么从终点向上即可得到当前的最短路径。

第八章 贪婪算法

  • 贪婪算法不是具体的算法,而是一种解决问题的思想,通过局部利益的最大化,最终能够实现全局利益的最大化或者可以说是接近于全局利益最大化。比如:前文的狄克斯特拉算法,就是每步先找当前权重最小的值,或者如何在有限的时间内安排最多的课程,就安排在剩余时间里最早开始并最早结束的课程。
  • 可以较快的解决NP完全问题
  • 简单的说NP完全问题是难以解决的问题,大多需要先列出所有的解,再找到最小的那个,复杂度会随元素数量急剧增加。

第九章 动态规划

  • 将问题分为小问题,并先着手解决这些小问题。与分而治之不同的是,分而治之需要在计算每个子问题的时候都进行一边计算,而动态规划则更多是范围变大的子问题与之前的更小范围的子问题的结果进行比较。这一章节比较不好理解,参考我的笔记也可能会有些片面,大家可以自己查查资料
  • 经典问题:背包问题

第十章 k最近邻算法

  • 所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻居来代表。
  • 运用:

    1. 分类:你与k个人的歌曲喜好相似,那么这k个人的喜好歌曲就可以推送给你
    2. 回归:今天的其他情况(天气,日期,活动等)与k天的类似,那么就可以通过k天的平均营业额推测今天的营业额

第十一章 接下来如何做

  • 其他的算法与应用

结束了,每章小结真是复习和阅读解惑的好东西。


toBeTheLight
16.6k 声望26.6k 粉丝

学习数学知识(0/n)