• 重温 匈牙利算法 树状数组


    再次回忆匈牙利算法和树状数组,除了算法的大概思路,其他已经不记得什么了。

    匈牙利算法:

    这个找二分图最大匹配的算法,就是不断的在当前匹配M上找这个匹配对应的一条增广路径P,根据M,P获得一个更大的匹配M',不断迭代直到找不到增广路径。

    树状数组:

    最简单的应用就是在log的时间级别更新、查询一个序列的区间和,通过维护数组数组可以在log时间内获得数组的前N项和,思路跟拆整数类似,一个整数可以拆成若干个二次幂的和,那么N项序列也可以拆成不超过logN个的2次幂个数的序列之和,

    C[i]用来记录A[i-2^r+1]...A[i]这些项,一共有2^r个项,r表示的是i写成二进制后末尾0的个数,

    有两个重要的操作,一个是查询前N项和,一个是更新第i项内容,查询前N项和,则是每次更新当前索引,将当前索引idx指向idx-2^r。而查询则是更新C数组,每次将当前索引idx移向它的父亲idx+2^r,通过反证法可以证明该索引是idx的父亲,注意上述两个r不是同一个r。

  • 相关阅读:
    Python代码项目目录规范v1.0
    博客自定义
    Linux之查看CPU信息
    Python字符界面函数库
    数组的遍历你都会用了,那Promise版本的呢
    NPM实用指北
    如何从0开发一个Atom组件
    使用JavaScript实现一个俄罗斯方块
    使用PostMan进行API自动化测试
    一个有味道的函数
  • 原文地址:https://www.cnblogs.com/litstrong/p/3250269.html
Copyright © 2020-2023  润新知