复杂性度量问题

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 次,但您可以将其视为上限。

最新文章

  1. mybatis实战教程(mybatis in action)之一:开发环境搭建
  2. Java的动态绑定机制
  3. UNIX网络编程-Poll模型学习
  4. java JedisUtils工具类
  5. 2015-2016-2 《Java程序设计》项目小组博客
  6. SimPholders Xcode快速访问沙盒
  7. 硬盘缓存的最佳方案,DiskLruCache完全解析
  8. python处理ajax请求
  9. DataGrid参数
  10. [学习笔记]设计模式之Factory Method
  11. jdk配置环境变量(windows)
  12. [MVC4-基礎] 使用DataAnnotations+jQuery進行表單驗證
  13. 转: Windows如何打开和使用事件查看器管理计算机
  14. python3.x中如何实现print不换行
  15. python学习:调用其他函数
  16. html_Dom
  17. Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins
  18. 学习笔记TF044:TF.Contrib组件、统计分布、Layer、性能分析器tfprof
  19. ajax 删除数据无刷新
  20. Python基础(4)列表、元组、字符串、字典、集合、文件操作

热门文章

  1. JZOJ 4872.集体照
  2. ubuntu 一键安装lnmp环境
  3. PHP封装自定义函数function
  4. MySQL索引的基本理解
  5. pat乙级 1020 月饼
  6. ImGui渲染3d数据的方法
  7. 第三周作业-N67044-张铭扬
  8. CLIP 改进工作串讲(下)学习笔记
  9. 安装pytorch报错 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
  10. charles证书安装-客户端证书