美文网首页
读书笔记:图解算法

读书笔记:图解算法

作者: 石头的书桌 | 来源:发表于2018-01-04 11:44 被阅读28次

    读书笔记:图解算法

    算法简介

    二分查找 O(log n)

    大O表示法

    大O表示法 让你能够比较操作数,它指出了算法运行时间的增速

    大O表示法 指出了最糟糕情况下的运行时间

    下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。

     O(log n),也叫对数时间,这样的算法包括二分查找。

     O(n),也叫线性时间,这样的算法包括简单查找。

     O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较>快的排序算法。

     O(n 2 ),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。

     O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法

     算法的速度指的并非时间,而是操作数的增速。

    选择排序 O( n^2 )

    先找最大,再找第二大...

    数组和链表

    数组: 内存中连续

    链表: 随机

    快速排序

    O(n log n)

    递归

    两部分:基线条件(不在调用自己)、递归条件(调用自己)

    快速排序

    分而治之(divide and conquer,D&C)

    这里重申一下D&C的工作原理:

    (1) 找出简单的基线条件;

    (2) 确定如何缩小问题的规模,使其符合基线条件。

    [图片上传失败...(image-7e1b17-1515037467104)]

    [图片上传失败...(image-46af14-1515037467104)]

    散列表

    散列函数

    冲突

     较低的填装因子;散列包含的元素数/位置总数

     良好的散列函数。

    广度优先搜索

    breadth-first search,BFS 广度优先搜索:一种图算法

    图由节点(node)和边(edge)组成。

     第一类问题:从节点A出发,有前往节点B的路径吗?

     第二类问题:从节点A出发,前往节点B的哪条路径最短?

    队列

    队列是一种先进先出(First In First Out,FIFO)的数据结构,而栈是一种后进先出(Last In

    First Out,LIFO)的数据结构。

    有向图(directed graph),其中的关系是单向的。

    无向图(undirected graph)没有箭头,直接相连的节点互为邻居

    如果任务A依赖于任务B,在列表中任务A就必须在任务B后面。这被称为拓扑排序,使用它可根据图创建一个有序列表。

    树是一种特殊的图,其中没有往后指的边。

    狄克斯特拉算法

    
    狄克斯特拉算法包含4个步骤。
    
    (1) 找出“最便宜”的节点,即可在最短时间内到达的节点。
    
    (2) 更新该节点的邻居的开销,其含义将稍后介绍。
    
    (3) 重复这个过程,直到对图中的每个节点都这样做了。
    
    (4) 计算最终路径。
    
    

    边 有权

    带权重的图称为加权图(weighted graph),不带权重的图称为非加权图(unweighted graph)

    狄克斯特拉算法只适用于有向无环图(directed acyclic graph,DAG)。

    不能将狄克斯特拉算法用于包含负权边的图

    在包含负权边的图中,要找出最短路径,可使用另一种算法——贝尔曼福德算法(Bellman-Ford algorithm)

    贪婪算法

    旅行商问题和集合覆盖问题有一些共同之处:你需要计算所有的解,并从中选出最小/最短

    的那个。这两个问题都属于NP完全问题。

    NP完全问题特点

     元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。

     涉及“所有组合”的问题通常是NP完全问题。

     不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。

     如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。

     如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。

     如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题。

    动态规划

    但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用

    最长公共子序列:两个单词中都有的序列包含的字母数

    K最近邻算法

    使用KNN来做两项基本工作——分类和回归:

     分类就是编组;

     回归就是预测结果(如一个数字)

    总结

     KNN用于分类和回归,需要考虑最近的邻居。

     分类就是编组。

     回归就是预测结果(如数字)。

     特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字。

     能否挑选合适的特征事关KNN算法的成败

    MapReduce

    映射( map )函数和归并( reduce )函数

    布隆过滤器:

    可能出现错报的情况,即Google可能指出“这个网站已搜集”,但实际上并没有搜集。

    不可能出现漏报的情况,即如果布隆过滤器说“这个网站未搜集”,就肯定未搜集。

    局部不敏感 SHA 局部改变整体改变(不会区分是否是局部的变化)

    局部敏感 Simhash 局部改变整体细微变化(会区分是否是局部的变化)

    Diffie-Hellman算法及其替代者RSA

    相关文章

      网友评论

          本文标题:读书笔记:图解算法

          本文链接:https://www.haomeiwen.com/subject/etcrnxtx.html