三叉树-字典树修正

突然想到之前写的sts(前天搜了一下
摘要由CSDN通过智能技术生成

突然想到之前写的三叉树,每次加入一个新子段就会浪费一个本不用着的内存。改了一下。

三叉树上AC自动机写了三天了,还是没有写出来。

普及一下,三叉树很早就有人研究了,主要用途还是用来处理字符串,对于trie树来说,处理含有全部ascill码的字符串就有压力了,更不用说处理中文串了。不过了解的人并不是很多。

粘一下我写的修正后的代码。

#include <cstdio>
#include <cstring>
#include <queue>

typedef int Nodelink;
const int maxn = 1000101;//内存池大小
Nodelink Node[maxn][3];   //三叉树的节点,预开内存的速度是动态开不可比拟的(TLE了一晚的教训)。
int cnt[maxn];   //以该节点为结束的字符串的数目。
char elem[maxn];   //节点保存的字符。
int top;   //模拟内存池地址
Nodelink newNode(char ch)
{
	top ++;
	Node[top][0] = Node[top][1] = Node[top][2] = 0;
	cnt[top] = 0;
	elem[top] = ch;
	return top;
}

void insert(char str[])
{
	int len = strlen(str);
	Nodelink p = 1;
	for(int i = 0; i < len; i++)
	{
		if(!Node[p][2])
			Node[p][2] = newNode(str[i]);
		p = Node[p][2];
		while(elem[p] != str[i])
		{
			if(str[i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值