数据结构与算法(1) - 数据结构入门

1. 数据结构概述

数据结构是计算机存储、组织数据的方式。
研究的是某些数据元素(简称“元素”)之间的逻辑结构物理结构以及他们之间的关系(逻辑关系、存储关系)。

2.数据的结构

数据结构可以从逻辑结构物理结构两个方面进行分析。

2.1 逻辑结构

反映数据元素之间的逻辑关系,逻辑关系是指数据元素之间的前后件关系,与他们在计算机中的存储位置无关。

集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系
线性结构:数据结构中的元素存在一对一的相互关系
树形结构:数据结构中的元素存在一对多的相互关系
图形结构:数据结构中的元素存在多对多的相互关系

2.2 物理结构(存储结构)

数据的逻辑结构在计算机存储空间的存放形式。

数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可由多种存储结构实现。

3. 分类

从逻辑上可以分成“线性”和“非线性”

3.1 线性

所有数据元素在“一条线”上,每个元素最多只有一个直接前驱元素(他前边的都叫前驱,注意这里是直接前驱),最多只有一个直接后继元素。

3.2 非线性

所有数据元素不全在“一条线”上,每个元素可以有多个直接前驱元素,也可以有多个直接后继元素。

4. 抽象数据类型

数据类型

数据对象集(数据类型中的各种元素都是什么)
数据集合相关联的操作集(这个数据集有哪些操作,取某个元素?删除?创建?)

抽象:

描述数据类型的方法应该不依赖于具体如何实现。
与存放数据的机器无关
与数据存储的物理结构无关
与实现操作的算法和编程语言无关

抽象这个词只关心数据对象是什么,不关心它如何做到的。

5. 算法

算法定义:

算法是一个有限指令集
输入可有可无,但至少有一个输出。
一定是在有限步骤之后终止。
每一条指令必须明确。

描述算法必须抽象,不依赖于任何一种计算机语言及具体的实现手段。

5.1 什么是好的算法

5.1.1 衡量指标:

空间复杂度S(n)
时间复杂度T(n)

n是数据规模

在分析算法效率时,一般分析两钟复杂度

最坏情况复杂度Tworst(n)
平均复杂度Tavg(n)

5.1.2 复杂度的渐进表示

一般不做精确的复杂度分析,只需要知道一个大致的趋势即可,所以有了复杂度的渐进表示。
在这里插入图片描述
第一行,表示的是找到一个上界。
第二行,表示的是找到一个下界。
第三行,表示的是上下界相等。

在这里插入图片描述

5.1.3 复杂度变化曲线

在这里插入图片描述

5.1.4 一般的复杂度大小判断

  1. 两个算法顺序执行的话,复杂度取高的那个。
  2. 两个算法嵌套的话,就是两个算法的复杂相乘。
  3. for循环的时间复杂度为循环次数乘上循环体内的复杂度
  4. if-else 的时间复杂度去取以下三个部分中最高的那个
  1. 条件
  2. if 分支复杂度
  3. else 分支的复杂度

猜你喜欢

转载自blog.csdn.net/u014117943/article/details/113355936
今日推荐