提问人:motrait 提问时间:4/9/2022 更新时间:4/9/2022 访问量:108
同时检查字符串是否在切片中?
Concurrently check if string is in slice?
问:
通常,为了检查字符串是否在切片中,我用 for 循环和 if 语句编写一个函数。但是,在字符串或结构类型的大切片的情况下,它确实效率低下。是否可以同时进行此检查?
答:
3赞
Jakub Dóka
4/9/2022
#1
对顺序数据进行并发搜索通常不是一个好主意,仅仅是因为我们已经有一个二进制搜索,甚至可以很好地扩展数十亿条记录。要使用它,您所要做的就是在您正在搜索的切片之上构建索引。若要生成最简单的索引,必须将键及其指向的数据索引一起保存到另一个切片中。一旦你有了切片,只需按字符串对它进行排序,索引就完成了。
您必须对刚刚创建的索引执行二进制搜索才能提高效率。这样你就有了 O(log N) 的复杂度。
另一个更简单的选项是创建并插入所有键以及索引。然后在地图中找到索引。这可以是 O(1) 的最佳情况。map[string]int
需要注意的重要一点是,如果您只需要对给定切片执行一次搜索,这是不值得的,因为创建索引比线性搜索要重得多。
评论