Trie树

Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie的简单实现(插入、查询)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

Trie的简单实现(插入、查询)

  

#include <stdio.h>
#include <string>
using namespace std;

const int branchNum = 26;

struct Trie_node
{
	bool isStr;
	Trie_node *next[branchNum];
	Trie_node()
	{
		isStr = false;
		memset(next, NULL, sizeof(next));
	}
};

class Trie
{
public:
	Trie();
	~Trie();
	void insert(const char* word);
	bool search(char* word);
	void deleteTrie(Trie_node* root);

	Trie_node* root;
};

Trie::Trie()
{
	root = new Trie_node();
}
Trie::~Trie()
{
	deleteTrie(root);
}
void Trie::insert(const char* word)
{
	Trie_node *location = root;

	while (*word)
	{
		if (location->next[*word - 'a'] == NULL)
		{
			location->next[*word - 'a'] = new Trie_node();
		}
		
		location = location->next[*word-'a'];
		word ++;
	}

	location->isStr = true;
}

void Trie::deleteTrie( Trie_node* root )
{
	if (root == NULL)
	{
		return;
	}

	for (int i = 0; i < branchNum; i ++)
	{
		deleteTrie(root->next[i]);
	}
	
	delete root;
}

bool Trie::search( char* word )
{
	Trie_node *locaton = root;

	while (*word && locaton)
	{
		locaton = locaton->next[*word - 'a'];
		word ++;
	}
	
	return(locaton != NULL && locaton->isStr);
}


int main()
{
	Trie trie;
	trie.insert("helloworld!");
	trie.insert("he!");
	trie.insert("helloworlda!");

	if (trie.search("helloworld!"))
	{
		printf("true\n");
	}
	return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120235.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2021年度最受推荐的10本Python书籍

    2021年度最受推荐的10本Python书籍Python是一种通用的解释型编程,主要用于Web开发、机器学习和复杂数据分析。Python对初学者来说是一种完美的语言,因为它易于学习和理解,随着这种语言的普及,Python程序员的机会也越来越大。更多Python视频、源码、资料加群683380553免费获取如果你想学习Python编程,市场上就有很多的书籍。近日,hackr社区推荐了10本最佳的Python书籍。是2018年最受编…

    2022年6月14日
    45
  • 负采样方式

    负采样方式一、随机负采样二、曝光未点击三、混合负采样四、重要性采样五、有偏采样六、NCE采样参考:[mixednegativesampling]MixedNegativeSamplingforLearningTwo-towerNeuralNetworksinRecommendations(2020) [Youtube]Sampling-Bias-CorrectedNeuralModelingforLargeCorpusItemRecomme

    2022年6月29日
    23
  • Error filterStart错误问题的解决「建议收藏」

    Error filterStart错误问题的解决「建议收藏」现象:我在tomcat5.5下发布工程portal后,出现如下错误。log4j:WARNNoappenderscouldbefoundforlogger(org.apache.commons.digester.Digester.sax).log4j:WARNPleaseinitializethelog4jsystemproperly.log4j:WARNNoappe

    2022年7月11日
    17
  • JAVA使用Tess4J进行ocr识别,并切换中文

    JAVA使用Tess4J进行ocr识别,并切换中文JAVA使用Tess4J进行ocr识别,并切换中文

    2022年6月3日
    91
  • Android Services Library_android freeware

    Android Services Library_android freeware对网络相关Api进行整理需要权限@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)获取网络当前网络manager.getActiveNetwork()动态网络回调manager.registerNetworkCallback网络的不同侧面新的Api中网络的不同关注面被放到的不同的对象中…

    2022年9月28日
    0
  • matlab中doc怎么用_ipaddock栏设置

    matlab中doc怎么用_ipaddock栏设置dock栏是是苹果IOS系统或者MAC系统自带任务栏以及切换的快捷窗口,一般活动桌面为最下方固定的界面就是dock栏;MAC系统中的Dock栏,可以显示、切换下运行的程序,也可以单击上面的程序图标则启动那个程序。本文操作环境:iOS12.3.1系统,iPhone11。Dock栏就是苹果IOS系统或者MAC系统自带任务栏以及切换的快捷窗口,一般活动桌面为最下方固定的界面就是dock栏。MAC系统…

    2022年9月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号