zoukankan      html  css  js  c++  java
  • 重温 匈牙利算法 树状数组

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

    匈牙利算法:

    这个找二分图最大匹配的算法,就是不断的在当前匹配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。

  • 相关阅读:
    C++数字与字符串相互转化
    NextDate问题
    Mac使用host屏蔽某指定网站
    Pycharm里面使用anaconda配置环境
    Logisim
    XML有关知识
    Mac环境下的Tomcat
    Allow apps downloaded from Anywhere
    寻找两数之和
    最大子序列
  • 原文地址:https://www.cnblogs.com/litstrong/p/3250269.html
Copyright © 2011-2022 走看看