关于缓存与常数的关系的思考

今天写了一下AC自动机的板子,然后TLE了一个点,就很迷
和之前写过的比较了一下发现一个定义的数组是

//AC
int trie[N][26]

一个是

//TLE
int trie[26][N]

因为AC自动机访问的时候是这个样子的

for(int i=0;i<26;i++) 
	if(tr[u][i]) 
		q.push(tr[u][i]),fail[tr[u][i]]=tr[fail[u]][i];

这样的话把第一维放大的合适一点。
像ST表第一维放小的要合适一点。

int query(int l,int r){
    int k=log2(r-l+1);
    return max(Max[k][l],Max[k][r-(1<<k)+1]);
}
for(int j=1;j<=21;j++){
    for(int i=1;i+(1<<j)-1<=n;i++){
        Max[j][i]=max(Max[j-1][i],Max[j-1][i+((1<<j-1))]);
    }
}

好吧我以后一定认真考虑缓存导致的常数问题。。。

posted @ 2018-11-05 21:49  SWHsz  阅读(219)  评论(0编辑  收藏  举报