![]() |
1
6
任何寻找“滚动”点的算法在最坏的情况下至少有O(n)复杂度。
想象一下,您对数组进行了排序,并检查了不到n个元素。例如,如果在数组中
因此,您唯一的选择是遍历所有元素,直到找到rollover。 感谢 艾亚尔施耐德 一个有用的评论。 顺便说一句,我是这里唯一一个不懂“滚动”这个词的词源的人吗? |
![]() |
2
4
如果要进行多次搜索,可以使用线性搜索进行一次预处理,以获得所有滚动位置的索引,然后在每个部分中进行二进制搜索。 但如果你只想搜索一次,我想你必须做线性搜索。所以无论哪种方法都需要线性搜索。 如果您使用“先查找滚动更新”技术,并且您知道只有一个滚动更新点,那么您至少可以在找到该点后立即退出线性搜索。 |
![]() |
3
2
|
![]() |
4
0
把数组看作一个数学函数,你想要的是函数的局部极大值。虽然我没有足够的知识来解释,你可能想做一些研究 Hill Climbing . 使用一些启发式方法,你也许能更有效地找到你的局部极大值。 |