算术分析的计数比较

时间:2014-11-13 16:51:11

标签: algorithm

让我们说我正在分析算法,我想计算比较。

假设这样的结构:

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
  ...
}

这是对的吗?

2 个答案:

答案 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等于多个值呢?