首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间复杂度

时间复杂度
EN

Stack Overflow用户
提问于 2016-03-16 16:32:04
回答 2查看 105关注 0票数 0

我正试图找出这些程序的时间复杂性,但我不确定它们是否好。

我想这是O(n)

代码语言:javascript
复制
static void P1(int n ){
   for (int i=1; i<=n; i++) {
      Procedure();
}

我想这是O(n^2)

代码语言:javascript
复制
static void P2(int n) {
   for(int i=1; i<=n; i++) 
    for(int j=1; j<=n; j++)
      Procedure();
}

O(n)+O(n)

代码语言:javascript
复制
static void P3(int n) {
   for (int i = 1; i <= n; i++)
     Procedure();
   for (int i = 1; i <= n; i++)
     Procedure();
}

100+n+100?

代码语言:javascript
复制
static void P4(int n) {
   for ( int i = 1; i <= 100; i++)
     for (int j = 1; j <= n; j++)
       for (int k = 1; k <= 100; k++)
         Procedure();
}

0(n*i)?

代码语言:javascript
复制
static void P5(int n) {
   for ( int i = 1; i <= n; i++)
     for (int j = 1; j <= i; j++)
       Procedure();
}
代码语言:javascript
复制
static void P6(int n) {
   for (int i = 1; i <= n/2; i++)
     for ( int j = 1; j <= n/4; j++)
       for (int k = 1; k <= n/8; k++)
         Procedure();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-16 16:43:19

如果过程()是O(1),那么:

我认为这是O(n) 正确的

代码语言:javascript
复制
static void P1(int n ){
   for (int i=1; i<=n; i++) {
      Procedure();
}

我认为这是O(n^2) 正确的

代码语言:javascript
复制
static void P2(int n) {
   for(int i=1; i<=n; i++) 
    for(int j=1; j<=n; j++)
      Procedure();
}

O(n)+O(n) 正确,但O(n+n)=O(2n)=O(n)

代码语言:javascript
复制
static void P3(int n) {
   for (int i = 1; i <= n; i++)
     Procedure();
   for (int i = 1; i <= n; i++)
     Procedure();
}

100+n+100?false,它被乘以: O(100*n*100)=O(n)

代码语言:javascript
复制
static void P4(int n) {
   for ( int i = 1; i <= 100; i++)
     for (int j = 1; j <= n; j++)
       for (int k = 1; k <= 100; k++)
         Procedure();
}

O(n*i)?,您不能使用i,它没有确切的值。如果你看看内环执行了多少次,那就是1+2+3+4+...+n-3+n-2+n-1,也就是n*(n-1)/2,你可以把它乘以:n*(n-1)/2=n^2/2-n/2,它是渐近的n^2/2-n/2=Theta(n^2)

结果是O(n^2)

代码语言:javascript
复制
static void P5(int n) {
   for ( int i = 1; i <= n; i++)
     for (int j = 1; j <= i; j++)
       Procedure();
}

n/2 * n/4 * n/8 = n^3/64 = O(n^3)

代码语言:javascript
复制
static void P6(int n) {
   for (int i = 1; i <= n/2; i++)
     for ( int j = 1; j <= n/4; j++)
       for (int k = 1; k <= n/8; k++)
         Procedure();
}
票数 2
EN

Stack Overflow用户

发布于 2016-03-29 12:05:07

时间复杂度

代码语言:javascript
复制
static void P3(int n){
   for (int i = 1; i <= n; i++)
     Procedure();
   for (int i = 1; i <= n; i++)
     Procedure();
}

可以写成O(2n)的函数,因为我们需要消除常量,它变成了O(n)

时间复杂度

代码语言:javascript
复制
static void P4(int n) {
   for ( int i = 1; i <= 100; i++)
     for (int j = 1; j <= n; j++)
       for (int k = 1; k <= 100; k++)
         Procedure();
}

100+n+100 => O(n*100*100) => O(n)

时间复杂度

代码语言:javascript
复制
static void P6(int n) {
   for (int i = 1; i <= n/2; i++)
     for ( int j = 1; j <= n/4; j++)
       for (int k = 1; k <= n/8; k++)
         Procedure();
}

是O(n^3)

请记住,我们不是在计算使用时间复杂度执行的no.of指令。大O只是告诉我们的执行时间是如何随着输入的增加或减少而变化的。

考虑阅读时间复杂度

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36041585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档