算法设计基本方法

  • 贪婪算法
    • 在每一个阶段做出的决定可以认为是好的,而不考虑将来的结果这意味着选择是某个局部的最优,当算法终止时我们希望局部最优就是全局最优。例子:找零钱
    • 简单的调度问题
      • 非预占调度:一旦开始某一个作业,就必须把该作业运行到底
    • 哈夫曼算法
      • 在森林中,每次挑选2个权最小的树结合成棵新树
    • 装箱问题:运行效率快,但不一定是最优解
      • 假设有n个小于1的数,箱子的容量是1,把这着树装进最小数目的箱子
      • 联机算法:执行当前数字后才处理下一个,(不能总是产生最优解),只能不断接近,以下三种算法能保证小于二倍最优箱子数
        • 下项适合算法:新的数判断能否装进去刚刚的箱子,不行再开辟新箱子
        • 最佳适合算法:把树放进能够容纳他最满的箱子
        • 首次适合算法:依序扫描已有的箱子,把新的一项放进能放下他的第一个箱子,放不下再去开辟新箱子
      • 脱机算法:遍历所有之后在处理
        • ·先排序后,把最大放在最先
  • 分治算法:分:递归解决较小问题,治:然后从子问题的解构建原问题的解
    • 至少两个递归,且子问题不相交
    • 最近点问题
    • 选择问题:寻找第k小的元素
    • 使用五数中值法可以让快速排序运行时间达到O(n)
    • 分治算法可以降低选择算法所期望的比较次数
    • 整数相乘:对于大书无法假设以常数时间运行,在我们平常的笔算方法中的时间为O(n)
      • 将数中间截取,为两个数相加,然后就能拆分为几个较小的数相乘后相加
    • 优化矩阵乘法
  • 动态规划:把子问题答案记录在表里,用表代替递归
    • 构造最优二叉查找树
    • 所于点对最短路径
  • 随机化算法
    • 随机化算法隐式地用于完美散列和通用散列
    • 随机数发生器
      • 线性同余数发生器
    • 素性测试
  • 回溯算法:穷举搜索的巧妙实现
    • 博弈问题
    • 收费公路重建问题
 
 
posted @ 2020-07-12 23:41  浪波激泥  阅读(410)  评论(0编辑  收藏  举报