C# 数据结构之嵌套加法、嵌套乘法

复杂性度量问题

1.大O复杂度:嵌套加法

找出以下代码片段的 Big O 复杂度。

using System; 
namespace Chapter_1
{
    class Challenge_1
    {
        static void Main(string[] args)
        {
            int n = 10;
            int sum = 0;
            float pie = 3.14F;
            for (int i = 0; i < n; i += 3) 
            {  
                Console.WriteLine(pie);       
                for (int j = 0; j < n; j += 2) 
                {    
                    sum += 1;        
                    Console.WriteLine(sum);   
                }
            }
        }
    }
}

解决方法及说明

O(n²)

在外循环的第 11 行,int i=0;运行一次。

i<n;被执行 (n/3)+1 次,并且i+=3被执行了 n/3
次。

在内部循环中,int j=0;总共执行 (n/3) 次。j<n;执行 (n/3) * ((n/2) +1) 次,j+=2并被执行 (n/3) * (n/2) 次。

2.大O复杂度:嵌套乘法

找出以下代码片段的 Big O 复杂度。

using System; 
namespace Chapter_1
{
    class Challenge_6
    {
        static void Main(string[] args)
        {
            int n = 10;
            int sum = 0;
            float pie = 3.14f;
            for (int i = 0; i < n; i++)
            {
                int j = 1;
                Console.WriteLine(pie);
                while (j < i)
                {
                    sum += 1;
                    j *= 2;
                }
            }
            Console.WriteLine(sum);
            return;
        }
    }
}

将循环变量乘以/除以常数的循环语句需要 logk n 时间,因为循环运行了很多次。在外循环中,循环变量2在每次迭代中乘以。因此,外循环运行 O(log2 n) 次。

内循环运行counter次数而不是n次数。第counter一次迭代中的值是 1,然后是 2,然后是 4,然后是 8,依此类推,直到 2^k 使得 (2^k) < n。当您counter对外循环的所有迭代的值求和时,内循环将运行:

1+2+4+8+ …+(2^k) 次。

您将使用几何级数来计算此值。为了使这个计算更简单,您必须假设 2^k = n。

(2⁰)+(2¹)+(2²)…+(2^k) = 2^(k+1)-1

(2^k)(2¹) — 1

用 n 代替 2^k 你得到:

= 2n-1

看起来内循环总共运行了 2n-1 次(考虑到外循环的所有迭代),但请记住,当 n>(2^k) 时,您假设 n = 2^k。实际上,内部循环运行的次数少于 2n-1 次,但您可以将其视为上限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杞人忧天abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值