什么是可以在非排序数组上完成的最快搜索?

如何在非排序数组中快速搜索? 除了线性搜索之外,我无法想到任何其他搜索机制。

任何指针都会有所帮助。

是的,如果没有对数据进行排序,线性搜索就像您可以做的一样好。

给定一个真正随机的非排序数组,线性搜索是最好的方法。

如果可以假设数据被粗略排序,那么您可以使用某种启发式方法做得更好。

线性。 或者对数组进行排序并在日志时搜索它。

如果没有对数组进行排序,确实没有任何优化要做。 所有优化都取决于对arrays的某些知识得到保证。 没有它,你不能假设任何东西,必须线性地遍历每个项目。

正如其他人所提到的,线性搜索是可行的方法。 但是,根据您的设置,以下内容可能与加快速度相关,也可能不相关。

如果搜索某些项目的频率高于其他项目,则可以使用小型缓存。 例如,如果要为文件系统实现lookup()操作(数据最终存储在磁盘的某个位置),则缓存可以提供极大的帮助。

你可以对数据进行排序/筛选,以便最常查找的项目接近数组的开头吗?

将数据存储在两组中是否切实可行? 一个是排序的,一个是未分类的? 已排序,您应该能够快速搜索您的项目。 如果找不到,请转到未排序的列表并进行线性搜索。 为什么? 虽然您说在每次插入后插入是不切实际的,但是从未排序列表定期插入到排序列表中是否实用/有效?

这一切都必须在一个未排序的数组中吗? 您可以将数据放入已排序数据块吗? 也就是说,每个块可能有1000个已排序的条目。 搜索每个排序的块可能比搜索整个未排序的列表更快。

只是一些想法。 它们可能不适用于您的情况,但希望它们有用。

有一些聪明的方法可以优化线性搜索,但最终它们都没有真正付出性能,但却使代码容易出错且难以理解。 所以我建议坚持简单的线性搜索(即简单的迭代+比较)。

一旦您的代码显示未排序的列表,是的,您将需要进行线性搜索。

如果可以多次搜索,你可以做几件事。

首先,当然,将对列表进行排序。 这将使第一次查找花费相当长的时间,但后续的查找会更快。

其次,我建议缓存结果。 对于大多数用法,我发现随后的查找很可能是相同的值,或者是附近的值。

你应该不打扰其中任何一个,除非列表真的很大而且搜索速度很慢。 一般来说, 编写的代码越少,每个人的表现就越好

如果能够,您可以考虑首先更改数据的存储/创建方式。 而不是将项添加到数组,创建一个完整的二进制树(或其他)并使用它。 它使得操作数据的速度稍慢,但它不应该像每次重新排序数据一样慢,并且会使搜索速度更快。