- 浏览: 512652 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
1,前缀:就是能够代表这个单词的前n个字符,n最小.
如:abc acc 前缀: ab ac
语法的悲剧,让我整整浪费了一个上午,郁闷了一个下午.
问题终于还是找到了.
基于string的实现:
基于const char*的实现:
如:abc acc 前缀: ab ac
语法的悲剧,让我整整浪费了一个上午,郁闷了一个下午.
问题终于还是找到了.
基于string的实现:
#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std ; class trie { private : int sum; trie* next[26]; public : trie():sum(0) { for(int i=0;i<26;i++) next[i]=NULL; } ~trie () { int i ; for ( i = 0 ; i < 26 ; i++ ) { delete next[i] ; } } void insert(string& str) { trie* tmp=this; for(int i=0;i<str.size();i++) { str[i]|=0x20; if(tmp->next[str[i]-'a']==NULL) tmp->next[str[i]-'a']=new trie; else tmp->next[str[i]-'a']->sum++; tmp=tmp->next[str[i]-'a']; } } int quary ( string& str ) { trie* tmp=this; int n=0; for(int i=0;i<str.size();i++) { str[i]|=0x20; tmp=tmp->next[str[i]-'a']; n++; if(tmp==NULL) return n; if(tmp->sum==0) break; } return n; } }; int main () { ifstream in("main.txt"); string word; vector<string> vecstr; trie tree; while(getline(in,word)) { vecstr.push_back(word); tree.insert(word); } int cnt; string pre; vector<string> vecpre; for(int i=0;i<vecstr.size();i++) { cnt=tree.quary(vecstr[i]); pre=vecstr[i].substr(0,cnt); vecpre.push_back(pre); } for(int i=0;i<vecstr.size();i++) cout<<vecstr[i]<<" "<<vecpre[i]<<endl; return 0 ; }
基于const char*的实现:
#include <iostream> #include <cstring> #include <fstream> #include <vector> #include <cassert> #include <algorithm> using namespace std ; class trie { public: trie() : sum(0) { int i; for (i = 0; i < 26; i++) child[i] = NULL; } ~trie() { int i; for (i = 0; i < 26; i++) delete child[i]; } void insert(const char* key) { if (*key == '\0') return; assert((*key >= 'a' ) && (*key <= 'z')); int index = *key - 'a'; if (child[index] == NULL) child[index] = new trie; else child[index] -> sum++; child[index] -> insert(key + 1); } int query(const char* key) { if (*key == '\0') return 0; assert((*key >= 'a' ) && (*key <= 'z')); int index = *key - 'a'; if (child[index] == NULL) return 0; if ((child[index] -> sum) == 0) return 1; return 1 + child[index] -> query(key + 1); } private: int sum; trie* child[26]; }; int main () { ifstream in("1.1.in"); string word; vector<string> vecstr; trie t; while(getline(in, word)) { //注意全部转化为小写 for (int i = 0; i < (int)word.size(); i++) word[i] |= 0x20; //重复的只插入一次 if (find(vecstr.begin(), vecstr.end(), word) == vecstr.end()) { vecstr.push_back(word); t.insert(word.c_str()); } } int cnt; string pre; vector<string> vecpre; for(int i = 0; i < static_cast<int>(vecstr.size()); i++) { cnt = t.query(vecstr[i].c_str()); pre = vecstr[i].substr(0,cnt); vecpre.push_back(pre); } for(int i = 0; i < static_cast<int>(vecstr.size()); i++) cout<<vecstr[i]<<" "<<vecpre[i]<<endl; return 0 ; }
发表评论
-
称球问题
2010-12-16 14:13 1271[节选]http://mindhacks.cn/2008/06 ... -
平均要取到第几个随机数才会让序列第一次下降
2010-12-15 12:05 1289[转载]http://www.matrix67.com/blo ... -
输出一个数列的逆序数
2010-12-10 20:39 26951,这个问题算法导论讲归并排序时,提到过。 找到一个实现代码, ... -
给出前序和中序序列,输出后序序列
2010-12-10 11:46 15271,给出一个实现代码: #include <stdi ... -
输入是一个n*m的矩阵,要求找到其中最大的全0字矩阵
2010-11-25 12:16 15291,分析: 这个题其实就是最大子矩阵,只不过把0的权设为1,其 ... -
一些常见的海量数据处理题目
2010-11-25 11:23 1597很长时间没有更新blog了,先唠叨两句. 这段时间发生了几件不 ... -
不限数目的1、5、10、20、50面额的纸币,有多少种方法凑出100元
2010-09-21 17:22 20171,有不限数目的1、5、10、20、50面额的纸币,有多少种方 ... -
输出1到最大的N位数
2010-09-01 14:23 13281,题意: 输入数字n,按顺序输出从1最大的n位10进制数。比 ... -
找出数组中两个只出现一次的数字
2010-08-26 13:13 18511,题意: 一个整型数组里除了两个数字之外,其他的数字都出现了 ... -
字符串的逆序
2010-08-26 11:23 8491,老题目了,给个自己的版本. #include < ... -
寻找丑数
2010-08-26 10:57 31211,题意: 把只包含质因子2、3和5的数称作丑数(Ugly N ... -
寻找连续序列,使其和等于n
2010-08-26 10:15 11811,分析: 首尾两个游标. 如果当前sum < n, 尾 ... -
n个筛子的和出项的次数
2010-08-25 15:47 8461, 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S ... -
从文件中随即提取一个字符串
2010-05-12 12:54 772算法思路: 读入第一个:概率1保留。 读入第二个:1/2保留上 ... -
编写一些代码,确定一个变量是有符号数还是无符号数。
2010-05-12 12:53 9411,参数是一个值: #define ISUNSIGNED(va ... -
寻找移位有序数组的转折点
2010-05-09 00:22 14371,题意: 原来一个有序数组,分成前后两部分并将两部分交换得到 ... -
递归返回最大值
2010-05-06 19:20 8011,实例代码: #include<iostream& ... -
设定哨兵,返回最大值
2010-05-06 19:16 10351,精炼的代码总是那么迷人. 实例代码: #include ... -
最长平台
2010-05-06 19:01 9971,已知一个已经从小到大排序的数组,这个数组中的一个平台(Pl ... -
返回'+','-'表达式的计算结果
2010-05-04 17:07 7451,实例代码: #include <iostream ...
相关推荐
英语中的前缀和后缀是构词的重要组成部分,它们能够改变单词的基本意义,扩大词汇量,帮助学习者理解和记忆新单词。前缀位于词首,而后缀则位于词尾。 例如,"a-" 和 "an-" 常用来表示否定或非的意思,如 "asleep" ...
在给定的编程问题中,任务是检查一个检索词(searchWord)是否为句子(sentence)中的某个单词的前缀,并返回对应单词的下标。这个问题可以被归类为字符串处理和搜索算法的问题,通常在面试或LeetCode等在线编程挑战...
【单词接龙1】是一个基于算法的编程挑战,它的核心是设计一个有效的解决方案来找到以特定字母开头的最长单词序列,使得每个单词可以连续连接,且满足特定的规则。在这个游戏中,每个单词最多只能在“龙”中出现两次...
2. "-ab-/ac-/af-/ag-/ap-/ar-/as-/at-"是一组加强前缀,如"absorb"(吸收)。 3. "-ad-"表示“做……;加强”,如"adapt"(适应)。 4. "-dis-"有否定或分离的含义,例如"disagree"(不同意)。 5. "-non-"用于否定...
CTC 训练的神经网络的输出mat(numpy 数组,softmax 已经应用)预计具有 TxC 形状,并作为第一个参数传递给解码器。T 是时间步数,C 是字符数(CTC 空白是最后一个元素)。神经网络可以预测的字符作为chars字符串...
通常需要从最后一个字符开始,如果某个节点只有一个子节点且没有其他单词共享该前缀,那么可以删除该节点;否则,仅删除当前节点表示的单词信息。 对于单词出现频率的统计,可以在每个节点中增加一个计数器,每当...
例如,哈希表通过键值对存储单词,可以实现常数时间复杂度的查找,而Trie树则便于进行前缀匹配,提高搜索效率。 其次,源码部分可能包含了以下几个关键模块: 1. 用户界面:这是用户与程序交互的部分,通常使用...
2. **拼写检查**:当用户可能输入错误的单词时,提供一个基于正确拼写的前缀匹配列表,帮助用户快速修正错误。 3. **数据过滤**:在一些特定格式的数据字段中(如IP地址、邮政编码等),前缀查询可以帮助快速过滤...
首先,我们可以观察到,为了构建一个更长的单词,其前缀必须已经在词典中。因此,我们可以对词典进行排序,以确保先处理较短的单词。 Python 的 `sorted()` 函数在这里起到了关键作用,它可以根据指定的 `key` 参数...
英语前缀大全是英语学习中非常重要的一部分,它能够帮助学习者更好地记忆单词。英语前缀大全共分为八大类,每类都有其特定的意义和用法。 一、英语前缀大全之否定的前缀 英语中有多种否定的前缀,例如dis-、in-、...
然后,在回溯过程中,每当遇到一个新的单词片段,就检查它在前缀树中是否存在。如果不存在,就可以立即停止回溯,节省了大量计算资源。 总结来说,解决“单词搜索II”问题的关键在于巧妙地运用回溯法和合适的数据...
- 编写一个函数,接收用户输入的查询词和字典作为参数,返回匹配的单词列表。在该函数中,对每个单词应用所选的模糊查询算法,并根据计算出的距离或相似度排序。 5. **显示查询结果**: - 将模糊查询函数的结果...
2. 从字符串s的第一个字符开始,尝试在前缀树中查找匹配的单词。 3. 如果找到匹配的单词,就将其从字符串s中移除,并继续处理剩下的字符串。 4. 使用递归或者栈结构进行深度优先搜索,每一步都尝试拆分下一个单词。 ...
总之,英语单词构词法是英语学习中的一个重要部分,它涉及到前缀、后缀和词根的组合及其含义。通过深入研究和应用这些构词规则,学习者可以更加系统地扩大词汇量,提高语言理解能力,从而在英语学习的道路上更进一步...
【描述】"完整英语词根前缀后缀表格.doc" 是一个文档,专门列出英语词汇中常见的前缀,用于帮助学习者掌握词缀的用法,从而扩大词汇量和提高语言理解能力。 【标签】"文档"表明这是一个用于教学或学习的文本资料,...
【描述】中的文件名称表明这是一份详尽的英语词汇学习资料,涵盖了多种常用的前缀,帮助学习者通过识别这些前缀来推测单词的含义。 【标签】"文档"提示我们这是一份文本文件,可能是表格或列表形式,方便查阅和学习...
在这个Java项目中,我们利用动态Trie数据结构来构建一个字典,能够快速地查找和管理具有公共前缀的单词。 Trie数据结构的基本思想是将每个字符作为树的一个节点,根节点代表空字符串。从根节点开始,每个节点都指向...
3. **搜索自动补全系统**:设计一个系统,当用户输入部分单词时,可以返回所有可能的完整单词。这需要在用户输入每个字符时更新 Trie,并实时提供补全建议。 4. **字符串的索引对**:给定一个字符串数组,找出所有...
此外,还有一个未完成的方法`isContainPrefix`,它应该是用来检查Trie树中是否存在以给定字符串为前缀的单词。 Trie树在实现过程中通常使用数组作为节点的子节点列表,因为JavaScript的数组是动态的,能够适应不同...
第一部分 通过词缀认识单词(常用前缀一) 1、a- ① 加在单词或词根前面,表示"不,无,非" acentric 无中心的(a+centric 中心的) asocial 不好社交的(a+social 好社交的) amoral 非道德性的(a+moral 道德的;...