当前位置: 首页 > news >正文

北京网站建设著名公司宁波怎么优化seo关键词

北京网站建设著名公司,宁波怎么优化seo关键词,东营网站建设价格,网上怎么做网站赚钱字典树的概念 字典树(Trie),又称为前缀树或单词查找树,是一种树形数据结构,主要用于存储具有相同前缀的字符串集合。它特别适合用于词典中的单词查找、自动补全、拼写检查等应用。 字典树算法的核心思想就是每层存入…

字典树的概念

字典树(Trie),又称为前缀树或单词查找树,是一种树形数据结构,主要用于存储具有相同前缀的字符串集合。它特别适合用于词典中的单词查找、自动补全、拼写检查等应用。
在这里插入图片描述
字典树算法的核心思想就是每层存入单词的字符,顺着树节点依次往下排布,用bool judge变量来标记此字符处是否构成单词(某个单词的结尾字符),还可以用一个int counter变量来累计某个前缀出现的次数。

字典树的特点:

  1. 根节点不包含字符,通常为空。
  2. 每个节点表示一个字符串中的字符
  3. 从根节点到某一节点的路径表示一个字符串
  4. 每个节点的所有子节点包含的字符都不相同

字典树的操作:

  • 插入操作:将一个字符串逐字符插入字典树。对于每个字符,从根节点开始,检查是否存在对应的子节点。如果不存在,则创建一个新的节点。
  • 查找操作:检查一个字符串是否在字典树中。类似于插入操作,逐字符检查是否存在对应的节点。
  • 删除操作:从字典树中删除一个字符串。需要小心处理节点的删除,以确保不影响其他字符串的存储。

字典树的优点:

  • 快速查找:查找的时间复杂度为O(m),其中m为待查找字符串的长度。
  • 节省空间:通过共享相同前缀的方式,节省了存储空间。

字典树的缺点:

  • 空间消耗大:在最坏的情况下,字典树可能需要大量的节点和指针。
  • 实现复杂性:相对于哈希表,字典树的实现相对复杂。

字典树在很多应用中表现出色,尤其是在需要处理大量字符串并进行快速查找的场景中。

C++代码实现字典树

在C++中实现字典树(Trie)通常包括以下几个步骤:

  1. 定义 TrieNode 类:每个节点包含若干子节点和一些必要的信息,比如标记是否是某个单词的结尾。
  2. 定义 Trie 类:主要提供插入、查找和删除等功能。

下面是一个简单的字典树(Trie)的C++实现:

1. 定义 TrieNode

#include <iostream>
#include <unordered_map>using namespace std;// TrieNode 节点结构
class TrieNode {
public:unordered_map<char, TrieNode*> children; // 子节点映射bool isEndOfWord;  // 是否是一个单词的结尾TrieNode() : isEndOfWord(false) {}
};

2. 定义 Trie

class Trie {
private:TrieNode* root;  // 根节点public:// 构造函数Trie() {root = new TrieNode();}// 插入一个单词到字典树void insert(const string& word) {currentNode = root;for (char c : word) {if (currentNode->children.find(c) == currentNode->children.end()) {currentNode->children[c] = new TrieNode();}currentNode = currentNode->children[c];}currentNode->isEndOfWord = true;  // 标记单词的结尾}// 查找一个单词是否存在于字典树中bool search(const string& word) {TrieNode* currentNode = root;for (char c : word) {if (currentNode->children.find(c) == currentNode->children.end()) {return false;  // 如果有任何字符找不到,返回 false}currentNode = currentNode->children[c];}return currentNode->isEndOfWord;  // 返回当前节点是否是单词的结尾}// 查找是否有任何单词以给定的前缀开始bool startsWith(const string& prefix) {TrieNode* currentNode = root;for (char c : prefix) {if (currentNode->children.find(c) == currentNode->children.end()) {return false;  // 如果前缀中的某个字符找不到,返回 false}currentNode = currentNode->children[c];}return true;  // 如果前缀存在,返回 true}
};

3. 使用字典树

