Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何高效地搜索hashmap中所有值的子字符串?_Java_Performance_Algorithm_Data Structures_Time Complexity - Fatal编程技术网

Java 如何高效地搜索hashmap中所有值的子字符串?

Java 如何高效地搜索hashmap中所有值的子字符串?,java,performance,algorithm,data-structures,time-complexity,Java,Performance,Algorithm,Data Structures,Time Complexity,我有以下方式指定的数据: <type:id> <relevance-score> <data> 假设将这些值放入hashmap中,以便: key = (<type:id>) | value = (<relevance-score>,<data>) 查询字符串也可以是Pikl或Pikl F或Pikl F'n,这意味着字符串匹配算法是进行搜索的最佳方式 当前方法:对hashmap中的所有值使用Boyer-Moore算法,并将

我有以下方式指定的数据:

<type:id> <relevance-score> <data>
假设将这些值放入hashmap中,以便:

key = (<type:id>) | value = (<relevance-score>,<data>)
查询字符串也可以是
Pikl
Pikl F
Pikl F'n
,这意味着字符串匹配算法是进行搜索的最佳方式

当前方法:对hashmap中的所有值使用Boyer-Moore算法,并将结果数据存储到最大堆中(根据相关性得分)

时间复杂性

  • 博耶·摩尔:
    O(m+n)
  • 总计,对于hashmap中键的每个值
    O(q(m+n))
    其中
    q:#

  • 还需要添加从堆弹出的值。让我们假设
    O(s)
    其中
    s
    是匹配数。由于
    s您当前的方法基本上归结为:

  • 遍历所有数据并查找与搜索字符串匹配的数据
  • 根据相关性得分对所有匹配数据执行堆排序
  • 唯一的区别是执行1时执行2,但结果的时间复杂度是相同的


    即使我们假设每个字符串搜索的时间是
    O(1)
    ,字符串搜索的总时间也是
    O(q)
    ,排序的时间是
    O(slog(s))
    。既然
    s,Boyer Moore是正确的工具吗?它的工作原理是预处理用户正在寻找的模式,而不是正在搜索的目标字符串。你在这里买什么?不确定。我只是用它来匹配字符串。一开始是一种幼稚的方法。想知道是否有更有效的做事方式?你有什么建议?我们讨论了多少数据项?此外,将其存储在具有良好文本搜索功能的dbms中是一种选择吗?最简单的方法是10万次。为了更快地访问,所有这些都必须“在内存中”。因此,考虑从头开始设计这样的功能,上述方法就是这样的“一个”想法。
    
    key = (<type:id>) | value = (<relevance-score>,<data>)
    
    Example output: a:2, a:1