复杂性度量问题

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. 新一代自动化利器-DrissionPage

    熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨selenium.playwright的非标准内核机制,也曾对clicknium引进了新的问题无语,以及接口爬取数 ...

  2. rem自动计算

    写法一: //rem自动计算 (function (designWidth, maxWidth, viewWidth) { var doc = document, win = window, docE ...

  3. OpenLayers入门练习

    一.实验内容 练习OpenLayers的引用形式; 简单地图加载; 控件加载. 二.实验步骤 2.1 ol引用 <!doctype html> <html lang="zh ...

  4. Vue学习笔记之Vue-CLI快速使用

    1. 概述 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 通过 @vue/cli 实现的交互式的项目脚手架. 通过 @vue/cli + @vue/cli-service- ...

  5. Oracle中的sql脚本语言中的循环语句介绍

    --sql脚本语言的循环介绍:--1.goto循环点.declare  x number;begin  x:=0;--变量初始化:  <<repeat_loop>>--设置循环 ...

  6. LeetCode-2055 蜡烛之间的盘子 及库函数 lower_bound 和 upper_bound学习使用

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plates-between-candles 题目描述 给你一个长桌子,桌子上盘子和蜡烛排成一列. ...

  7. ROS librviz库

    1.可视化管理类:rviz::VisualizationManager The VisualizationManager class is the central manager class of r ...

  8. element-ui下表格头部字段hover显示tips信息

    记录一下表格头部加hover之后显示tips信息循环,或单独的el-table-column都可以哦 <el-table-column             prop="name&q ...

  9. shiyansi

    #include <stdio.h> #include <stdlib.h> #define N 1000 int fun(int n,int m,int bb[N]) { i ...

  10. (面试题) 面试官:如何在forEach的循环里使用break

    大家都知道 js 的 forEach里是不能使用break.但是为什么不能在forEach里使用呢?在forEach里使用break 会发生什么呢? 一. 在forEach里使用break 会发生什么 ...