BM演算法 實數模板

2022-05-01 23:39:15 字數 1011 閱讀 8236

bm遞推杜教版是在整數取模的情況下的,

這個可以求解實數係數,但是可能有精度誤差。

若乙個問題的結論是通過推線性遞推式來解,考慮到實際的情況,可以用bm演算法的模板,先輸入項數再依次輸入項,項越多越準確(按道理,前k項的遞推,只需要2*k 個初始項就能確定)

#include using

namespace

std;

#define rep(i,a,b) for(int i=int(a);i#define mem(a,p) memset(a,p,sizeof(a))

#define maxn 1005

structbm;

vector

ps[maxn];

intpn{},fail[maxn]{};

double

delta[maxn]{};

void solve(const

double *x,int

n)

vector

&ls=ps[pn-1

];

double k=-dt/delta[fail[pn-1

]]; vector

cur;

cur.resize(i-fail[pn-1]-1

); cur.push_back(-k);

rep(j,

0,ls.size())cur.push_back(ls[j]*k);

if(cur.size()rep(j,

0,ps[pn].size())cur[j]+=ps[pn][j];

ps[++pn]=cur;}}

void

print()

cout

<}

}b;double

x[maxn];

intmain()

b.solve(x,n);

b.print();

}}

code from:

演算法 BM演算法

如果要判定長度為n nn兩個字串相等,比較中要進行n nn比較,但是如果要判定兩個字串不相等,只需要找出乙個不相等的位置,因此可以得到如下結論 結論1 判定字串相等和判定字串不相等的代價不同,判定不相等的代價更小 在kmp演算法中,每發生一次失配時,演算法總是嘗試根據已經獲得的匹配成功的資訊來確定乙...

杜教BM模板

據說這個bug級模板可以求線性遞推式的第n項,只要手推遞推式的前幾項,放入模板就能求出第n項,前幾項求出的的越多越好,一般推出前8項就可以,但是有的題還是要多幾項。這個模板也就拿來水一下線上賽,結合oeis食用效果更佳。注意替換 中的mod。例 4ms include using namespace...

BM演算法詳解

bm演算法 字尾匹配,是指模式串的比較從右到左,模式串的移動也是從左到右的匹配過程,經典的bm演算法其實是對字尾蠻力匹配演算法的改進。為了實現更快移動模式串,bm演算法定義了兩個規則,好字尾規則和壞字元規則,如下圖可以清晰的看出他們的含義。利用好字尾和壞字元可以大大加快模式串的移動距離,不是簡單的 ...