算法与数据结构概述

237 阅读2分钟

一、什么是算法

算法:algorithm
数学中:用于解决某一类问题的公式和思想。
计算机中:是一系列程序的指令,用于解决特定的运算和逻辑问题。

二、算法的衡量

1. 时间复杂度

就是执行算法的时间成本。
1.1 由于运行环境和输入规模的影响,代码的绝对执行时间是无法预估的!!!
但是我们可以计算出代码的基本操作的执行次数T(n);

T(n)=O(f(n))T(n) = O(f(n))

其中:O为算法的渐进时间复杂度,也就是传说中的时间复杂度。
推导出时间复杂度的原则: ① 如果运算时间是常量级的,就用1来表示; ② 只保留函数中的最高项; ③ 如果最高阶存在,就省去前面的系数.

eg.T(n)=3n2+6n+5T(n) = 3n^2 + 6n + 5 它的时间复杂度为:T(n)=O(n2)T(n) = O(n^2)

1.2 比较
O(1) < O(log(n)) < O(n) < O(n^2)

1.3 时间复杂度的重要性
随着问题规模的逐渐增加,好坏算法之间的差距将会越明显。

2. 空间复杂度

执行算法的空间成本。
2.1 常见空间复杂度的计算

类型空间复杂度举例
常量空间O(1)算法的存储空间固定,和输入规模没有直接的关系
线性空间O(n)当算法分配的空间是一个线性的集合(如:数组),并且集合大小和规模n成正比时
二维空间O(n^2)当算法分配的空间时一个二维数组集合,并且集合的长度和宽度都与输入的规模n成正比
递归空间O(n)执行递归操作所需要的内存空间和递归的深度成正比。(纯粹的递归操作的空间复杂度也是线性的)

3. 时间和空间的取舍

由于计算机的运算速度和空间资源是有限的,就比如:一个很有钱的人是不会为每日吃多少钱的饭而烦恼,只有没钱的人才会每天精打细算。而现如今,计算机的CPU处理速度不断飙升,内存和硬盘空间也越来越大,那么我们在多数时候,更希望牺牲空间来换取时间,来提高程序的执行速度。

三、什么是数据结构

数据结构: data structure 数据结构是数据的组织、管理和存储格式,目的是为了更高效地访问和修改数据

数据结构的组成方式:

image.png