确定来自给定数字集的数字中的任何一个的最有效方法是零
what is the most efficient way to determine if any one of the number from given set of numbers is zero?
在我的项目中,我只有在特定集合中的一个或多个数字为零时才必须执行某些操作。我希望这张检查是有效的检查,并且不想执行多个操作。
例如。如果有10个元素,我需要在获得最终答案之前执行操作后执行操作
var_and= A1 && A2;
var_and=var_and && A3;..
.
.
var_and=var_and && A10;
这是(?)的组装代码。
有更好的解决方案吗?
最有效的方法是最明确的
std::any_of(v.begin(),v.end(),[](int x) { return x==0; });
一些编译器甚至可以对其进行矢量化,因此很难进一步优化它。
,但这里最重要的是,您要节省可能会浪费时间来计算汇编指令(甚至几乎没有意义)以及代码潜在读者的时间。
完成整个程序后,您可以对其进行介绍并确定瓶颈。在不太可能的情况下,这一行是其中之一,您必须弄清楚到底发生了什么 - 缓存错过,IO,错误的分支预测 - 并解决该特定问题。
另一个接近选项是
std::find(v.begin(),v.end(),0)!=v.end();
要指出的第一件事是"最有效"是在情人眼中。你是说最快吗?最小的代码空间?最简单的维护?
如果您的编译器和硬件支持向量操作,我会说取集合的产品,如果它等于零,您知道至少一个元素为零。
所以也许我错过了一些东西 - 以下内容似乎太简单了 - 但是这会做您想要的吗?
bool has_a_zero(int *values, int n) {
while (n--) {
if (!*values++) return true;
}
return false;
}
如果不够快,您可以做一些技巧,例如一次进行循环以一次进行n个测试(例如Duff的设备)。或者,如果您的一组值具有带外值,则可以使用它来终止循环而不是操纵额外的寄存器。
但是,尽管如此,您需要更多地解释"最有效"的含义。
相关文章:
- 最高有效数字侧的第N位
- 无符号的 int 到有效数字
- 如何在C++中有效地将数字值重新分配给字符数组
- 将 C 函数转换为 C++ 以检查数字是否有效
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 如何知道文本文件中的输入是否是 C++ 中的有效数字
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- 如何以更有效的方式检查一个数字是否是素数?
- 有效创建数字签名的正确方法是什么?我可以使用DSA_sign_setup()吗?
- 如何在整数数组中有效地存储大量数字?C++
- 查看数字是否包含在未排序的双数字间隔内的最有效方法?
- 在手臂霓虹灯中有效地重新洗牌和组合 16 个 3 位数字
- 如何有效地找到数字流中元素的等级
- 在向量中找到连续数字的更有效方法
- 我可以在移动平台上有效地使用用C/C 编写的数字算法
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- C++:有哪些常规方法可以使代码更有效地用于大数字
- 更有效的方法来制作数字记忆程序
- CIN >> 在较大的数字下失败,但对较小的数字有效?
- 使用一系列数字有效地初始化 std::set