1、数据结构与算法概述

一、数据结构概述

  程序 = 数据结构 + 算法

  数据结构就是程序中,数据元素相互之间存在的一种或多种特定关系的集合。

1、数据结构包括逻辑结构和物理结构

    逻辑结构:指数据对象中数据元素之间的相互关系。

    物理结构:指逻辑结构在计算机中的存储形式

2、四大逻辑结构:

    1、集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他的关系。

    2、顺序结构:线性结构中的数据元素之间是一对一的关系。

    3、树形结构:树形结构中的数据元素之间存在一种一对多的层次关系

    4、图形结构:图形结构的数据元素时多对多的关系

3、物理结构:即如何将数据元素存储到计算机的存储器中。

  数据元素的存储结构形式有两种:顺序存储和链式存储

  顺序存储结构:把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系时一致的。

  链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以时连续的,也可以是不连续的。

二、算法

  算法时解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

  算法具有五个基本特征:输入、输出、有穷性、确定性、可行性

三、时间复杂度和空间复杂度

时间复杂度和空间复杂度是算法效率的度量方法。也就是说,一个好的算法取决于它的时间复杂度和空间复杂度。

1、时间复杂度

  定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。

  算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。

  它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。

  时间复杂度计算方法

    1.用常数1取代运行时间中的所有加法常数。

    2.在修改后的运行次数函数中,只保留最高阶项。

    3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。

    最后,得到的最后结果就是时间复杂度。

  常见的时间复杂度

    按数量级递增排列,常见的时间复杂度有:
    常数阶O(1),对数阶O( log n ),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。也就是:
常用的时间复杂度所耗费的时间从小到大依次是:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)。

2、算法的空间复杂度

  算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。
  在 程序开发中,我们所指的复杂度不做特别说明的情况下,就是指时间复杂度。现在的硬件发展速度之快使得我们完全可以不用考虑算法所占的内存,通常都是用空间 换取时间。加之算法的空间复杂度比较难算,所以,无论是在考试中还是在项目开发中,我们都侧重于时间复杂度。所以,空间复杂度。

原文地址:https://www.cnblogs.com/Long-w/p/8651337.html