题目:有一个江洋大盗,他每次写信都是从一张报纸上剪下单词,再把单词贴在信上。假如某张报纸的单词保存在vector<string>paper 中,而信的单词保存在vector<string>letter 中,写一个算法程序判别该报纸可不可以生成该信?
对比一些方法: 这里假设paper:(m个单词,每个单词平均d个字母),letter:(n个单词,每个单词平均d个字母)。对于中文词语而言,一般2~4个字左右,对于英文单词,d就要大一点,但基本上也是常数。因此d远远小于m,下面比较的时候就不考虑单词中每个字符间的比较了。
(1) 蛮力匹配:
把n中每个单词与m中的每个单词一一比较。时间复杂度为:O(m*n)。估计谁也不会选这种。
(2) 二分查找:要求,对paper建有序索引。
paper排序的时间复杂度最好为O(m*logm)。
对letter中的所有单词二分查找的时间复杂度为O(n*logm)
总的时间复杂度为O((m+n)*logm). 比蛮力查找效率要好不少。
缺点:如果换了新报纸,所有的单词都必须重新排序,需要O(m*logm)的时间来建立索引。
(3) trie树: 要求,对paper建trie索引树
paper建立trie树的时间复杂度为O(m)。
对letter中所有单词在trie树中查找的时间复杂度为O(n).
总的时间复杂度为O(m+n)。效率绝对要比二分查找好。
优势: 如果换了新报纸,重新建立一颗trie树的时间O(m)也小于二分查找建立有序索引的时间O(m*logm)要小的多。
缺点:建立trie树所需要的空间代价是很大的。如果是中文词语的trie树,那么放进全部加载进内存是很可怕的,需要把trie树用B树的方法存储在磁盘上。详见:《Trie树
》
(4) Hash表: 要求,对paper建立Hash结构
建立Hash表结构的时间复杂度为O(m),注意需要计算每个单词的HashCode的时候,很可能要遍历单词中的每个字母。
对letter中所有单词在Hash结构中查找的时间复杂度为O(n)。当然,这是在没有任何散列冲突的理想情况下。选择好HashCode的计算方式和散列表的大小,可以将冲突降到很低。因此我们这里不考虑冲突。
总的时间复杂度为O(m+n)。由此可见,Hash表结构与Trie树的效率都是相当的客观。
缺点:如果换报纸。为了考虑冲突的可能性,Hash结构的大小可能需要重新考虑。这一点很麻烦。当然,存储空间上应该会比Trie要好一些,但实际应用上并不比Trie方便。
(5) 归并查找:要求,对letter和paper都建立有序索引。
对letter和paper排序的时间复杂度分别为O(m*logm)和O(n*logn)
归并查找的时间复杂度为O(m+n)
总的时间复杂度为O(m*logm+n*logn+m+n)
总结:对于这几种方法而言,我更加青睐于trie树。因为我相信报纸中的单词数量基本上是保持稳定的,不可能达到海量级别。Trie树的空间代价其实并不算什么。
分享到:
相关推荐
正则表达式是一种强大的文本处理工具,用于在字符串中查找、替换或匹配特定模式。它由普通字符和特殊字符(元字符)组成,能够灵活地描述各种字符串模式。以下是一些常用的正则表达式及其用途: 1. **匹配中文字符*...
首先,字符串反转是编程中常见的问题,常常用于各类笔试和面试中。而字符串逆序则是在反转的基础上,进一步处理,让整个字符串的顺序完全颠倒。 在本知识点中,将详细介绍以下内容: 1. 字符串反转的原理和方法 2. ...
小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗? 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1 输出描述: 对于每...
最后,通过模式识别算法,如支持向量机(SVM)、深度学习网络(如CNN),将这些特征与已知字符模板进行匹配,从而识别出图像中的文字。 腾讯云OCR服务在此基础上进一步优化,针对不同类型的字符,如印刷体和手写体...
【标题】中的“腾讯开源的以提升问题定位效率为初衷,提供染色抓包、全息日志和异常发现的Node.js框架”指的是腾讯推出的一个专门针对Node.js应用的开源框架,该框架的主要目标是提高开发者在遇到问题时的定位效率。...
标题《数据结构与算法 腾讯精选练习50 V1.0》所指的知识点主要涵盖了数据结构与算法领域内的核心概念与问题解决技巧。这一部分具体包括了LeetCode平台上的经典练习题,腾讯精选的50道题目,这些题目旨在帮助学习者...
- **解析**:`^\s*` 表示匹配字符串开头的空白字符;`\s*$` 表示匹配字符串结尾的空白字符。 6. **匹配 Email 地址** - **表达式**:`\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` - **解析**:该表达式能够...
整体而言,这份手册是腾讯云AT指令使用的重要参考资料,为开发者提供了使用腾讯云AT固件接入腾讯云平台的详细指导,并通过解答常见问题和列举错误码,帮助开发者提高开发效率和解决问题的能力。
这三个题目覆盖了算法设计中的几个关键领域:积分系统与数据分析、序列调整优化以及图像匹配技术。解决这些问题不仅需要扎实的数据结构和算法基础,还需要良好的逻辑思维能力和创新性思考,特别是在面对复杂条件下的...
此题目源自于腾讯2011年10月15日的校园招聘笔试,主要考察应试者对字符串处理、排序及模式匹配等算法的理解与应用能力。 ### 一、问题背景 在计算机科学领域,字符串操作是非常基础且重要的内容之一。尤其是在文本...
腾讯发展前景充满机遇与挑战。其优势在于庞大的用户群体和QQ号码作为虚拟世界的标识,使得腾讯在个人即时通讯市场占据绝对优势。然而,腾讯的战略也面临着一些问题。例如,其“在线生活”战略在学校和工作场景中的...
腾讯WeMake工业互联网平台强调了提升企业的“连接效率、数据效率与决策效率”,帮助企业在面对快速变化的市场时,增强外部环境的感知能力、客户响应能力以及敏捷创新能力。平台的建设思路包含了强大的数据处理、算力...
通过这种方式,能够确保腾讯集团内部各个项目的代码具备一致性和标准化,进而提高开发效率和降低后期维护成本。此外,规范化编码还能减少潜在的安全风险,增强软件产品的整体质量。 #### 3. 适用范围 本规范适用于...
4. **解决方案与最佳实践**:分享腾讯云在不同行业的解决方案,如电商、游戏、教育、金融等领域的应用实例,以及如何利用腾讯云服务优化业务流程和提高效率。 5. **安全与合规**:讨论腾讯云的安全策略,包括数据...
【腾讯通机器人 v2.0】是一款专为腾讯通RTX(Real Time eXchange)设计的自动化应答工具,旨在提升企业内部沟通效率,减轻客服或信息支持人员的工作负担。这款软件允许用户构建定制化的自动回复逻辑,针对常见的问题...
通过腾讯面试的经验分享,求职者可以了解到面试过程中可能会遇到的问题类型,以及如何在面试中更好地展示自己的能力和潜力。另外,腾讯的产品培训生计划是一个旨在选拔并培养优秀毕业生进入公司并为其提供快速成长...
《腾讯专题:腾讯生态圈如何与金融融合》 随着科技的发展,互联网巨头腾讯在金融服务领域的影响力日益增强。腾讯生态圈,以其庞大的用户基础、多元化的服务场景和先进的技术能力,正在逐步改变金融行业的格局,实现...
六、腾讯广告产品常见问题 在使用腾讯广告产品时,可能会遇到一些问题,例如: 1. 广告投放不成功:可能是由于账户余额不足、广告格式不正确等原因。 2. 广告监控不准确:可能是由于数据统计不准确、监控系统出...