初学者对于时间复杂度的直观体会以及对递归调用数数的心得
来源:互联网 发布:大数据 公交线路优化 编辑:程序博客网 时间:2024/05/06 20:04
作为一个初学数据结构和算法的新手小白,经常在各种有关算法的书中看到时间复杂度以及空间复杂度的相关概念,并且还被要求会计算相应算法的时间复杂度,但是,作为一个初学者,虽然有相关的概念,但是在日常学习的算法里很少有能直接体现不同算法产生结果所需要时间的差异,故此这里给出两个今天本人自己遇到的,直观体现算法复杂度的一个简单问题的两个不同算法。
问题:调和级数不等式
对指定的的正数x,y(2<x<y),试求满足下面调和级数不等式的正整数m的取值范围:x<1+1/2+1/3+1/4+1/5+...1/m<y
下面是两种算法的代码,可运行:
#include<iostream>#include<math.h>using namespace std;void TiaoHe(){int x, y,m=1;cin >> x; cin >> y;double s = 0;while (s <= x){s = s + 1.0 / m++;}while (s < y){s = s + 1.0 / m++;}cout << m << endl;}void TiaoHe1()//时间复杂度过高,导致短时间内无法出现结果{int x, y;cin >> x;cin >> y;int m = 1;double s = 0;while (s < x){s = 0;for (int i = 1.0; i <= m; i++){s += 1.0 / i;}m++;cout << s<<endl;}while (s < y){s = 0;for (int i = 1.0; i <= m; i++){s += 1.0 / i;}m++;cout << s << endl;}cout << m << endl;}int main(){TiaoHe1();return 0;}
在上述代码中,TiaoHe()函数中只运用了两个while 循环,而在TiaoHe1()函数里while循环里还嵌套了for循环导致算法的时间复杂度远高于前一个算法,这就导致原本在第一个算法中需要一两秒就可以得出的结果在算法二中需要5分多钟,从这就能直观的展现不同算法的时间复杂度的问题,对未来的学习有一定的帮助
Ps(在今天的学习中还总结了在通过递归调用来数数的时候,通常递归的函数必须在返回语句中也就是return 语句中。
例如在二叉树中求叶子节点的个数:
int BiTreeClass::Countleaf(BiTree *bt){if (bt == NULL)return 0;if (bt->lc == NULL&&bt->rc == NULL){return 1;}return(Countleaf(bt->lc) + Countleaf(bt->rc));}
阅读全文
0 0
- 初学者对于时间复杂度的直观体会以及对递归调用数数的心得
- java初学者对递归调用的理解
- 对一个简单递归的 时间复杂度的分析
- 递归调用与时间复杂度的学习总结
- 递归时间复杂度的分析
- 递归算法的时间复杂度
- 递归算法的时间复杂度
- 递归算法的时间复杂度
- 递归树求取递归的时间复杂度
- 对fflush(stdin)功能以及实际应用的个人体会,对初学者应该挺有用
- 对于递归调用的理解
- 递归式的时间复杂度的计算
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度分析
- 估算递归问题的时间复杂度方法
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度求解
- JS对象(Date Math)
- error ==Error Domain=NSURLErrorDomain Code=-1009
- 【自学oracle】jdbc直连oracle测试类
- Linux SPI 子系统驱动笔记之Linux spi设备驱动与SPI控制器驱动的匹配问题
- Linux常用命令
- 初学者对于时间复杂度的直观体会以及对递归调用数数的心得
- QT 无法链接动态库 dyld library not loaded ... libhdf5.100.dylib
- hdu 1496 Equations hash 暴力+hash
- 线程安全与可重入函数
- 自己动手做数据库客户端: BashSQL开源数据库客户端
- Redis启动、停止、查看
- 欢迎使用CSDN-markdown编辑器
- JAVA泛型
- Java的LockSupport.park()实现分析