算法
_ELMA_
CSDN SUCK
展开
-
KMP算法 k=next[k]如何保证最长匹配前后缀的个人理解
推荐一下这位博主的文章https://blog.csdn.net/BaiDingLT/article/details/69808221我是看到 BaiDingLT 这位博主的文章才懂的,下文还要借用这位博主的图。接下来我就 为什么k=next[k]能保证匹配前后缀的长度是最长的 提供一些个人理解。首先假如当前要计算next[j],则next[i](i<j)表示在角标i之前已经匹配的最长前缀后缀的长度。next[i]是已经算好的若p[k] != p[j]则在上图中右边的绿色子串要缩短,也就是原创 2021-04-11 11:01:58 · 239 阅读 · 0 评论 -
竞赛图找哈密尔顿回路
#include <stdio.h>#include <string.h> const int MAXN = 1005;int mp[MAXN][MAXN],ans[MAXN]; void Hamilton(int ans[MAXN], int mp[MAXN][MAXN], int n, int st) { int nxt[MAXN]; memset(nxt, -1, sizeof(nxt)); int head = st; for(in原创 2021-03-02 22:52:11 · 255 阅读 · 0 评论 -
快速幂
求 ab,b转为二进制,如11(D)=1011(B),则a11=a8*a2*apublic static int pow(int a, int b){ //求 a^b int res = 1; // res保存结果 while(b != 0){ if((b & 1) == 1){ //如果k的二进制数的最后一位是 1。 比如1011 & 1 = 1 res = (res * a) % mod;//取模, 防止结果溢出。数值比较大时一般会溢出,题目通常求后几位数,所以可以取模。原创 2021-02-12 18:46:13 · 95 阅读 · 0 评论 -
对于Bellman-Ford算法中,对离源点距离数组dis[N]设置备份数组bac[N]的理解
首先放代码 public static void bellman_ford(){ Arrays.fill(dist, INF); dist[1] = 0; for (int i = 0; i < k; i++) { back = Arrays.copyOf(dist,n+1); for (int j = 0; j < m; j++) { Edge edge = list[j]; int a = edge.a;原创 2020-09-20 16:17:09 · 416 阅读 · 0 评论