当前位置: 首页 > 面试题库 >

大O符号作业-代码片段算法分析?

郁烨
2023-03-14
问题内容

对于作业,我得到了以下8个代码段,以分析并给出运行时间的Big-Oh表示法。有人能告诉我我走的路是否正确吗?

//Fragment 1
for(int i = 0; i < n; i++)
    sum++;

我在想片段1的O(N)

//Fragment 2
for(int i = 0; i < n; i+=2)
    sum++;

片段2也为O(N)

//Fragment 3
for(int i = 0; i < n; i++)
    for( int j = 0; j < n; j++)
        sum++;

片段3的O(N ^ 2)

//Fragment 4
for(int i = 0; i < n; i+=2)
    sum++;
for(int j = 0; j < n; j++)
    sum++;

片段4的O(N)

//Fragment 5
for(int i = 0; i < n; i++)
    for( int j = 0; j < n * n; j++)
        sum++;

片段5的O(N ^ 2),但是n * n让我有点失望,所以我不太确定

//Fragment 6
for(int i = 0; i < n; i++)
    for( int j = 0; j < i; j++)
        sum++;

片段6也为O(N ^ 2)

//Fragment 7
for(int i = 0; i < n; i++)
    for( int j = 0; j < n * n; j++)
        for(int k = 0; k < j; k++)
            sum++;

片段7的O(N ^ 3),但n * n再次让我失望

//Fragment 8
for(int i = 1; i < n; i = i * 2)
    sum++;

片段8的O(N)


问题答案:

我认为片段5是O(n ^ 3),类似地,片段7是O(n ^ 5)*。对于片段8,它看起来也像O(log(n))。

对于n * n问题,您必须执行循环主体n * n次,因此它将是O(n ^
2),然后将其与其他代码的顺序进行复合。片段8实际上使计数器加倍而不是增加计数器,因此问题越大,您要做的额外工作就越少,所以它是O(log(n))

*编辑: 片段7是O(n ^ 5),而不是我以前认为的O(n ^ 4)。这是因为j 和k 都从1变为n * n。对不起,我没早点听说。



 类似资料:
  • 下面的代码是一个java方法,它遍历一个for循环,每次都创建一个新数组。我相信没有新数组实例化的代码是O(N),但有了新数组声明,我不确定。

  • 当我们试图通过执行时间来表征算法的效率时,并且独立于任何特定程序或计算机,重要的是量化算法需要的操作或者步骤的数量。选择适当的基本计算单位是个复杂的问题,并且将取决于如何实现算法。对于先前的求和算法,一个比较好的基本计算单位是对执行语句进行计数。在 sumOfN 中,赋值语句的计数为 1($$theSum = 0$$) 加上 n 的值(我们执行 $$theSum=theSum+i$$ 的次数)。我

  • 本文向大家介绍Lua操作字符串的5个代码片段分享,包括了Lua操作字符串的5个代码片段分享的使用技巧和注意事项,需要的朋友参考一下 1.匹配字符串中的数字、字母和下划线 2.替换字符串中的指定字符 3.判断字符串中是否有目标字串 4.从文件的绝对路径中获取到文件名 5.去掉字符串中括号内的内容,并去掉收尾的空格

  • 自动分片算法 取模分片算法 类型:MOD 可配置属性: 属性名称 数据类型 说明 sharding-count int 分片数量 哈希取模分片算法 类型:HASH_MOD 可配置属性: 属性名称 数据类型 说明 sharding-count int 分片数量 基于分片容量的范围分片算法 类型:VOLUME_RANGE 可配置属性: 属性名称 数据类型 说明 range-lower long 范围下

  • 我在做关于Leetcode上大多数水问题的容器 问题: 给定n个非负整数a1,a2。。。,an,其中每个代表坐标(i,ai)处的一个点。绘制n条垂直线,使线i的两个endpoint位于(i,ai)和(i,0)。找到两条线,这两条线与x轴一起构成一个容器,使容器包含最多的水。 注意:容器不能倾斜,n至少为2。 问题链接:https://leetcode.com/problems/container-

  • 我在读一本教科书,上面写着: 必须注意机器代码如何区分有符号和无符号值。与C不同,它不将数据类型与每个程序值相关联。相反,它在这两种情况下大多使用相同的(汇编)指令,因为许多算术运算对于无符号和二补码算术具有相同的位级行为。 我不明白这意味着什么,有人能给我举个例子吗?