【问题标题】:How to find specific string in array or linkedlist如何在数组或链表中查找特定字符串
【发布时间】:2018-05-24 02:34:38
【问题描述】:

我想查找具有特定短字符串数组或链表的字符串。我使用 c++ 制作了一个搜索会议或研讨会的小程序,例如http://dblp.uni-trier.de/。我想知道的是如何在数组或链表中快速搜索字符串。使用 string.find() 函数时,如果数组的长度为 n,我认为该函数的性能具有 O(n) 时间复杂度。我可以将性能提高到低于 O(n) 吗?请帮帮我

【问题讨论】:

    标签: c++ string data-structures


    【解决方案1】:

    对于一个数组,除非它已排序,否则你能做的最好的事情是 O(n) 平均/最坏情况,因为你必须线性查找,直到找到所需的字符串。如果它已排序(这将花费 O(nlog(n)) 进行排序),您可以使用二进制搜索使其成为 O(log(n)) 搜索。对于链表,无论排序如何,您能做的最好的事情是 O(n)。

    【讨论】:

    • 谢谢你的提前,但这不是我想要找到包含特定字符串的任何数组或链表的元素的答案。使用string.find()函数时,时间复杂度为O(N)。如何提高性能?
    【解决方案2】:

    如果您真的想使代码复杂化,请在每次插入列表时存储指向某个平衡树中节点的指针。节点将根据来自该节点比较的字符串插入。然后你可以在 O(logn) 时间内得到字符串。

    如果您想获得快速检索,请使用哈希映射,它会给您 O(1) 时间。

    【讨论】:

    • umm.. 我真正想知道的是包含特定字符串或字符的数组或链表的所有元素。简单的例子是字符串 arr[5] = {apple, Bear, watermelon, pineapple, graph} 我想找到包含字母 'e' 的字符串。所以我想我需要 5 个比较来进行搜索。当数组元素个数为N时,搜索速度为O(N)。所以我想知道如何提高搜索速度。
    • 要搜索子字符串,您不需要 5 次比较,但它将是 O(mn) 次比较,m 字符串长度 n 字符串数。数组或链表本身无法做到更快。
    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多