【问题标题】:How many times is the process command repeated in the code snippet? Why?代码片段中流程命令重复了多少次?为什么?
【发布时间】:2021-04-21 20:24:14
【问题描述】:

这段sn-p的代码与具体语言无关,实际上是关于两个四循环对最终结果的影响。

For(int i=0;i<n-i;i++)
  for(int i=0;i<n-i;i++)
    process;

“进程”命令在代码中重复了多少次?
为什么?

【问题讨论】:

  • 这不是我所知道的任何语言的语法,它在两个循环中使用相同的迭代变量,尽管可能不会与局部范围冲突。取决于可以允许并产生有趣效果或被禁止的语言。这使得这个问题很难回答。请澄清。
  • 这段sn-p的代码与具体语言无关,实际上是关于两个四循环对最终结果的影响

标签: algorithm data-structures computer-science timing


【解决方案1】:

假设

  • Forfor 的拼写错误
  • process; 实际上是语句的允许语法
  • 内部int i创建一个与外部i不冲突的局部变量
  • 所有内部i引用同一个变量

然后两个循环将迭代直到2*i &lt;= n,即 n/2 次,给或取 1 为奇数 n。 嵌套和独立(参见上面的假设)将导致 process; 被执行 (n * n) / 4 次。

【讨论】:

    【解决方案2】:

    根据1 保持所有假设不变,我们可以概括为以下小数学版本。

    Number of times "process" command repeated = ceil(n/2) * ceil(n/2)
    

    这个结果不分偶数或奇数。让我解释一下,当我们尝试解决循环条件 i 中给出的不等式时,它给出了 i 。如果我们用偶数代替 n,那么两个循环都会运行 n/2 次。对于奇数(比如 11),如果我们仔细观察内循环,那么它将运行从 0 开始的所有整数,包括 5(外循环类似),并且它运行的总次数为 6。另一方面,如果该数字为 10,则根据循环条件,循环不能运行 5 次,并且它运行的总次数为 5。现在来到我们的条件 i ,把 11 和 10 放在一起,结果分别是 5.5 和 5。因此,通常循环运行的次数是 ceil(n/2)

    【讨论】:

    • 虽然这看起来正确且有用,但您可以提供一些额外的解释。
    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多