Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Arrays 具有递增整数数组的高效算法_Arrays_Algorithm_Search_Bisection - Fatal编程技术网

Arrays 具有递增整数数组的高效算法

Arrays 具有递增整数数组的高效算法,arrays,algorithm,search,bisection,Arrays,Algorithm,Search,Bisection,我一直在用python自学数据结构,不知道自己是否过度思考(或思考不足!)以下问题: 我的目标是找到一个有效的算法 使用该算法,我的目标是确定一个整数i是否存在,使得在递增整数数组中的[i]=i 然后我想用big-O表示法来计算运行时间,作为n的函数,a的长度 那么这不就是一个稍微修改过的O(logn)版本吗,它的函数等价于:f(i)=a[i]-i。我看错这个问题了吗?任何帮助都将不胜感激 注1:因为您说整数在增加,所以排除了数组中存在重复项(否则您会说单调增加)。因此,如果第一个元素大于1

我一直在用python自学数据结构,不知道自己是否过度思考(或思考不足!)以下问题:

  • 我的目标是找到一个有效的算法

  • 使用该算法,我的目标是确定一个整数i是否存在,使得在递增整数数组中的[i]=i

  • 然后我想用big-O表示法来计算运行时间,作为n的函数,a的长度


那么这不就是一个稍微修改过的O(logn)版本吗,它的函数等价于:f(i)=a[i]-i。我看错这个问题了吗?任何帮助都将不胜感激

注1:因为您说整数在增加,所以排除了数组中存在重复项(否则您会说单调增加)。因此,如果第一个元素大于1,则可以快速检查是否没有解决方案。换句话说,要有解决方案的机会,第一个元素必须是正确的,返回no

运行时间为O(logn)

编辑:如果允许单调递增,则算法不起作用。练习:解释原因。:-)

  • 你说得对。在
    A
    大小的数组中查找元素
    i
    实际上是
    O(loga)

  • 但是,如果您用内存复杂性换取时间复杂性,您可以做得更好:
    O(loga)->O(1)
    ,这正是“优化器”倾向于做的

我的意思是:如果你在一个“有效”的哈希表中插入新的数组元素,你就可以在固定时间
O(1)

这在很大程度上取决于要插入的元素:

  • 它们是独一无二的吗?想想碰撞
  • 您多长时间插入一次

    • 这是一个有趣的问题:-)

      您可以使用二分法来定位
      a[i]==i
      所在的位置:

             0  1  2  3  4  5  6
      a = [-10 -5  2  5 12 20 100]
      
      When i = 3,   i < a[i],  so bisect down
      When i = 1    i > a[i],  so bisect up
      When i = 2    i == a[i], you found the match
      
      01123456
      a=[-10-525122100]
      当i=3时,ia[i]时,将其平分
      当i=2i=a[i]时,您找到了匹配项
      

      运行时间是O(logn)

      写一些代码作为开始:)你关于复杂性的推理似乎是正确的。属于程序员SE,而不是这里。这归结为在函数中找到零,其中f(x)=a[x]-x。使用二分法只是一种可能的方法,另一种方法是使用两条边之间的线性近似来找到零点的可能位置。