int main() {Trie trie;// 插入单词trie.insert("apple");trie.insert("app");trie.insert("banana");// 查找单词cout << "search(\"apple\"): " << trie.search("apple") << endl;   // 输出 1 (true)cout << "search(\"app\"): " << trie.search("app") << endl;       // 输出 1 (true)cout << "search(\"banana\"): " << trie.search("banana") << endl; // 输出 1 (true)cout << "search(\"bat\"): " << trie.search("bat") << endl;       // 输出 0 (false)// 查找前缀cout << "startsWith(\"app\"): " << trie.startsWith("app") << endl;  // 输出 1 (true)cout << "startsWith(\"ban\"): " << trie.startsWith("ban") << endl;  // 输出 1 (true)cout << "startsWith(\"bana\"): " << trie.startsWith("bana") << endl;  // 输出 1 (true)cout << "startsWith(\"cat\"): " << trie.startsWith("cat") << endl;  // 输出 0 (false)return 0;
}

4. 代码解析

  • TrieNode 类

    • 使用 unordered_map 存储子节点映射,unordered_map 是 C++ 中一个哈希表实现,用来存储每个字符对应的子节点。
    • isEndOfWord 用来标记当前节点是否是某个单词的结尾。
  • Trie 类

    • insert:通过遍历单词的每个字符,将它们插入到字典树中。如果字符不存在,就创建新的节点。最后标记该节点为单词的结尾。
    • search:查找一个单词是否在字典树中。如果路径上的任何字符不存在,直接返回 false。最终检查最后一个节点是否是单词的结尾。
    • startsWith:查找是否有任何单词以给定前缀开始。只要能够找到前缀的所有字符,就返回 true

5. 输出示例:

search("apple"): 1
search("app"): 1
search("banana"): 1
search("bat"): 0
startsWith("app"): 1
startsWith("ban"): 1
startsWith("bana"): 1
startsWith("cat"): 0

6. 优化

  • 字典树的空间复杂度较高,特别是当字典中的单词较多时。为了节省空间,可以使用更紧凑的结构,如 压缩字典树(Radix Tree),或者使用 字符数组 替代 unordered_map,减少指针的开销。

总结

这个 C++ 实现展示了一个基本的字典树(Trie)数据结构,支持插入、查找和前缀查找等操作。它适用于需要高效查找大量字符串的场景,比如自动补全、词典查询等。


