Algorithm 计算最小值和最大值之间点的最快方法
我有一个排序元素的列表。它们形成一个正弦波结构。我感兴趣的是以最快的方式在最大值和最小值之间找到一个点Algorithm 计算最小值和最大值之间点的最快方法,algorithm,search,math,optimization,Algorithm,Search,Math,Optimization,我有一个排序元素的列表。它们形成一个正弦波结构。我感兴趣的是以最快的方式在最大值和最小值之间找到一个点 目前,我已经尝试了二进制搜索和斐波那契搜索。它们给出的时间大致相同。但我想我花了太多时间来寻找这些元素。仔细阅读文献,有没有更快的方法?我不担心空间的复杂性 理论上,二进制搜索是在排序列表中搜索的最低界限,并在O(log(n))中运行。直到今天,在非量子计算领域,你唯一能战胜它的方法就是掌握一些关于数据分布的知识 但是,如果分布足够均匀,您可以实际使用,其中性能可以显示为平均O(log(log
目前,我已经尝试了二进制搜索和斐波那契搜索。它们给出的时间大致相同。但我想我花了太多时间来寻找这些元素。仔细阅读文献,有没有更快的方法?我不担心空间的复杂性 理论上,二进制搜索是在排序列表中搜索的最低界限,并在
O(log(n))
中运行。直到今天,在非量子计算领域,你唯一能战胜它的方法就是掌握一些关于数据分布的知识
但是,如果分布足够均匀,您可以实际使用,其中性能可以显示为平均O(log(log(N))
在您的情况下,您必须在一个范围内搜索而不是单个值,如果您的值具有均匀分布并且您的最小-最大窗口足够大,则插值搜索可能会执行得非常好;你可能离你的第一支安打很近
*另一种解决方案是保留以前查询中的某种缓存,这样您就不会在相同范围的连续请求上搜索整个列表。您是否了解值的分布,即是否平滑或是否可能存在密集/稀疏区域?分布不能是恒定的。有时它非常平滑,有时最大值和最小值可能相邻。它们非常接近的情况可能很少见,比如说256次迭代中只有一次。您使用的是缓存效率高的布局吗?