哈希
哈希函数特性 确定性 不可逆性 压缩性 分散性
一个只对应一个哈希值
理论上只能根据哈希函数推出数据的哈希值而不能由哈希值推出原有数据
可以将庞大数据用一个标记表示
分散性即敏感性,原有数据一旦发生些微变化,所得到的哈希表就会完全改变
并查集
常用于求连通子图,求最小生成树的Kruskal算法,求最近公共祖先
1.初始化init
2.查询find
3.合并union
最小生成树
选择权值和最小的边集
Kruskal算法
将所有边按照权值顺序排列,直接选择从权值最小的边开始,依次形成无环路的权值最小边集。
Prim算法
从顶点出发,间接选择与顶点相连权值最小的边
从文本
动态规划之背包
背包问题
定义数组之时,一定要首先初始化数组,不然大概率得出错误结果
01背包
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - volume[i]] + value[i]);
二维数组中,一行数据的产生计算是根据上一行旧数据的结果而来的,因此内层循环采用逆序
完全背包
dp[i][j] = max(dp[i - 1][j], dp[i][j - volume[i]] + value[i]);
二维数组中,一行数据的产生是根据本行的新数据计算的,因此内层循环采用顺序
终极体:
dp[j] = max(dp[j], dp[j - volume[i]] + value[i]);
多重背包
dp[i][j] = max(dp[i - 1][j], dp[i][j - k*volume[i]] + k*value[i]);
二维费用背包
dp[i][j] = max(dp[i - 1][j][k], dp[i][j - volume[i]][k-weight[i]] + value[i]);
终极体
dp[j] = max(dp[j][k], dp[j - volume[i]][k-weight[i]] + value[i]);