algorithm - 应用于 double 时,三元搜索的时间复杂度是多少?

标签 algorithm

我知道普通三元搜索的时间复杂度是 O(log3 n),但是如果它与浮点数一起使用呢?
一个例子:这个代码块的这个块的时间复杂度是多少?

double s = -100, m1, m2, e = 100, EPS = 1e-6; 
while(abs(s-e) > EPS)
{     
    m1 = s + (e - s) / 3;
    m2 = e - (e - s) / 3;

    if(condition)
        e = m2;
    else
        s = m1;
}
所有这些都是在 -100 和 100 之间搜索一个实数,但是当 EPS 的精度改变时,时间复杂度会发生变化。变量变化。

最佳答案

复杂度是O(log 3(e-s)/EPS) .我们可以将问题简化为整数情况,其中 n=ceil((e-s)/ESP) . (这里 ceil(x) 是将 x 映射到下一个整数 j 使得 x <= j < x+1 的函数。)
delta = (e-s)/n <= EPS .很容易验证 delta <= EPS .在 i算法的第 th 步,或者 s[i]e[i]已从其前身( s[i-1]e[i-1] )移动到不同的区间 I[i]I[i] = (s+(i-1)*delta, s+i*delta] (i <= n) 提供, 否则 s[i]e[i]都在 delta 以内彼此之间,在这种情况下,它们在 EPS 内彼此的。

关于algorithm - 应用于 double 时,三元搜索的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68703822/

相关文章:

将一组集合划分为大小大致相等的 block 的算法?

c - 算法 : Unimodal Streak

python - 猜号游戏优化(用户创号,电脑猜号)

algorithm - 用于空模型的交换算法的 Scala 版本

c++ - 解决我的代码中未通过测试用例的错误

algorithm - 这种寻路算法的名称是什么?

c - 以 64 位整数为模计算 128 位整数的最快方法

algorithm - 用于查找缺少字母的单词的良好算法和数据结构?

algorithm - 3d 空间中的三角形三角形交点

javascript - 如何将 "summarize"整数数组转换为具有范围的字符串?