dfa 最小化的一个丐版实现

dfa 最小化的一个丐版实现

https://shanlunjiajian.github.io/2023/05/21/dfa-tech/

好像是叫 moore 算法,一个 vector 代表一个等价类,col 是所属等价类,这个是初始的时候 accept 状态放在一个等价类里,reject 状态放在一个等价类里,其余状态放在一个等价类里。对每种出边检查同一等价类的此类出边是否指向了不同等价类,根据指向的等价类的不同进行分裂。

	while(1){
		int lac=cct;
		for(int o=0;o<m;o++){
			for(int i=1;i<=lac;i++)if(vec[i].size()>1){
				int tmp=cct;
				for(auto j:vec[i]){
					int go=col[tr[j][o]];
					if(!vis[go])
						vis[go]=++cct;
					vec[vis[go]].pb(j);
				}
				for(auto j:vec[i])vis[col[tr[j][o]]]=0;
				vi().swap(vec[i]);
				swap(vec[i],vec[cct]);--cct;
				for(auto j:vec[i])col[j]=i;
				for(int t=tmp+1;t<=cct;t++)
					for(auto j:vec[t])
						col[j]=t;
			}
		}
		if(cct==lac)break;
	}
posted @   do_while_true  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
历史上的今天:
2022-10-09 「题解」Codeforces 1572B Xor of 3

This blog has running: 1845 days 1 hours 33 minutes 16 seconds

点击右上角即可分享
微信分享提示