算法设计技巧

《数据结构与算法分析》第十章整理

贪婪算法

greedy algorithm

optimal/suboptimal solution
贪婪算法分阶段地工作,在每个阶段,可以认为所做决定是好的,而不考虑将来的后果。一般来说,这意味着选择的是某个局部的最优。这种 “眼下能拿到的就拿” 的策略即是贪婪算法。

  • 常见的有:Dijkstra算法Prim算法Kruskal算法

  • 简单调度问题

    non-preemptive scheduling
    
    • 平均完成时间最小化
    • 最后完成时间最小化
  • 近似装箱问题

    bin packing problem
    
    • 联机算法 on-line

    • 脱机算法 off-line

      将各项物品排序,把最大的物品放在最先。
      
    • 下项适合算法 next fit

      当处理任何一项物品时,检查看他是否还能装进刚刚装进物品的同一个箱子中去。如果能够装进去就把它放入该箱子中;否则,就放入一个新的箱子。
      
    • 首次适合算法 first fit

      依次扫描这些箱子,但把新的一项物品放入能装下它的第一个箱子中。
      
    • 最佳适合算法 best fit

      不是把一项新物品放入所发现的第一个能容纳它的的箱子中,而是放到所有箱子中能够容纳它的最满的箱子中。
      
  • 哈夫曼算法

    Huffman code
    
    • 最优哈夫曼编码树

分治算法

divide and conquer	
  • 降低时间复杂度
    • 最近点问题
    • 选择问题
    • 整数相乘
    • 矩阵乘法

动态规划

dynamic programming

当编译器不能正确的对待递归算法,导致低效的算法时,将递归算法重新写成非递归算法,让后者把那些子问题的答案系统的记录在一个表内。

  • 用一个表代替递归
  • 矩阵乘法顺序安排
  • 最优二叉查找树
  • 所有点对最短路径

随机化算法

randomized algorithm	
  • 随机数发生器
  • 跳跃表
  • 素性测试

回溯算法

backtracking	
  • 收费公路重建问题
  • 博弈
posted @ 2018-10-25 22:02  TZhao  阅读(182)  评论(0)    收藏  举报