math - O(N) 最坏情况的 MaxMin 分而治之算法

标签 math

该算法的 T(N) 为 O(N^2),最坏情况。当它是二的幂时,它是 O(N)。但是我需要找到一种方法让它在最坏的情况下成为 O(N)。有什么想法吗?

max_min(A, i, j, max, min)
{ 
  if(i==j)  -----------> 0 comparisons  
 {
     max=min=A[i];  
   return (max,min);  
  } 
   if(i=j-1)  
  { 
      if(A[i]>A[j])   -------------> 1 comparisons  
     { 
        max=A[i];  
        min=A[j]; 
      }  
     else   
    { 
        max=A[j];   
        min=A[i];
    }
  }
  else 
 {  
   mid=(i+j)/2; ----> O(1)   
  (max1,min1)=max_min(A, i, mid, max, min);  --->T(n/2)  
   // if T(n) is complexity for n elements
  (max2,min2)=max_min(A, mid+1, j, max. min); ---->T(n/2)     
    if(max1>max2)  ---> 1 comparisons   
      max=max1;
    else  
      max=max2; 
    if(min1>min2)  ---> 2 comparisons  
      min=min2;   
    else  
     min=min1; 
  }  
  return(max,min);
} 

最佳答案

T(2) = 1
T(n) = 2T(n/2) + 2

有解(通过代入上面确认)

T(n) = (3/2)n - 2

对于 n 的 2 次幂是精确的,其中递归在所有递归级别都是精确的,并且不需要正确说明下限和上限。

正如我们从主定理的证明中得知的那样,地板和天花板不会改变解的渐近行为,因此 T(n) 通常是线性时间。所以没有问题要回答。

关于math - O(N) 最坏情况的 MaxMin 分而治之算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211454/

相关文章:

javascript - JavaScript 中大数的除法和余数

wpf - 数学(在 WPF 中): Getting new x, 平移后的 y 坐标

c++ - 将符号位、指数和尾数转换为 float ?

c++ - 快速计算 n 次 10 的负 m 次方

python - 计算最适合椭圆的线

c - 为什么 C 为这个算法给 Python 不同的值?

algorithm - 使用 n 个节点之间的 k 个链接最小化总距离

java - Integer.valueOf 不适用于 Java 中 -1 的二进制表示

python - 分离轴定理和Python

algorithm - 半方差的鲁棒在线算法