让我们说我正在分析算法,我想计算比较。
假设这样的结构:
if (a == b){
...
}
else if (a == c) {
...
}
else if (a == d) {
...
}
else {
...
}
计算比较结果的最佳方式是什么?
我认为这是要走的路:
int compare = 0
compares++; //will always do the first compare
if (a == b){
...
}
else if (a == c) {
compares++; //add another because we got here
...
}
else if (a == d) {
compares += 2; //add 2 because of this one and the previous else if
...
}
else {
compares += 3; //etc
...
}
这是对的吗?
答案 0 :(得分:0)
是的,这是正确的,但你可以使用c omma operator更简洁,更健壮地编写它(假设这是C / C ++ / JS):
if (compares++, a == b){
...
}
else if (compares++, a == c) {
...
}
else if (compares++, a == d) {
...
}
else {
...
}
此外,如果您使用的是C ++(或任何具有运算符重载的语言),您可以使用自定义对象并覆盖比较运算符并在其中进行计数。这样你只需要改变变量的类型而不是代码的其余部分。
答案 1 :(得分:0)
如果您正在分析算法,则应使用Big O并假设最坏的情况。您正试图查看集合中的某个值是否等于另一个值。在最坏的情况下,您将不得不进行 n-1-1比较,因此算法线性增长,其中n是集合中值的数量。因此,您可以将算法归类为 O(n)。
如果您想定量比较,请确保在每个算法中按相同顺序比较值,因为这会改变结果。那么如果a
等于多个值呢?