zoukankan      html  css  js  c++  java
  • 贪心算法

    有n个任务,每个任务ai有一个开始时间si和结束时间fi,在一个时间段内,最多能够进行进行的活动次数。

    使用贪心算法,最早结束的活动结束后剩余的时间,才能被尽可能多的活动使用。所以贪心算法只需要不断需找最早结束的活动。

    RecurisiveActivitySelector(s,f,k,n)
    {
        m=k+1
        while(m<=n && s[m]<f[k])
            m++;
        if(m<=n)
            return {a[m]}UArcurisiveActivitySelector(s,f,m,n)
        else
            return null;
    }

    贪心算法原理

    1. 每一次选择,不依赖后边的选择。
    2. 具有最优子结构。

    赫夫曼编码

    对于字符序列,假设其中出现6个字符

    • 定长编码:使用3个二进制位区分这些字符,每个字符用定长的三个二进制位表示。
    • 变长编码:高频字符用短码,低频字符用长码。

    这两种编码对应的查找方法,对应于两种编码树

    文件的最优编码总是对应一个满二叉树。对于一个编码树T,根据字符出现的次数,可以计算出编码树的代价。

    B(T) = P(c1)*L(c1)+P(c2)*L(c2)+...+P(cn)*L(cn),其中P(cn)和L(cn)表示字符cn出现的频率和编码长度。

    赫夫曼编码

    赫夫曼编码就是一种构造最优编码树的方法。使用的是贪心算法。

    Huffman(C)
    {
        n=C.Count;
        MinQueen Q=new MinQueen(C);
        for(i=1..n-1)
            node z;
            z.left=x=Q.ExtractMin()//去除队列最小频率节点,返回
            z.right=y=Q.ExtractMin()//去除队列最小频率节点,返回
            z.freq=x.freq+y.freq;
            Q.insert(z);
        return Q.ExtractMin();
    }
  • 相关阅读:
    nginx设置缓存策略
    http缓存原理理解
    promise教程
    vue项目发布到github演示
    vue路由嵌套子路由不渲染
    hihocoder 1403 1407 1415 后缀数组*3 最长公共子串/最长不重叠重复出现的子串/最长k次重复子串
    hdu 4691 后缀数组+rmq 求子串lcp
    hdu1506+ luogu 1440 单调栈/单调队列裸题
    codeforces 873F 后缀数组+单调栈(fastio)
    HihoCoder
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5231045.html
Copyright © 2011-2022 走看看