复杂性度量问题

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

C# 数据结构之嵌套加法、嵌套乘法的更多相关文章

  1. ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

    ScrollView 效果 ScrollView 说明 一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo. 主要是重写了GridView和Lsit ...

  2. 蓝桥杯-加法变乘法(java)

    蓝桥杯第六届省赛题目-加法变乘法(java) 题目: 我们都知道:1+2+3+ ... + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+... ...

  3. 加法变乘法|2015年蓝桥杯B组题解析第六题-fishers

    加法变乘法 我们都知道:1+2+3+ ... + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+...+1011+12+...+2728+29+ ...

  4. 加法变乘法——第六届蓝桥杯C语言B组(省赛)第六题

    原创 加法变乘法 我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:1+2+3+...+10*11+12+...+27*28+ ...

  5. c++_加法变乘法

    加法变乘法 我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:1+2+3+...+10*11+12+...+27*28+29+ ...

  6. java 加法变乘法

    加法变乘法 我们都知道:1+2+3+ - + 49 = 1225 (1) 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+...+10*11+12+...+27*28 ...

  7. java实现第六届蓝桥杯加法变乘法

    加法变乘法 题目描述 我们都知道:1+2+3+ - + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+-+1011+12+-+2728+29+- ...

  8. 4.3 Python3进阶-函数嵌套和嵌套调用

    >>返回主目录 源码 # 函数嵌套 def func1(): print("这是外部函数") def func2(): print("这是内部函数1" ...

  9. python利用for..in遍历,while循环嵌套编译九九乘法表的几种模式

    运用for....in...遍历的四种方向的九九乘法表: 左下角: import sysfor i in range(1,10): for j in range(1,i+1): sys.stdout. ...

  10. for循环嵌套练习题or99乘法表

    //输出1-10之间的和 public static void whileTest(){ //定义变量用于存储不断变化的和 int sum = 0; //定义变量,用于记录不断变化的被加数 int x ...

随机推荐

  1. [Ynoi2016] 掉进兔子洞

    \(\text{Solution}\) 莫队配合 \(\text{bitset}\) 发现答案困难的部分在于同一个数在三个区间出现次数的最小值 考虑强行拆开看,用莫队处理出每个区间每个数的出现次数,这 ...

  2. JSP 页面引入静态资源 404 未找到

    jsp 页面引入了 css 文件,部署项目时发现 css 不生效,打开 f12 查看网络,发现请求状态码是 404.导致这个问题的情况大概有以下两种情况: 如果你通过浏览器 f12 查看 link 或 ...

  3. Android:遍历视图

    <LinearLayout android:id="@+id/ques2_layout" android:layout_width="match_parent&qu ...

  4. codeforce B. Creating the Contest

    http://codeforces.com/contest/1029/problem/B 水题真快乐= = 1 public class Main { 2 public static void mai ...

  5. grafana二次开发环境配置(windows10)

    安装说明: 由于在windows环境安装grafana,第一次安装的是8.2.2版本,后端编译时一直报错,故安装了8.1.7 该错误在 grafana 的源码问题中可以找到,但针对 windows 暂 ...

  6. C++分别用顺序栈和链栈实现数制的转换相关代码

    //案例分析:将一个十进制数N转化为八进制数,在计算过程中,使得N模8得到八进制数的各个数依次进栈,//然后将八进制数依次输出,得到八进制数.#include<iostream>#incl ...

  7. python requests库从接口get数据报错Max retries exceeded with url解决方式记录

    问题: session = HTMLSession() r: requests_html.HTMLResponse r = session.get(url=req["url"], ...

  8. 解读gitee上的vue3开源项目,并记录不熟悉的API

    1.vue中的getCurrentInstance: 在Vue3中,getCurrentInstance()可以用来获取当前组件实例: 2.vue中使用mitt实现兄弟组件传值: 在vue3中$on, ...

  9. apk文件查看指纹证书方法

    1. 先将apk文件重命名为zip文件 2. 解压zip到指定一个文件夹下,其中的META-INF/CERT.RSA文件即MD5签名文件 3. cmd下打开窗口,输入如下命令: keytool -pr ...

  10. Cinder 对接本地LVM存储

    系统安装lvm2 yum install lvm2 1.创建 loop 设备 dd if=/dev/zero of=volume_test bs=51200 count=1M 2.挂载loop设备 l ...