找到其他节点的最快方法
Fastest way to find other node
我有一个三角形类,带有指向节点的指针(n0,n1,n2)。我还有一种方法,可以通过两个节点指针(a,b)返回"其他"节点。当前的实现是:
if ( n0 == a && n1 == b )
{
return n2;
}
else if ( n0 == b && n1 == a )
{
return n2;
}
else if ( n1 == a && n2 == b )
{
return n0;
}
else if ( n1 == b && n2 == a )
{
return n0;
}
else if ( n0 == a && n2 == b )
{
return n1;
}
else if ( n0 == b && n2 == a )
{
return n1;
}
else
{
assert( 0 );
}
return NULL;
有效,但可能不是最好的。分析后,我的程序实际上在此例程中花费了可衡量的时间,因此值得一花一定时间来优化。但是,我对编译器的优化不太熟悉,因此我不确定这是否是多余的。
节点没有特定顺序,因此平均必须执行3.5个化合物比较。
另一种方法是:
if ( n0 == a )
{
if ( n1 == b )
{
return n2;
}
else if ( n2 == b )
{
return n1;
}
return NULL;
}
else if ( n1 == a )
{
if ( n0 == b )
{
return n2;
}
else if ( n2 == b )
{
return n0;
}
return NULL;
}
else if ( n2 == a ) // Theoretically redundant. Kept for safety.
{
if ( n0 == b )
{
return n1;
}
else if ( n1 == b )
{
return n0;
}
return NULL;
}
return NULL;
平均比较简单比较的3.5。这会更快吗?还是编译器使它们相同?
有更快的方法吗?
我知道我可以消除冗余。在第一种情况下,它将平均值降低到3.33化合物比较。在第二种情况下,它将平均值降低到3.0简单比较。
我可以消除所有其他代码,因为代码的每个真实块都包含返回。但是,我真的觉得编译器应该足够聪明,可以照顾自己的任何收获。
与自身固定的任何东西都将为零,因此,如果您给出了三个中的两个,则只需使用n0 ^ n1 ^ n2 ^ a ^ b
即可找到其余的一个。值得解释的评论,但是如果速度很重要,那几乎可以肯定是您最快的选择。
相关文章:
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 比较两个节点坐标的最佳方法是什么?
- 创建静态哨兵节点的正确方法是什么
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- 链接列表的push_front和push_back方法似乎删除了节点
- 从不同的节点插件方法多次调用JS函数
- 如何将按钮添加到节点的属性编辑器面板,该面板调用该节点内的方法?
- 双向链表插入方法实现 - 正在搜索哪个节点
- 从基于矢量的二叉搜索树中删除节点的最佳方法
- 这是在双链表的第一个节点之后插入节点的正确方法吗?
- 使用类创建节点的方法
- 找到其他节点的最快方法
- 在图算法中,确定是否访问节点的最佳方法是什么?
- 节点.JS,C++模块:为什么当我尝试调用本地的长度方法时出现段错误<Array>?
- c ++作业 - 在链接列表代码中初始化节点的正确方法
- 有没有一种方便的方法可以从属性树中删除节点,同时保留其子节点
- C++将节点添加到链表的开头一次后失败.其他方法也有问题
- 从节点数组和边缘向量获取所有子树的最有效方法是什么
- C++ Get 方法不返回指向节点的指针
- C 节点本机扩展调用方法两次