数据结构笔记(8)算法设计思想

贪婪算法
  • 调度问题(略)
  • 哈夫曼编码问题(Huffman)

    1. 前缀码,歧义(待补)
    2. 算法:
      • 假设字符的个数为C
      • 一颗树的权等于其树叶的频率的和,任意选取最小权的两棵树T1和T2,并任意形成以T1和T2为子树的新树,将这样的过程进行C-1次
      • 在算法的开始,我们拥有C颗树,每个字符以它自身作为一颗树,在算法的结束我们得到一棵树
分治算法(Divide & Conquer)
  • 分(divide):递归解决较小的问题
  • 治(conquer):从子问题的解构建原问题的解
  • 分治算法的主定理
    • n 表示问题规模
    • a 表示一次递归将问题划分为多少个子问题
    • b 表示子问题的规模
    • f(n)表示非递归步骤的开销
    • 得到公式:T(n)=aT(n/b)+f(n) (a>=1;b>1)
caseT(n)cf(n)
Case 1T(n)=O(nlogb^a)c< log b^a (a>b^c)f(n)=O(n^c)
Case 2T(n)=O(n^c log^k+1 n)c= log b^a (a=b^c)f(n)=O(n^c log^kn)
Case 3T(n)=O(f(n))c> log b^a (a< b^c)f(n)=Ω(n^c)
快速选择问题
  1. 概述:找出含N个元素的表S中的第k个最小的元素。
  2. 算法思想:
    • 选取一个合适的元素作为枢纽元v
    • 剩下的元素中,比v小的放在集合S1中,比v大的放在集合S2中,则整个表为S1-v-S2
    • 如果k< S1,则递归的计算S1中第k小的元素得到目标解;
      如果k=S1+1,则枢纽元v为目标解;
      如果k> S1,则递归的计算S2中第(k-S1-1)个元素得到目标解。
  3. 如何选择合适的枢纽元?(待补)
动态规划算法(Dynamic Programming)
  • 动态规划的过程是一种回溯的思想。
硬币选择问题:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值