【数据结构】算法复杂度

今天开始复习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.常见复杂度对比

相关推荐
雨落在了我的手上7 小时前
Java数据结构(十一):优先级队列(堆)
数据结构
带多刺的玫瑰12 小时前
Leecode#26刷题之删除有序数组中的重复项
数据结构·算法·leetcode
洋不写bug13 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
化雨成烟14 小时前
C++之AVL树
数据结构
wabs66615 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
C++ 老炮儿的技术栈15 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c
不会就选b15 小时前
算法日常・每日刷题--<贪心>6
数据结构·算法·leetcode
青山木16 小时前
Hot 100 --- 跳跃游戏 II
java·数据结构·算法·leetcode·贪心算法
神明不懂浪漫17 小时前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
LuminousCPP17 小时前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法