美文网首页
数据结构MOOC | 0321 数据结构/算法-1.2

数据结构MOOC | 0321 数据结构/算法-1.2

作者: zilla | 来源:发表于2019-03-21 23:10 被阅读0次

想了一想,emmmm还是接着写一点记录😊
虽然会额外消耗点时间,但我又不是为了赶进度哈哈。码字有点愉快而且方便回顾(OneNote贴代码的体验不大好诶 是我打开方式有误?)

比较循环和递归耗时

输出1~N
递归:在打印N前,先打印完1~N-1 空间复杂度递归调用栈 O(n) 时间O(n)
常规实现空间复杂度O(1) 时间O(n)

clock函数 头文件time.h
#include <cstdio>
#include <ctime>
clock_t start, stop;
double duration;
void PrintN(int N){
    for (int i = 1; i <= N; ++i) {
        printf("%d\n",i);
    }
}

void PrintN_re(int N){
    if(N){
        PrintN_re(N-1);
        printf("%d\n",N);
    }
}
int main() {
    printf("%d", CLOCKS_PER_SEC);
    start = clock();
    PrintN(260000);
    stop = clock();
    duration = (double)(stop-start)/CLOCKS_PER_SEC;

    start = clock();
    PrintN_re(260000); //最大栈深度差不多这个数??? 手动二分hhhhh
    stop = clock();
    printf("duration 1 : %lf sec\n", duration);
    duration = (double)(stop-start)/CLOCKS_PER_SEC;
    printf("duration 2 : %lf sec\n", duration);
    return 0;
}
比较不同实现耗时
  • 计算多项式函数在定点处值
    加减远快于乘除,因此此处时间复杂度主要看乘除
#include <cstdio>
#include <ctime>
#include <cmath>

double data[1000] = {1.0};
double res1, res2;
clock_t start, stop;
double duration;

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

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

int main() {
//    printf("%d", CLOCKS_PER_SEC);
    for (int i = 1; i < 1000; ++i) {
        data[i] = data[i - 1] * 1.01;
    }
    start = clock();
    res1 = f1(1000, data, 1.0);
    stop = clock();
    duration = (double) (stop - start) / CLOCKS_PER_SEC;

    start = clock();
    res2 = f2(1000, data, 1.0);
    stop = clock();
    printf("res1 %lf  duration 1 : %lf sec\n", res1, duration);
    duration = (double) (stop - start) / CLOCKS_PER_SEC;
    printf("res2 %lf  duration 2 : %lf sec\n", res2, duration);
    return 0;
}

//        res1 2095815.563781  duration 1 : 0.000013 sec
//        res2 2095815.563781  duration 2 : 0.000004 sec

对运行时间小于一个tick的函数,可以跑多次(放进循环),测总时间。


最关心算法最坏情况复杂度(此外还有平均复杂度)

相关文章

  • 数据结构MOOC | 0321 数据结构/算法-1.2

    想了一想,emmmm还是接着写一点记录?虽然会额外消耗点时间,但我又不是为了赶进度哈哈。码字有点愉快而且方便回顾(...

  • 长期计划安排

    一、数据结构与算法分析 参考书 数据结构与算法分析:C语言描述 算法(第四版) 算法导论 课程相关 MOOC 邓俊...

  • TsingHuaDSA-栈和队列

    该文章为清华大学数据结构与算法设计MOOC课程读书笔记. 1. 栈 1.1 接口 LIFO后进先出 1.2 栈实现...

  • TsingHuaDSA-树

    该文章为清华大学数据结构与算法设计MOOC课程读书笔记. 1. 数据结构的静态操作与动态操作 静态操作(stati...

  • #自学笔记

    1.学c/c++/python 2.《数据结构》 mooc里陈越老师的《数据结构》课程 3.算法 4.计算机组成,...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • TsingHuaDSA-向量

    该文章为清华大学数据结构与算法设计MOOC课程读书笔记. 1. 抽象数据类型 VS 数据结构 2. 向量ADT 2...

  • TsingHuaDSA-绪论

    该文章为清华大学数据结构与算法设计MOOC课程[https://courses.edx.org/courses/c...

  • IOS开发_数据结构

    1、数据结构; 2、算法; 3、数据结构与算法; 1、数据结构; 1.1 概念: 数据结构:数据结构是计算...

网友评论

      本文标题:数据结构MOOC | 0321 数据结构/算法-1.2

      本文链接:https://www.haomeiwen.com/subject/oalhvqtx.html