18-2-23~3-1一周算法总结(字典树)

23

字典树

大致理论就是“利用字符串的公共前缀来节约存储空间”。

用的是指针,数组字典树先放着QAQ

struct Trie{//结构体,每个位置的单元
	Trie *nxt[26];//26是因为最大26个字母
	int v;//这里只计算出现次数,实际上结构体内可以存很多信息,但需要对下面的creat和find修改
};
Trie * root;
void creatTrie(char *s){
	int len=strlen(s);
//	cout<<1<如果这个字母已经存在了,那么这个字母的出现次数++,指针指向下一个
                        p=p->nxt[data];
			p->v++;
		}
	}
}

int findTrie(char *s){//查找//
	int len=strlen(s);
	Trie *q=root;
	for(int i=0;inxt[data]!=NULL){//如果能找到,就继续往下//
			q=q->nxt[data];
		}else{//没找到直接跳出循环并返回0//
			return 0;
		}
	}
	return q->v;//返回这段字符的出现次数//
}
void freeTrie(Trie *q){//释放所有空间//
	if(q==NULL) return ;
	for(int i=0;i<26;i++){
		freeTrie(q->nxt[i]);
	}
	free(q);
}
void init(){//初始化//
	freeTrie(root);
	mal(root,Trie);
	for(int i=0;i<26;i++){
		root->nxt[i]=NULL;
	}
}

yayaya

后面课没上然后忘记发了

你可能感兴趣的:(总结和反思)