哪个是找到no.s max的更好方法?

时间:2015-09-17 19:23:45

标签: c++ c algorithm time-complexity space-complexity

这是编写程序以在c / C ++中找到最大4个no的更好方法:

  1. 使用第五个变量&将其与所有投入进行比较
  2. 使用max()函数
  3. 并使用if
  4. 比较输入

    或建议任何其他,如果它有更好的方法(在空间和时间复杂性方面)解决问题

    如果超过4个变量,相同的算法方法仍然是最好的吗?

2 个答案:

答案 0 :(得分:2)

对于大量元素,标准库使用std::max_element算法对max(N-1, 0)元素进行N比较,这是理论上的最小值,即使对于4个元素也是如此

在实践中,它会像方法1一样循环遍历所有元素,但如果max是2的幂,它可以执行嵌套N的“淘汰锦标赛”(您的方法2) 。一些优化编译器甚至可以展开循环并生成一个复杂的if语句链(您的方法3)。

在评论中,C ++ 11样式解决方案max({a,b,c,d})由@NathanOliver提供(仅适用于constexpr上下文)。但是在C ++ 1z中,std::max_element也将成为constexpr,因此它将是完全通用的解决方案,无论是小型还是大型,运行时还是编译时。

TL; DR :不要过度思考,使用标准库,它可以证明工作量极少。

答案 1 :(得分:0)

更好的是一个失败的术语。正如评论中指出的那样

max(max(a,b), max(c,d));

非常简洁,但有3个函数调用。它的代码略快一些,但编写代码的代码要多得多:

if (a>b)
{ 
  if (a>c)
  {
     if (a>d)
     {
         return (a);
     }
  }
}

if (b>a)
{ 
  if (b>c)
  {
     if (b>d)
     {
         return (b);
     }
  }
}
if (c>a)
{ 
  if (c>b)
  {
     if (c>d)
     {
         return (c);
     }
  }
}

if (d>a)
{ 
  if (d>b)
  {
     if (d>c)
     {
         return (d);
     }
  }
}