zoukankan      html  css  js  c++  java
  • 算法图解的一点总结

    《算法图解》这本书不错,就像书封面说的一样,像小说一样有趣的算法入门书。在这里记下我学习的笔记。

    一、大O表示法

    1. 大O表示法:指出了算法需要执行的操作数,指出了最糟情况下的运行时间
    2. 一些常见的大O运行时间

        从快到慢

        O( log n ),即对数时间,这样的算法包括二分查找 
        O( n ),即线性时间,这样的算法包括简单查找 
        O( nlog n ),这样的算法包括快速排序,即一种较快的排序算法 
        O( n*n ),这样的算法包括选择排序,即一种速度较慢的排序算法 
        O( n! ),这样的算法包括旅行商问题的解决方案,即一种非常慢的算法

    二、递归

    1. 递归函数包含递归条件和基线条件
      • 递归条件:函数调用自己
      • 基线条件:函数不再调用自己
    2. 调用栈

    三、快速排序

    1. 分而治之(divide and conquer,D&C):递归式问题的解决方法。
      • 用D&C解决问题包括两个步骤①找出简单的基线条件②将问题不断分解(或者说缩小规模),直到符合基线条件
      • 每次递归调用都必须将问题规模缩小 
      • 递归在记录状态
      • 提示:编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素

       2.快速排序

         步骤

          (1)选择基准值

          (2)将数组分成两个子数组:小于基准值的元素和大于基准值的元素

          (3)对这两个子数组进行快速排序

    四、狄克斯特拉算法

    1. 找出加权图中前往X的最短路径
    2. 适用于有向无环图(不能有负权边),含有负权边的用贝尔曼-福德算法
    3. 关键理念:找出图中最便宜的节点,并确保没有到该节点的更便宜的路径
    4. 步骤
      • 找出“最便宜”的节点
      • 对于该节点的邻居,检查是否有前往它们的更短路径,如果有,更新该节点的邻居的开销
      • 重复这个过程,直到对图中每个节点都这样做了
      • 计算最终路径  

    五、贪心

    六、动态规划

    1. 动态规划可在约束条件下找到最优解
    2. 分解的每个子问题必须是离散的,不依赖于其他子问题时,动规才有用
    3. 每种动态规划解决方案都涉及网格
    4. 网格中的值通常是你要优化的值
    5. 每个单元格都是一个子问题,要考虑如何将问题分成子问题,找出网格的坐标轴
    6. 绘制网格
      • 单元格中的值是什么
      • 如何将这个问题划分成子问题
      • 网格的坐标轴是什么

      弗曼算法

      • 将问题写下来
      • 好好思考
      • 将答案写下来    

    七、K最邻近算法  

     

    每天进步一点点,不要停止前进的脚步~
  • 相关阅读:
    mysql高效分页
    mybatis插入值为空时需要制定类型
    NoClassDefFoundError
    mybatis动态sql中的两个内置参数(_parameter和_databaseId)
    Java位运算在程序设计中的使用:位掩码(BitMask)
    基于netty的聊天室(保持和获取客户端channel)
    Netty自定义协议半包编解码
    位运算基础
    JAVA加密系列(四)- 位运算加密(异或加密)
    位运算基础
  • 原文地址:https://www.cnblogs.com/myworld7/p/6964970.html
Copyright © 2011-2022 走看看