我想在4个整数变量 i,j,k
和 l
中找到对称性。
这些对称性包括:
- 四个数字相等:XXXX,
- 三个数字相等:XXXY,XXYX,XYXX,YXXX
- 两个数对相等:XXYY,XYXY,XYYX,...
- 一个数对相等,另外两个不同:XXYZ,XYXZ,XYZX,...
- 四个数字互不相同。
所有变量都在一定的非连续范围内运行。我使用嵌套的 if else 语句。第一个 if 检查所有变量是否不相等。如果不是,则属于情况1。下一个 if 检查是否存在任何相等的数对。如果不存在,则属于情况5。下一个 if 检查是否有三个相等的数。如果成立,则属于情况2。否则,最后一个 if 检查是否有两对相等的数。如果成立,则属于情况3,否则属于情况4。
if(!(i==j && j==k && k==l)){
if(i==j || i==k || i==l || j==k || j==l || k==l){
if((i==j && j==k) || (i==j && j==l) || (i==k && k==l) || (j==k && k==l)){ ...//do something
}else{
if((i==j && k==l) || (i==k && j==l) || (i==l && j==k)){
...//do something
}else{
...//do something
}
}
}else{
...//do something
}
}else{
...//do something
}
有更好的方法可以做到这一点吗?我的意思是更好的性能,因为我必须进行数百万次测试。
[0]
是最低的。无论如何,这个问题太广泛了,即使作为算法/伪代码也无法回答,因为它不是一个问题,而是5个不同的问题。此外,优化严重依赖于它是否始终为4个项目或者项目数量应该是可变的。 - Lundinif (i==j) { if (j==k) { if (k==l) { ... } else { ... } } else { if (k == l) {... } else { ... } ....
来最小化比较次数。 - Ctx