在时间复杂度 O(n) 的无限线上找到一个点的算法

标签 algorithm time complexity-theory

在无限直线上有一个位置未知的点 x。一个算法应该找到这个点的时间复杂度为 O(n),其中 n 是搜索起点 s 和 x 之间的距离。这条线被分成几步。每一步的长度都相同。

我的想法是这样的:

start in s
go 1 step left
if x found { 
    terminate
 }
else {
    go 2 steps right
    if x found { 
        terminate
    }
    else {
        go 3 steps left
        ...
        ..
        .
    }
}

但这并不像 O(n) 那样接缝。

有什么想法吗?

谢谢

最佳答案

您已经找到了适合这项工作的算法。

But this doesn't seam like O(n).

这个算法是精确的 O(n),因为对于 1 和 n 之间的每个 k 值,它恰好探测两次 - 一次在右边的位置 x+k*sm,一次在左侧位置 x-k*s。这意味着该算法是 O(2n),但由于在大 O 表示法中始终排除常数因子,因此您的算法是 O(n)。

关于在时间复杂度 O(n) 的无限线上找到一个点的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701001/

相关文章:

气球排序的复杂性

r - 使用 Apply 系列 : Metropolis-Hasting Alg 的迭代算法

java - 将 yyyy_mm_ddThh-mm-ss 转换为日期对象?

java - 获取服务器的日期或时间

C# 检查输入的日期是否有效

java - 在 O(n) 的文档中返回 10 个最常用的词

algorithm - 距离(B)+ 距离(A-B)

algorithm - 硬币找零算法

c++ - 以迭代方式复制二叉树

java - 具有多个导出点的代码段中的循环复杂度