关于时间复杂度和空间复杂度的计算

转:https://blog.csdn.net/mr_garfield__/article/details/78762478

时间复杂度: 
一般情况下,算法中基本操作重复的次数就是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用‘o’来表示数量级,给出算法时间复杂度。 
T(n)=o(f(n)); 
它表示随问题规模n的增大,算法的执行时间增长率和f(n)增长率成正比,这称作算法的渐进时间复杂度。而我们一般情况下讨论的最坏的时间复杂度。 
空间复杂度: 
算法的空间复杂度并不是实际占用的空间,而是计算整个算法空间辅助空间单元的个数,与问题的规模没有关系。算法的空间复杂度S(n)定义为该算法所耗费空间的数量级。 
S(n)=o(f(n)) 
若算法执行所需要的辅助空间相对于输入数据n而言是一个常数,则称这个算法空间复杂度辅助空间为o(1); 
递归算法空间复杂度:递归深度n*每次递归所要的辅助空间,如果每次递归所需要的辅助空间为常数,则递归空间复杂度o(n)。

int binary_search(int *a,int size,int value)  //[left,right);
{int left = 0;int right = size;while (left < right){int mid = left + ((right - left) >> 1);if (value > a[mid])left = mid + 1;else if (value < a[mid])right = mid ;elsereturn mid;}return -1;
}
int binary_search1(int *a, int size, int value)//[left,right]
{int left = 0;int right = size - 1;while (left <= right){int mid = left + ((right - left) >> 1);if (value > a[mid])left = mid + 1;else if (value < a[mid])right = mid - 1;elsereturn mid;}return -1;
}

折半查找时间复杂度:

这里写图片描述

假设在n个数中查找,查找第一次个数变为n/2,查找第二次 个数变为 (n/2)/2 依次类推计算第n次时查找的数列长度为(n/(2^x))。设x为查找的次数,最坏情况下查找x次找到 (n/(2^x))=1 
所以查找在n个数查找查找的次数为:x=log n 时间复杂度为:O(log n)(以2为底n的对数) 
空间复杂度:O(1)

//递归实现二分查找
int binary_search2(int *a, int left,int right, int value)
{if (left <= right){int mid = left + ((right - left) >> 1);if (value == a[mid]){return mid;}else if (value > a[mid]){left = mid + 1;return  binary_search2(a, left, right, value);}else{right = mid - 1;return binary_search2(a, left, right, value);}}elsereturn -1;
}
int fibonacci(int a)
{if (a < 2)return a;elsereturn fibonacci(a - 1) + fibonacci(a - 2); 
}

斐波那契的(递归)时间复杂度分析:

这里写图片描述

如图为递归的次数。2^5-16,以此类推,计算第n个斐波那契数是时间复杂度为O(2^n)-O(1) 
即时间复杂度为 O(2^n) 
空间复杂度:递归深度*每次递归所需要的辅助空间所以空间复杂度有为o(n);

//斐波那契数的非递归算法:
int fibonacci1(int a)
{int x=0, y=1, z;if (a < 2)            return a;else{int i = 0;for (i = 2; i <= a; i++)    {                    z = x + y; x = y;y = z;}}return z;
}