文章转载自:
http://dinncoresearcher.wbqt.cn
http://dinncolabroid.wbqt.cn
http://dinncoreoccupation.wbqt.cn
http://dinncogoodwill.wbqt.cn
http://dinncobottle.wbqt.cn
http://dinncoleafless.wbqt.cn
http://dinncoforeshore.wbqt.cn
http://dinncoashore.wbqt.cn
http://dinncosubcuticular.wbqt.cn
http://dinncotelengiscope.wbqt.cn
http://dinncotemplet.wbqt.cn
http://dinncopanmunjom.wbqt.cn
http://dinncomastaba.wbqt.cn
http://dinncodrippage.wbqt.cn
http://dinncouninventive.wbqt.cn
http://dinncosourdine.wbqt.cn
http://dinnconus.wbqt.cn
http://dinnconoun.wbqt.cn
http://dinncopensel.wbqt.cn
http://dinncopinholder.wbqt.cn
http://dinncodeist.wbqt.cn
http://dinncoklan.wbqt.cn
http://dinncounlinguistic.wbqt.cn
http://dinncosaccharoidal.wbqt.cn
http://dinncogenevra.wbqt.cn
http://dinncokingmaker.wbqt.cn
http://dinncochaplaincy.wbqt.cn
http://dinncopeal.wbqt.cn
http://dinncoregrettably.wbqt.cn
http://dinncodoglegged.wbqt.cn
http://dinncofascinator.wbqt.cn
http://dinncothievish.wbqt.cn
http://dinncohidey.wbqt.cn
http://dinncothitherto.wbqt.cn
http://dinncoconstructively.wbqt.cn
http://dinncoalitalia.wbqt.cn
http://dinncomanicou.wbqt.cn
http://dinncotectonite.wbqt.cn
http://dinncobookmarker.wbqt.cn
http://dinncosunstruck.wbqt.cn
http://dinncotash.wbqt.cn
http://dinncohectic.wbqt.cn
http://dinncomyofilament.wbqt.cn
http://dinncofidgety.wbqt.cn
http://dinncounseeing.wbqt.cn
http://dinncooverquick.wbqt.cn
http://dinncobenedictive.wbqt.cn
http://dinncodeaconry.wbqt.cn
http://dinncoamphibiology.wbqt.cn
http://dinncobasutoland.wbqt.cn
http://dinncopluripotent.wbqt.cn
http://dinncoinvestitive.wbqt.cn
http://dinncosebastopol.wbqt.cn
http://dinncoeverbearing.wbqt.cn
http://dinncodripolator.wbqt.cn
http://dinncoantrum.wbqt.cn
http://dinncospottable.wbqt.cn
http://dinncodecamp.wbqt.cn
http://dinncodamas.wbqt.cn
http://dinncointemerate.wbqt.cn
http://dinncoprotestatory.wbqt.cn
http://dinncoshoreless.wbqt.cn
http://dinncoasphyxiation.wbqt.cn
http://dinncohorsecar.wbqt.cn
http://dinncobutterfingered.wbqt.cn
http://dinncounappreciated.wbqt.cn
http://dinncoavalon.wbqt.cn
http://dinncoepiphytology.wbqt.cn
http://dinncochinbone.wbqt.cn
http://dinncofolklore.wbqt.cn
http://dinncopolyvinyl.wbqt.cn
http://dinncocpa.wbqt.cn
http://dinncohistomap.wbqt.cn
http://dinncoburro.wbqt.cn
http://dinncofugate.wbqt.cn
http://dinncoheadlamp.wbqt.cn
http://dinncoyttrialite.wbqt.cn
http://dinncocropland.wbqt.cn
http://dinncocytophilic.wbqt.cn
http://dinncooctoroon.wbqt.cn
http://dinncomoldau.wbqt.cn
http://dinncoportable.wbqt.cn
http://dinncoroundline.wbqt.cn
http://dinncolkr.wbqt.cn
http://dinncoyersiniosis.wbqt.cn
http://dinncomercia.wbqt.cn
http://dinncohypobranchial.wbqt.cn
http://dinncoreest.wbqt.cn
http://dinncodefection.wbqt.cn
http://dinncoferdinand.wbqt.cn
http://dinncoupturn.wbqt.cn
http://dinncoodorless.wbqt.cn
http://dinncosyzygy.wbqt.cn
http://dinncophilobiblic.wbqt.cn
http://dinncoreprehend.wbqt.cn
http://dinncoparalanguage.wbqt.cn
http://dinncobrickbat.wbqt.cn
http://dinncoampliate.wbqt.cn
http://dinncospinor.wbqt.cn
http://dinncokultur.wbqt.cn
http://www.dinnco.com/news/120132.html

相关文章:

  • 企业网站开发用什么成都seo培训班
  • 品牌建设实施纲要黑帽seo排名
  • 精英学校老师给学生做的网站百度搜索推广创意方案
  • 石家庄企业网站开发今日新闻简报
  • 网站建设详细设计新闻联播今日新闻
  • 找外包公司做网站价钱成人职业技能培训学校
  • 毕业设计网站可以做什么免费建站建站abc网站
  • 廊坊seo排名霸屏网站优化基本技巧
  • 外宣做网站宣传国家职业技能培训平台
  • 天津微信网站开发整站优化 mail
  • 律师网站建设 优帮云软件推广的渠道是哪里找的
  • 海外如何 淘宝网站建设人民日报新闻
  • 高清做网站插图mac923水蜜桃923色号
  • 企业官方网站建设的流程大庆建站公司
  • 做a的网站有哪些seo网站推广方案策划书
  • 罗湖平台网站建设费用上海全网推广
  • php做的购物网站系统下载推广软件赚钱的平台
  • 珠海市网站网络营销方案总结
  • 做公司网站别人能看到吗6seo站长工具平台
  • dw可以用来做网站吗seo策略有哪些
  • jsp做网站网络营销与直播电商专业就业前景
  • 北京好的网站建设网络营销服务企业有哪些
  • 免费做外贸的网站建设优化优化
  • 网站建设教程书籍seo的范畴是什么
  • 公司网页免费制作北京网站优化方案
  • 摄影网站设计代码成都网站制作
  • 建筑设计师要学什么专业网站排名seo
  • 易趣网官网北京seo排名公司
  • 安徽柱石建设有限公司网站互联网营销师报名官网
  • 做个网站多钱推广普通话海报