搜索列表的更快方法?

Posted

技术标签:

【中文标题】搜索列表的更快方法?【英文标题】:Faster way to search list? 【发布时间】:2016-10-20 20:03:37 【问题描述】:

我正在努力使我的程序更有效地运行,我相信修复这个线性搜索会在速度方面有很大帮助,但我很好奇我将如何将其更改为类似二进制搜索,因为我相信列表不一定是有序的。是否有某种方法可以根据第一个参数key 对列表进行排序?

我目前的工作:

int* key_sequences::data(int key)
    for(it=myList.begin(); it!=myList.end(); ++it)
        if(it->first==key)
            return &(it->second[0]);
        
    
    return nullptr;
;

【问题讨论】:

没有排序的序列是不可能进行二分搜索的。 显而易见的答案是退出使用列表,并将其替换为更合适的数据结构(可能是mapunordered_map,从外观上看)。根据插入/删除发生的时间/频率,您还可以考虑使用“FlatMap”——在排序数组中进行二进制搜索。 经常重复搜索一个序列,寻找连续的键。缓存最后的搜索结果可以将总时间从 O(n²) 减少到 O(n)。但我会把数据结构改成更合适的,比如map 您考虑过使用std::map 吗? 除了其他 cmets,请记住,即使您出于任何原因必须坚持使用线性搜索,在连续数组(如 vector)中的线性搜索也会更快而不是链表中的线性搜索。 【参考方案1】:

在简单链表中搜索是 O(n),其中n 是列表的大小。

但是,在某些实现中,人们使用三个列表指针,一个在开头,一个在中间,一个在末尾,这样当搜索出现时 - 他们可以加快过程,所以你可以在网上搜索这个.

但是,如果我是你并且对加快搜索非常感兴趣,我会尝试另一种数据结构(哈希?比如std::unordered_map)或对列表进行排序。

【讨论】:

以上是关于搜索列表的更快方法?的主要内容,如果未能解决你的问题,请参考以下文章

在列表/数组中查找元素的更快方法

在文本文件中搜索字符串的更快方法[关闭]

创建了我自己的二进制搜索版本,不明白为啥它比常规方法更快?

在 Pandas Dataframe 中扁平化列表的更快方法

比有序列表的二进制搜索更快

从 URL 将对象添加到 NSMutableArray 的更快方法