【algo&ds】0.数据结构和算法入门

时间:2019-11-17 17:08:00   收藏:0   阅读:98

解决问题方法的效率,跟数据的组织方式有关

解决问题方法的效率,跟空间的利用效率有关

解决问题方法的效率,跟算法的巧妙程度有关

什么是数据结构

抽象数据类型

只描述数据对象集和相关操作集“ 是什么”,并不涉及 “ 如何做到”的问题

举例:“矩阵”的抽象数据类型定义

什么是算法

什么是好的算法

空间复杂度举例

场景:打印1到N

代码如下:

void PrintN ( int N )
{ 
    if ( N ){
        PrintN( N – 1 );
        printf(“%d\n”, N );
    }
    return;
}

上述代码通过递归思想来打印1到N,看似好像没有定义临时变量,但其实,每一次递归调用都需要耗费内存来维护当前函数的执行状态,一直到N为0时开始一层层往回执行。当N足够大时,内存显然是不够用的。

时间复杂度举例

场景:多项式如下

技术分享图片

给定任意的x,求结果

一般的思路

//其中n表示多项式的项数,a表示每一项对应的系数
//这里假定每一项的系数就是i
double f1( int n, double a[], double x )
{ 
    int i;
    double p = a[0];
    for ( i=1; i<=n; i++ )
        p += (a[i] * pow(x, i));
    return p;
}

这个算法是最直观的,直接表示出通项公式,然后利用公式求和,最终的时间复杂度为n的平方

好的算法

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

通过提取多项式,化简之后,时间复杂度减小为n

常见时间复杂度

技术分享图片

原文:https://www.cnblogs.com/ericling/p/11876945.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!