【问题标题】:Number of Primitive operations in IF StatementIF 语句中的基本操作数
【发布时间】:2018-03-11 13:41:29
【问题描述】:

我是算法设计和分析的新手。我有一个嵌套循环和 if 语句。我无法确定 if 语句中正在执行的原始操作。声明如下:

for (i=0;i<n;i++)
 for(j=0;j<n;j++)
   if(i!=j and A[i]==A[j])
      duplicate=true
      break;
 if(duplicate)
   break;

我正在确定 if 语句中的操作数如下:

Accessing array element 2 Times
comparing i and J
Comparing A[i] and A[j] 
Comparing AND Operator

这一切都进行了 N 次。我猜测 if 语句中原始操作的数量是否正确?如果没有,请帮我纠正这个问题。谢谢

【问题讨论】:

  • 你应该添加一个语言标签,但是这样写,外层循环只会运行一次;最后一个break 将在第一次通过后退出。它不“知道”if 测试的结果——您必须在外循环中检查 duplicate 以决定是否中止外循环。
  • @McGuireV10 抱歉。我忘记了一个声明。请再看一遍问题。
  • 我假设第一个if 下面的两个语句实际上应该在if 内?
  • 这就是我问语言应该是什么的原因。尽管通过这个简单的示例很容易猜到。但是,是的,Jamshaid,这就是我要说的。
  • @McGuireV10 虽然这很容易。但正如我之前所说,我是分析新手,这就是为什么我很困惑,如果 i != j 在这种情况下出错,将执行多少操作。或者如果 和 的两边都为真,那么要计算多少。

标签: algorithm array-algorithms


【解决方案1】:

从技术上讲,我们无法确定这会发生多少次,因为它取决于数组的内容。一旦找到重复项,整个事情就终止了。我们必须查看从 A[0]A[n-1] 的所有元素的完整内容,才能提供准确的数字。

可以说的是,最多A[] 中没有重复),整个代码 sn-p 将运行n2 次。因此,其余部分假定没有重复:

  • 比较ij

这种比较将发生n2 次(同样,假设没有重复到 break 循环)。

  • 访问数组元素 2 次​​li>
  • 比较AND运算符
  • 比较A[i]A[j]

这些其他操作仅在i != j 为真时发生,因为大多数现代语言“短路”。当第一个条件失败时(换句话说,当ij 相同时)if 条件的其余部分将被忽略。 AND 永远不会被处理,不会访问数组元素,也不会比较数组元素。

因此,这些将运行n2-n 次。 -n 是因为每个 j 循环将始终与 i 迭代器匹配一个值,从而使 if 条件的其余部分短路。

我将假设一种类似 C 的语言并正确格式化代码,就好像这是 C# sn-p:

// n and A[] initialized elsewhere
bool duplicate = false;
for(int i = 0; i < n; i++)
{
    for(int j = 0; j < n; j++)
    {
        if(i != j && A[i] == A[j])
        {
            duplicate = true;
            break;
        }    
    }
    if(duplicate)
    {
        break;
    }
}

【讨论】:

  • 那我应该在我的分析中使用哪一个?它应该是 N^2-n 还是 n^2?
  • 两者都适用。正如在答案中,i != j 比较是 n^2 但其他三个操作是 n^2-n ... 假设语言短路(这就是为什么我们一直问你是什么语言'重新使用——但大多数都是短路的,所以这是一个安全的假设)。
  • 所以我应该使用这两种情况,并为每种语言的复杂性生成单独的方程式,这些语言使用短路技术,哪些不评估短路技术?
  • 您可以这样做,但这是技术问题,您可能可以安全地假设会发生短路。这些天来,您可能只会遇到非常简单的自定义脚本语言之类的全面评估。但如果没有短路,所有操作都是n^2
  • 好的。 if(duplicate) 语句呢?它会运行 n 次,因为它不是内部循环的一部分吗?
猜你喜欢
  • 2021-01-27
  • 2020-02-24
  • 2019-09-07
  • 2013-02-20
  • 1970-01-01
  • 2017-01-12
  • 2011-09-23
  • 2021-02-26
相关资源
最近更新 更多