西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发其它知识 → 海量字符串中查找某个匹配的字符串方法

海量字符串中查找某个匹配的字符串方法

相关软件相关文章发表评论 来源:西西整理时间:2012/12/25 18:23:05字体大小:A-A+

作者:西西点击:0次评论:0次标签: 字符串

  • 类型:电子教程大小:9.5M语言:中文 评分:7.5
  • 标签:
立即下载

处理在海量个字符串中找到某个字符串的方法

今天收到intel面试,问我一个问题,如何在一万个字符串中找到某个相关的字符串?当时感觉打得不好,回头自己又想了想,现写下感想。

方法1:最笨的方法,一个一个的遍历

方法2:采用划分子集的方法,首先以第1个字符进行划分,将a到z开头的字符串划分到不同的子集中,然后比较,接着,再到相应子集中进行划分,在比 较,一直到找到为止,这个方法相较于方法1是:1,相对于每次比较的字串而言,所有首字母不相同的不再进行比较,比方说happy,肯定去以h为首字母的 集合中进行比较,然后对于子串appy,只要到所有子串以a为首字母的集合中进行比较,如此下去,时间花费主要在于划分子集上,而划分子集的次数又跟 happy的长度有关系,所以只需划分5次即可,所以时间复杂度是O(mn),m是要寻找字符串的长度,n是原始字符串集合大小。

方法3:采用正则表达式匹配,比如还是happy,假如将原始集合中的所有字符串和正则表达式pattern = ^h[A-Za-z]+y$进行匹配,接着在对app这个子串和子集合中进行正则表达式匹,pattern=^a[A-Za-z]+p$,最后对p进行匹配即可,时间复杂度O(mn)

方法4:采用Hadoop海量数据处理,将海量字符串分到不同的map任务中,每个任务,进行对字符串在相应的node上进行查找,接着对于所有的map的结果交给reduce任务分析,这仅仅是个方案,具体时间复杂度的话,看你有多少个map任务了。

方案5:采用trie树,对这海量字符串构建一颗trie树,然后在trie树中查找该字符串,trie树的优势在于对于前缀一样的字符串都可以在一次匹配查找中得到,时间复杂度在于构建trie树复杂度,和trie树的高度。

方案6:可以采用编译原理学到的自动机,最近再看编译原理突然想到,不过对于海量数据,具体情况怎么样,还得我继续探索~~

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据