【数据结构】算法复杂度

今天开始复习DS的内容

1. 数据结构前言

1.1 数据结构

数据结构( Data Structure)是计算机**存储,组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。**没有一种单一的数据结构对所有的用途都管用,所以我们要学习各式各样的数据结构,如:线性表、树、图、哈希等

1.2 算法

算法 (Algorithm):j就是定义良好的计算过程,取一个或一组的值作为输入,并产生一个或一组值作为输出。简单来讲算法就是一系列的计算步骤,用来将输入数据转化为输出结果。

算法的5个特性:有穷性,确定性,可行性,输入、输出

数据结构和算法不分家!!!

2. 算法效率

如何衡量一个算法的好坏呢?

看算法的执行时间,占用空间大小:也就是时间复杂度 和空间复杂度

对于我们的执行时间 :我们得不出具体时间(影响执行时间的因素很多,cpu,编译器等),但是可以能够知道执行时间的量级(n n^2 1...)

2.1 复杂度的概念

一般是从时间和空间两个维度来衡量,即为时间复杂度和空间复杂度

时间复杂度衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行时所需要的额外空间。

由于现在计算机容量已经 极大地发展了,因此我们现在不用特别关注空间复杂度了

摩尔定律:

3. 时间复杂度

计算机科学中,**算法的时间复杂度是一个函数式T(N),定量描述了该算法的运行时间。**时间复杂度是衡量程序的时间效率,而不去计算程序的运行时间:

这个T(N)表示了程序的执行次数,N是输入条件,会影响算法的时间复杂度,影响时间复杂度的条件有:每条语句的执行时间*每条语句的执行次数 由于每条语句的执行时间不确定,即使有差别,也微乎其微,可以忽略不计,因此认为每条语句的执行时间是相同的,时间复杂度受执行次数影响

时间复杂度只能表示输入条件对时间的影响趋势

大O渐进表示法来表示算法的复杂度

3.2 示例

示例1
示例2.
示例3:
示例4:
总结:
示例5:

冒泡排序的时间复杂度

一共n个数据 外层循环 排序n趟 第一趟 要比较n-1次,第二趟比较n-2次·····第n-1次比较1次,1累加到n-1 就是一个等差数列(Sn=n(a1+a2)/2),结果也就是n^2+n / 2 ,这样时间复杂度为n方

示例6:
cpp 复制代码
void func5(int n)
{
    int cnt=1;
    while(cnt<n)
    {
        cnt*=2;
    }
}

时间复杂度为O(log2n) ,底数为2,为一个常数,底数对结果的影响不大,所以可以写成logn

示例7:
cpp 复制代码
//   阶乘
long long Fac(size_t N)
{
    if(0==N)
        return 1;
    
    return Fac(N-1)*N;
}

这是一个函数递归,时间复杂度和空间复杂度都为O(N)

4.空间复杂度

注意:函数运行时所需要的栈空间(存储参数,局部变量,一些寄存器信息等)在编译期间就已经确定好了,因此空间复杂度主要通过函数在运行时显示申请的额外空间来确定

示例1:

比如上面的冒泡排序 的空间复杂度,函数栈帧在编译期间已经确定好了,只需要关注函数运行时额外申请的空间,

示例2:

前面阶乘递归的

每次进入循环都要重新创建一次函数栈帧,需要额外申请N-1个空间,所以空间复杂度也为O(N)

5.常见复杂度对比

相关推荐
小poop12 小时前
轮转数组:从暴力到最优,一题掌握算法复杂度分析
数据结构·算法·leetcode
wabs66614 小时前
关于图论【卡码网104.建造最大岛屿的思考】
数据结构·算法·图论
冻柠檬飞冰走茶15 小时前
PTA基础编程题目集 7-15 计算圆周率(C语言实现)
c语言·开发语言·数据结构·算法
冻柠檬飞冰走茶19 小时前
PTA基础编程题目集 7-13 日K蜡烛图(C语言实现)
c语言·开发语言·数据结构·算法
夜不会漫长19 小时前
数据结构:栈和队列(1)
数据结构
青山木20 小时前
Hot 100 --- 电话号码的字母组合
java·数据结构·算法·leetcode·逻辑回归
闪电悠米21 小时前
力扣hot100-240.搜索二维矩阵2-单调性剪枝详解
数据结构·算法·leetcode·矩阵·哈希算法
雨落在了我的手上21 小时前
Java数据结构(九):栈和队列
java·开发语言·数据结构
春生野草21 小时前
个人笔记--大顶堆和基数排序
java·数据结构·算法
paeamecium1 天前
【PAT甲级真题】- Rational Sum (20)
数据结构·c++·python·算法·pat考试·pat