Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Algorithm 选择i';最小数算法_Algorithm_Sorting - Fatal编程技术网

Algorithm 选择i';最小数算法

Algorithm 选择i';最小数算法,algorithm,sorting,Algorithm,Sorting,我正在读《算法导论》一书,第二版,关于中值和顺序统计的章节。我有一些关于随机和非随机选择算法的问题 问题: 给定一个无序的整数数组,找到数组中第i个最小的元素 a。随机选择算法简单。但我无法理解工作时间的数学解释。有没有可能用更直观的方式来解释这一点?至于我,我认为它应该适用于O(nlogn),在最坏的情况下应该是O(n^2),就像快速排序一样。在avg中,randomizedPartition返回接近数组中间的部分,每个调用将数组分成两个,下一个递归调用只处理数组的一半。随机化分区成本(p-r

我正在读《算法导论》一书,第二版,关于中值和顺序统计的章节。我有一些关于随机和非随机选择算法的问题

问题: 给定一个无序的整数数组,找到数组中第i个最小的元素


a。随机选择算法简单。但我无法理解工作时间的数学解释。有没有可能用更直观的方式来解释这一点?至于我,我认为它应该适用于O(nlogn),在最坏的情况下应该是O(n^2),就像快速排序一样。在avg中,randomizedPartition返回接近数组中间的部分,每个调用将数组分成两个,下一个递归调用只处理数组的一半。随机化分区成本(p-r+1)随机化选择在O(n)中运行。看

总成本是以下各项的总和:

  • 拆分大小为n的数组的成本
  • 在L中查找的成本或在B中查找的成本
编辑:我试图重组我的帖子

您可以注意到:

  • 我们总是在集合中使用更多元素的下一个
  • 该集合中的元素数量为
    n-rank(xj)

  • 1随机选择在O(n)中运行。看

    总成本是以下各项的总和:

    • 拆分大小为n的数组的成本
    • 在L中查找的成本或在B中查找的成本
    编辑:我试图重组我的帖子

    您可以注意到:

    • 我们总是在集合中使用更多元素的下一个
    • 该集合中的元素数量为
      n-rank(xj)

    • 1我曾经在维基百科页面上为它创建了一个解释(用图表)

      我曾经在维基百科页面上为它创建了一个解释(用图表)

      随机选择在O(n)中运行我读到了,但我不理解为什么随机选择在O(n)中运行我读到了,但我不理解为什么运行!此外,我还没有找到我的一个问题的直接答案,但在分析了wiki文章和我在Google上搜索的一些文章后,我发现我们确实需要创建新的中间值数组来找到中间值的中间值。在最初的ArrayTanks中没有理由这样做!此外,我还没有找到我的一个问题的直接答案,但在分析了wiki文章和我在Google上搜索的一些文章后,我发现我们确实需要创建新的中间值数组来找到中间值的中间值。在原始数组中没有理由这样做
      Algorithm :
      Randomly choose an element
      split the set in "lower than" set L and "bigger than" set B
      if the size of "lower than" is j-1 we found it
      if the size is bigger, then Lookup in L
      or lookup in B
      
      T(n) = E(cost) = sum {each possible xj}p(xj)(O(n) + T(n - rank(xj)))
      
      T(n) = 1/n *( O(n) + sum {all possible values of rj when we continue}(O(n) + T(n - rj))) )
      T(n) = 1/n *( O(n) + sum {1 < rj < n, rj != i}(O(n) + T(n - rj))) )
      
      T(n) = 1/n *( O(n) + sum { 0 <= vj <= n - 1, vj!= n-i}(O(n) + T(vj) ))
      
      T(n) = 1/n *( O(n) + O(n^2) + sum {1 <= vj <= n -1, vj!= n-i}( T(vj) ))
      
      T(n) = O(1) + O(n) + 1/n *( sum { 0 <= vj <= n -1, vj!= n-i} T(vj) )