IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 小鲤算法之算法时间计算 -> 正文阅读

[数据结构与算法]小鲤算法之算法时间计算

? ? ?小鲤只是一条想要好运的笨鲤鱼o(* ̄▽ ̄*)ブ

你的程序运行了多久呢?怎么看呢?别着急,小鲤为你提供了两个办法?o(^▽^)o?

1.时钟打点

#include"stdio.h"
#include"time.h"
clock_t start,stop;                                  //(1)
void Myfunction(void){            
	                                                 //(2)
}
double duration;
int main()
{
 ......                                              //(3)
  start =clock();
  Myfunction();
  stop =clock();
  duration =((double)stop-start)/CLK_TCK;
 ......                                              //(3)
  printf("%.2f",duration);
  return 0;
}

(1)clock_t是clock()函数返回的变量名;clock()函数在time.h中

(2)这里是你想要测试运行的程序

(3)一些不在测试范围的准备工作或者处理放在这里:

我们来测试下:

item:给定多项式在定点的值:

?

?好了,我们给出两个函数:

double f1(int n,double a[],double x)       //(1)
{
double p=a[n];
for(int i=n;i>0;i--)
p=a[i-1]+x*p;
return p;
}

double f2(int n,double a[],double x)      //(2)
{
double p=a[0];
for(int i=1;i<n;i++)
p+=(a[i]*pow(x,i));
return p;
}

(1)秦九韶公式

(2)一般的多项式加和

这里不做更多的赘述了。但是运行后(请你自己找一个多项式带入)时间都是0.00e

但是这两个函数的时间可不是一样的呀!

想到物理中的累加法了吗??(●′▽`●)

将被测函数重复运行多次,求平均值

于是,我们有了:

#define MAXK  1e7            //(1)
......
for(i=0;i<MAXk;i++){         //(2)
 myfunction();

}
......

这里仅给出循环部分。

(1)宏定义,defne;1e7是科学计数法,等价于十的七次方;

(2)循环MAXK-1次;

有人会问了,小鲤,每次都要这样吗?如果我的数据规模是千万级,甚至是亿万级呢?我的代码再来三个嵌套for循环,我怎么会等到我的电脑给出结果啊

所以,我们更经常使用的是第二种方法,来看程序运行时间

(至于为啥有第一种,他只是你闲的无聊的耍酷工具而已ヽ(○′?`)ノ)

2,时间复杂度

这块内容其实东西不少,但是小鲤怎么忍心让读者大大看什么大O啊,小O啊什么奇怪的符号啊(才不是小鲤懒呢)

总结有这么几点,你会了就🆗了

1.计算你的程序时间复杂度,数据规模都是n(这里的n可以看作一个无穷级数,所以时间复杂度可以看作渐进的)

2,我们最常用的是大o,即

?我们在推导大O阶时,有这样的操作

①不计算常数余项,如+5,-3这样的小项

②抓大放小,如n^{2}+n我们只看n^{2}项,此外我们不看系数,系数常被忽略;

③对于logn,我们不关心它的底数;

?其他你还要注意的:

?学会了吗?

如果我的文章对你有帮助,不要吝惜你的点赞,小鲤希望得到你的支持?(′?`?)

求三连和关注!!!

部分内容来自mooc数据结构(浙大)和算法图解

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 14:04:10  更:2021-12-08 14:04:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/10 2:41:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码