找到 no.s 最大值的更好方法是什么?
Which is a better way of finding the max of no.s?
编写程序以在 c/C++ 中查找 4 no.s 的最大值的更好方法是:
- 使用第五个变量并将其与所有输入进行比较
- 使用 max() 函数
- 并使用 if
比较输入
或建议任何其他方法,如果它有解决问题的更好方法(就 space 和时间复杂度而言)
在超过 4 个变量的情况下,相同的算法方法仍然是最好的吗?
更好的是一个失去的术语。正如评论中指出的
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);
}
}
}
对于大量元素,标准库具有 std::max_element
算法,该算法对 N
元素进行 max(N-1, 0)
比较,这是理论上的最小值,即使是 4 个元素。
实际上,它会像您的方法 1 一样遍历所有元素,但如果 N
是 2 的幂(您的方法2)。某些优化编译器甚至可能展开循环并生成复杂的 if
语句链(您的方法 3)。
在评论中,@NathanOliver 给出了 C++11 风格的解决方案 max({a,b,c,d})
(仅适用于 constexpr
上下文)。但在 C++1z 中,std::max_element
也将变为 constexpr
,因此它将成为完全通用的解决方案,无论大小,运行时还是编译时。
TL;DR:不要想太多,使用可证明工作量最少的标准库。
编写程序以在 c/C++ 中查找 4 no.s 的最大值的更好方法是:
- 使用第五个变量并将其与所有输入进行比较
- 使用 max() 函数
- 并使用 if 比较输入
或建议任何其他方法,如果它有解决问题的更好方法(就 space 和时间复杂度而言)
在超过 4 个变量的情况下,相同的算法方法仍然是最好的吗?
更好的是一个失去的术语。正如评论中指出的
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);
}
}
}
对于大量元素,标准库具有 std::max_element
算法,该算法对 N
元素进行 max(N-1, 0)
比较,这是理论上的最小值,即使是 4 个元素。
实际上,它会像您的方法 1 一样遍历所有元素,但如果 N
是 2 的幂(您的方法2)。某些优化编译器甚至可能展开循环并生成复杂的 if
语句链(您的方法 3)。
在评论中,@NathanOliver 给出了 C++11 风格的解决方案 max({a,b,c,d})
(仅适用于 constexpr
上下文)。但在 C++1z 中,std::max_element
也将变为 constexpr
,因此它将成为完全通用的解决方案,无论大小,运行时还是编译时。
TL;DR:不要想太多,使用可证明工作量最少的标准库。