01-数据结构与算法概述

114 阅读2分钟

一、数据结构的概念

1.1 什么是数据结构

  • 数据结构(data structure)是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的元素的集合。
  • 简单来说就是:存数据的,而且是在内存中存!

1.2 常见的数据结构

image.png

二、算法的概念

2.1 什么是算法

  • 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
  • 一句话描述:算法是一种解决特定问题的思路
  • 比如:LRU算法,最近最少使用,解决的就是当空间不够用时,应该淘汰谁的问题,这一种策略,不是唯一的答案,所以算法无对错,只有好和不好。

2.2 常见的算法

image.png

2.3 算法复杂度

数据结构和算法的本质上是“快”和“省”。所以代码的执行效率是非常重要的度量。一般采用时间复杂度和空间复杂度来计算。

2.3.1 时间复杂度

大O复杂度表示法

int sum(int n) {
    int s = 0;  // t
    int i = 1;  // t
    for(; i <= n; i++) {  // t*n
        s = s+i;          // t*n
    }
    return s
}
n = 100
1+1+100n+100n+1 = 200n+3

我们假设执行一段代码的时间为t,通过估算,代码的执行时间T(n)与执行次数成正比,记作:

# T(n) = O(f(n))
# T(n):代码执行时间
# n:数据规模
# f(n):每行代码执行次数总和
# O:代码的执行时间与f(n)表达式成正比
# 上面的例子中:T(n) = O(2n+2)
# 当n无限大时,低阶、常量、系统都可以忽略,所以T(n) = O(n)
# 即上述中的时间复杂度为O(n),也就是代码执行时间随着数据规模的增加而增长。

2.3.2 空间复杂度

  • 空间复杂度全称是渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系,比如将一个数组拷贝到另一个数组中,就是相当于空间扩大了一倍: T(n) = O(2n),忽略系数。即为:O(n),这是一个非常常见的空间复杂度,比如跳跃表、HsahMap的扩容。
  • 由于现在硬件相对比较便宜,所以在开发中常常会利用空间来换时间,比如缓存技术,典型的数据结构中空间换时间的是:跳跃表
  • 在实际开发中我们也更关注代码的时间复杂度,而用于执行效率的提升。