时间复杂度O(n) 
空间复杂度O(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

glomosim仿真的运行过程

1 glomosim系统启动的入口是.\main\driver.pc文件中的main()函数。main()函数首先调用parsec_main()函数。parsec_main()函数是parsec运行库函数&#xff0c;我们看不到它的源代码。 2 parsec系统的入口是driver实体。parsec系统启动时首先执行driver实体的代码。driver实体首先…

shiro学习(24):Spring的transaction-manager的用法

<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:tx"http://www.springframework.org/sche…

Spring Boot----SpringBoot整合 Dubbo 和 Zookeeper

下载安装Zookeeper linux 使用docker部署 windows:参考&#xff08;https://blog.csdn.net/ring300/article/details/80446918&#xff09;&#xff0c;下载的zookeeper目录中需要包含lib&#xff08;内置jar包&#xff0c;否则需要自己导入&#xff09; 1、将conf目录下的zoo_…

visual studio 2005 sp1 安装错误解决

要解决此问题, 请按照下列步骤&#xff1a; 1. 单击 开始 单击 运行 &#xff0c; 键入 控件 secpol.msc , 然后单击 确定 。 2. 双击 本地安全策略 。 3. 单击 软件限制策略 。 注意 如果列出, 没有软件限制右键单击 软件限制策略 , 然后单击 新建策略 。 4. 在 对象类…

递归树求解递归算法的时间复杂度

递归算法时间复杂度的计算方程式一个递归方程&#xff1a; 在引入递归树之前可以考虑一个例子&#xff1a; T(n) 2T(n/2) n2 迭代2次可以得&#xff1a; T(n) n2 2(2T(n/4) (n/2) 2) 还可以继续迭代&#xff0c;将其完全展开可得&#xff1a; T(n) n2 2((n/2) 2 2((n/2…

git(4):git安装教程

1首先找到我们下载好的安装包 2打开安装包 3点击next 4点击next 5点击next 6 点击next 7点击next

基于Cairngorm的Silverlight开发 - part3

使用ModelLocator来管理视图 之前只是简单的介绍了一下ModelLocator的用法&#xff0c;在这里要把模型和视图结合起来&#xff0c;通过模型来来控制视图。在Silverlight中我们可以看到所有新建立的xaml都是继承自UserControl&#xff0c;所以在这里更新欢称视图为控件。至此给出…

时间复杂度空间复杂度分析

转发:https://blog.csdn.net/LF_2016/article/details/52453212 时间复杂度&#xff1a; 一般情况下&#xff0c;算法中基本操作重复执行的次数是问题规模n的某个函数f(n)&#xff0c;进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用"O"来表示数量级&#xff…

HDU 1284 钱币兑换问题 (动态规划 背包方案数)

钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15134 Accepted Submission(s): 9117 Problem Description 在一个国家仅有1分&#xff0c;2分&#xff0c;3分硬币&#xff0c;将钱N兑换成硬币有很…

github(5):GitHub的注册与使用(详细图解)

首先,你需要注册一个 github账号,最好取一个有意义的名字&#xff0c;比如姓名全拼&#xff0c;昵称全拼&#xff0c;如果被占用&#xff0c;可以加上有意义的数字. 本文中假设用户名为 chuaaqiCSDN(我的博客名的全拼) 一、gihub账号注册与仓库创建 1. 注册账号: 地址: https…

Hive分区和桶的概念

Hive 已是目前业界最为通用、廉价的构建大数据时代数据仓库的解决方案了&#xff0c;虽然也有 Impala 等后起之秀&#xff0c;但目前从功能、稳定性等方面来说&#xff0c;Hive 的地位尚不可撼动。 其实这篇博文主要是想聊聊 SMB join 的&#xff0c;Join 是整个 MR/Hive 最为…

git学习(6):删除github镜像

怎样删除GitHub上的项目 第一步&#xff1a;双击GitHub的项目workhard(举例) 第二步&#xff1a;确认项目可以删除&#xff0c;双击settings 第三步&#xff1a;找到 Delete this repository按钮并单击 第四步&#xff1a;在弹出的模态框框中输入需要删除的项目名字&#xff…

剧情介绍:“肖申克的救赎”

故事发生在1947年&#xff0c;银行家安迪因为妻子有婚外情&#xff0c;用枪杀死了她和她的情人&#xff0c;因此他被指控枪杀了妻子及其情人&#xff0c;安迪被判无期徙刑&#xff0c;这意味着他将在肖恩克监狱中渡过余生。  阿瑞1927年因谋杀罪被判无期徙刑&#xff0c;数次…

Spring Boot----Dubbo

概述 治理和维护各个分系统 参考官网&#xff1a;http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html &#xff08;可中英文切换&#xff09; 下载安装Zookeeper linux 使用docker部署 windows: 参考&#xff08;https://blog.csdn.net/ring300/a…

hadoop join

在介绍这个实例之前&#xff0c;请各位参考&#xff1a;http://bjyjtdj.iteye.com/blog/1453410。 reduce side join是一种最简单的join方式&#xff0c;其主要思想如下&#xff1a; 在map阶段&#xff0c;map函数同时读取两个文件File1和File2&#xff0c;为了区分两种来源的…

git学习(8):windows系统下VI编辑器的基本使用

vi编辑器是Linux系统下标准的编辑器.而且不逊色于其他任何最新的编辑器.但是在windows系统中如何使用VI编辑器呢&#xff1f; 下面给大家介绍在git环境下的vi编辑器的简单用法和部分命令. 工具原料&#xff1a;git2.7.2, 下载地址&#xff1a;https://git-for-windows.githu…

BUUOJ misc 二维码

一个二维码&#xff0c;扫一下是提示&#xff1a;secret is here 用binwalk看一下&#xff1a; binwalk QR_code.pngDECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 …

IXMLDOMDocument中的load方法返回值有BUG

IXMLDOMDocument中的load方法返回值是否有BUG IXMLDOMDocument中load一个xml文件时&#xff0c;返回值和msdn上说的不符MSDN上说的是&#xff1a;Return ValuesS_OK The value returned if successful. S_FALSE The value returned if the load fails. E_INVALIDARG The val…

hadoop join之map side join

在本例中&#xff0c;我们仍然采用上一例中的数据文件。之所以存在reduce side join&#xff0c;是因为在map阶段不能获取所有需要的join字段&#xff0c;即&#xff1a;同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的&#xff0c;因为shuffle阶段要进行…

git学习(7):创建ssh key时遇到“Bad escape character ‘ygen’.”

问题&#xff1a; 创建ssh key时遇到“Bad escape character ‘ygen’.” image.png $ ssh -keygen -t rsa -C "" Bad escape character ygen. 分析原因&#xff1a;ssh -keygen之间出现了空格&#xff0c;正确命令是没有空格的