Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Algorithm 计算最小值和最大值之间点的最快方法_Algorithm_Search_Math_Optimization - Fatal编程技术网

Algorithm 计算最小值和最大值之间点的最快方法

Algorithm 计算最小值和最大值之间点的最快方法,algorithm,search,math,optimization,Algorithm,Search,Math,Optimization,我有一个排序元素的列表。它们形成一个正弦波结构。我感兴趣的是以最快的方式在最大值和最小值之间找到一个点 目前,我已经尝试了二进制搜索和斐波那契搜索。它们给出的时间大致相同。但我想我花了太多时间来寻找这些元素。仔细阅读文献,有没有更快的方法?我不担心空间的复杂性 理论上,二进制搜索是在排序列表中搜索的最低界限,并在O(log(n))中运行。直到今天,在非量子计算领域,你唯一能战胜它的方法就是掌握一些关于数据分布的知识 但是,如果分布足够均匀,您可以实际使用,其中性能可以显示为平均O(log(log

我有一个排序元素的列表。它们形成一个正弦波结构。我感兴趣的是以最快的方式在最大值和最小值之间找到一个点


目前,我已经尝试了二进制搜索和斐波那契搜索。它们给出的时间大致相同。但我想我花了太多时间来寻找这些元素。仔细阅读文献,有没有更快的方法?我不担心空间的复杂性

理论上,二进制搜索是在排序列表中搜索的最低界限,并在
O(log(n))
中运行。直到今天,在非量子计算领域,你唯一能战胜它的方法就是掌握一些关于数据分布的知识

但是,如果分布足够均匀,您可以实际使用,其中性能可以显示为平均
O(log(log(N))

在您的情况下,您必须在一个范围内搜索而不是单个值,如果您的值具有均匀分布并且您的最小-最大窗口足够大,则插值搜索可能会执行得非常好;你可能离你的第一支安打很近


*另一种解决方案是保留以前查询中的某种缓存,这样您就不会在相同范围的连续请求上搜索整个列表。

您是否了解值的分布,即是否平滑或是否可能存在密集/稀疏区域?分布不能是恒定的。有时它非常平滑,有时最大值和最小值可能相邻。它们非常接近的情况可能很少见,比如说256次迭代中只有一次。您使用的是缓存效率高的布局吗?