有多大的思想,才有多大的能量。學習內容:aho-corasick automaton(ac自動機)
(原來不是自動ac機…)
演算法用途:多模板串的模式匹配問題。
演算法步驟:
用模板串構造trie樹(字典樹 or 字首樹);
用bfs在trie樹中構建失配指標fail;
模式匹配(文字串和模板串進行匹配)
hdu2222 keywords search(本題即為模版…)
題乙個裸題(入門練手用
)(但要注意細節,不然要像我一樣調兩三節課,555)
#include#include#include#include#include#define n 500010如汝佳所言using namespace std;
int trie[n][27],f[n],last[n],val[n],n,cnt,ans;
char t[2*n],p[55];
void make(int x) //求答案,與劉汝佳的print()相似
void add_trie(char *p) //模板串加入trie樹
val[x]++; //有重複模板串
}void getfail() //bfs求fail(and last)
}}void aho_corasick_automaton(char *t) //匹配
}int main()
return 0;
}/* 對於多組資料 :
trie,val 必須memset
f,last 不必memset,
因為(在bfs求fail值時)每個點的f和last值**於之前的點
所以只需在往佇列裡加初值時,把對應的點的f和last賦值為0就行了 */
(《訓練指南》p216)
:「把所有不存在的邊補上,即把計算失配函式中的語句 if(!u)continue; 改為 if(!u);這樣while()便可直接刪去。」
(個人認為原理同求last是一致的,與bfs的先進先出的特點有關)
改後的**如下:
void getfail(); //**
q.push(u);v=f[rt];
f[u]=trie[v][i];
last[u]=val[f[u]]?f[u]:last[f[u]];}}
}void aho_corasick_automaton(char *t)
}
linux命令小集結一
ps ef grep sshd 檢視ssh服務是否啟動 pid kill 9 pid 絕殺 service sshd start 啟動ssh服務 service sshd restart 重啟ssh服務 service sshd stop 停止ssh服務 ifconfig 檢視網絡卡ip 啟用狀態下...
爬蟲之旅(一)
usr bin python encoding utf 8 author administrator import selenium import sys import urllib import requests import re if name main import os from sele...
高階之旅 一
前言 工具 androidstudio 夜神android模擬器 先介紹rect與rectf,下面會用到 相同點都是用於表示座標系中的一塊矩形區域,並可以對其做一些簡單操作。這塊矩形區域,需要用左上和右下兩個座標點表示。區別就是精度不一樣。rect是使用int型別作為數值,rectf是使用float...