算法概述

  • 算法:算法是一系列程序指令,用于处理特定的运算和逻辑问题;
  • 数据结构:是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据;
数据结构方式 解释
线性结构 是最简单的数据结构,包括数组、链表,以及由它们衍生出来的栈、队列、哈希表;
树是相对复杂的数据结构,其中比较有代表性的是二叉树,由它又衍生出二叉堆之类的数据结构;
图是更为复杂的数据结构,因为在图中会呈现出多对多的关联关系;
其他数据结构 由基本数据结构变形而来,用于解决某些特定问题,如跳表、哈希链表、位图等;

衡量算法好坏的重要标准有两个:时间复杂度和空间复杂度。时间复杂度是执行算法的时间成本,空间复杂度时执行算法的空间成本;也就是运行时间的长短和占用内存空间的大小;

  • 时间复杂度:是对一个算法运行时间长短的量度,用大O表示,记作T(n)=O(f(n));常见的时间复杂度按照从低到高的顺序,包括O(1)、O(logn)、O(n)、O(nlogn)、O(n2)等;
  • 空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度,用大O表示,记作S(n)=O(f(n));常见的空间复杂度按照从低到高的顺序,包括O(1)、O(n)、O(n2)等,其中递归算法的空间复杂度和递归深度成正比。
常量空间:当算法的存储空间大小固定,和输入规模没有直接的关系时,空间复杂度记作O(1);
线性空间:当算法分配的空间是一个线性的集合(如数组),并且集合大小和输入规模n成正比,空间复杂度记作O(n);
二维空间:当算法分配的空间是一个二维数组集合,并且集合的长度和宽度都与输入规模n成正比时,空间复杂度记作O(n^2),就是n的平方;
递归空间:纯粹的递归操作的空间复杂度也是线性的,如果递归的深度是n,那么空间复杂度就是O(n);

  在绝大多数时候,时间复杂度更为重要一些,我们宁可多分配一些内存空间,也要提升程序的执行速度。