• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 如何提高大量字符串查找操作的效率(非前缀搜索)?

如何提高大量字符串查找操作的效率(非前缀搜索)?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了字符串前缀,字符串前缀后缀,求解给定字符串的前缀,java截取字符串方法,c语言中字符串等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:如何提高大量字符串查找操作的效率(非前缀搜索)?
描述:

问题:
有一个比较大的字符串数组[A],10万左右元素,每个元素是比较短的字符串,长度小于32个字.
用户输入一个比较短的字符串s,长度也小于32,要求查找出:包含s的元素集合[B],拼音中包含s的元素集合[C],以及拼音首字母中包含s的元素集合[D]. 要求支持多音字和中英文数字混输.

功能我已经实现了,但是现在项目要求随着用户在输入框中输入,结果实时地在输入框中显示,我的实现比较慢,做不到随输随显示。如果想提高效率,该用什么办法呢?

我把计算拼音和拼音首字母的结果做了缓存,提高了一些效率,但是还是达不到要求。

我的想法是:
1.能不能用某种数据结构把[A]重新组织起来方便查找?
2.因为结果是在QTreeView中显示的,这里能不能优化一下?

注:
1.不是前缀搜索,是只要包含子串s的都找出来。
2.要支持多音字,所以一个字符串可能对应很多个拼音串。


解决方案1:

楼主,请问你最后的解决方法是什么,能提点一二不,有代码更好

解决方案2:

我不是很懂你要表达的意思, 我猜是这样的:

你手里有10万个字符串, 需要查出给定字符串为前缀的所有字符串. 例如:

我有['abcde', 'abcdef', 'abc', 'a'] 四个字符串, 当给定字符串为'ab'的时候, 查出['abcde', 'abcdef', 'abc'].

如果是这个意思, 请使用trie树.

解决方案3:

如果字符串大小小于32的话,你可以考虑生成32棵trie树.基本思路是这样的吧,用户每次查找都在这32棵树中进行搜索。假设字符串长度限制为4个为例:
原始字符串
1234 2234 3234 4234
转换为:
t1: 1234+ 2234+ 3234+ 4234+
t2: 234+1 234+2 234+3 234+4
t3: 34+12 34+22 34+32 44+23
t4: 4+123 4+223 4+323 4+234

对t3:

-----nil-----
   |    |
   3    4
  ---  ---
   |      |
   4      4
  ---     ---
 +++++++   +++
 +  +  +     +
 12 22 32    23

+之后的节点只用来还原字符串,不参与查找。
当用户输入3时,首先匹配上t3,用户继续次输入时,只需要在t3树下继续查找即可。
举例:
用户输入34:
输入3: 先匹配t3,需要查找4次,
继续输入4:直接在t3中查找,1次即可

用户输入35:
输入3: 先匹配t3,需要查找4次,
继续输入5:直接在t3中查找,匹配不到,即是没有

内存占用提高32倍,算法时间基本为常量


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何提高大量字符串查找操作的效率(非前缀搜索)?

相关文章

  • 2017-06-07 七牛云存储自定义域名时,选择使用场景,三个场景的作用?
  • 2017-06-07 生活中的数学问题关于删除数组中的某一项的问题?
  • 2017-06-07 jboss+seam
  • 2017-06-07 正则表达式匹配VB函数结尾
  • 2017-06-07 init.php文件七牛可以执行php文件吗
  • 2017-06-07 (python)可不可以写一个爬虫,下载自己想下载的电影?
  • 2017-06-07 flaskadmin如何让sqlalchemy模型“挂”到两(多)个模型?
  • 2017-06-07 自定义域名问题
  • 2017-06-07 pythonclass错误:TypeError:'str'objectisnotcallable
  • 2017-06-07 java使用ArrayList时提示超出索引范围,如图

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • pythondict里面的中文值打印出来全是\xe9\x80\x80\xe5?
    • python中Slash符号的作用,参数传递?
    • API文档写的太垃圾了
    • (shell)`cp`命令在拷贝整个目录的时候是否可以不包括隐藏文件?
    • (python)安装Airflow报错
    • mac下的svn工具cornerstone不显示timeline也不能回滚到以前的版本这是为什么呢
    • 前后端的数据如何实时对接?
    • (shell)重启tomcat脚本编写
    • 什么是环境变量?有什么作用?
    • python爬虫(python)有没有轻量级的推荐系统?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有