数据结构入门——数据结构及算法概述
文章目录
前言
本系列文章将简要介绍数据结构课程入门知识,文章将结合我们学校(吉大)数据结构课程内容进行讲述。文中算法大部分来自朱允刚老师上课的讲解,朱老师是我遇到最认真负责的老师,很有幸能成为朱老师的学生。
一、数据结构概述
此部分不是十分重要😊
1.定义
数据结构是指由若干数据按照一定方式构成的复合数据以及作用于其上的函数或运算。数据元素及其间数据的约束关系合称为数据的逻辑结构。数据结构从数学上可用适当的数学结构以及其上的函数变换统一定义。
迄今为止关于数据结构的定义在计算机科学技术界还未取得一致。有些学者认为数据结构应由数据的逻辑结构、数据的存储结构及其运算三部分组成。
在本系列中数据结构基本组成部分为:数据的逻辑结构、存储结构、施加于数据上的操作。
2.数据
计算机程序处理的对象统称为数据(Data)。
3.结构
数据的结构包括逻辑结构及存储结构。
逻辑结构:数据的逻辑结构讨论的是数据元素之间的逻辑关系。逻辑结构分为线性结构和非线性结构,非线性结构又分为层次结构(树) 和 网状结构(图结构) 以及 集合。
存储结构:数据及逻辑关系在计算机中存储的表示称为数据的存储结构。常见存储结构为:顺序存储(数组)、链接存储(链表)、索引存储、散列存储(散列表)。
4.操作
对数据的基本操作一般包括:插入、删除、修改、查找、排序、遍历。
二、算法概述
1.算法基础
算法: 一个算法就是给出特定类型问题的运算序列的一个有穷规则集合。一个算法应具有以下5个重要特征。
(1)有限性:一个算法在执行有限步骤之后必须结束
(2)确定性:对一个算法的每个步骤都必须给出精确的定义,对要执行的动作必须针对每种情况给出严格、无歧义的描述
(3)输入:一个算法0个或多个输入
(4)输出:算法有1个或多个输出
(5)可行性:算法中的所有操作都必须是充分基本的
算法的评价可通过正确性、时间复杂性、空间复杂性、可读性、健壮性。
2.时间复杂性和空间复杂性
注:本文很少有举例,关于复杂性的例子可以去看这篇文章
数据结构之时间复杂度和空间复杂度
时间复杂性和空间复杂性是算法评价的重要依据。
时间复杂性
算法的实际执行时间依赖于机器。同一个算法在不同机器上的执行时间不一定相同。算法的实际执行时间还依赖于编写算法的程序设计语言. 一个用 C 语言编写的程序比Java、Python、BASIC快.
度量算法时间效率的标准:
(1)能表示算法所采用的方法的时间效率;
(2)与算法描述语言及设计风格无关;
(3)与算法的许多细节无关;
(4)足够精确和具有一般性。
一个算法的时间复杂性是指该算法的基本运算次数。
时间复杂性的渐进表示方法
算法分析中通常采用大 O、大 Ω 、大Θ 渐近表示算法的基本运算次数。
(1) O表示法
设T(n)和g(n)是正整数集到正实数集上的函数。称T(n) = O(g(n)) ,当且仅当存在一个正常数C 和 n0,使得对任意的 n≥n0,有T(n) ≤ C g(n)。
n 是算法输入的规模,如数组的长度,图的边数等;一个算法时间复杂性是O(g(n)),称其时间复杂性的阶为g(n)。
大 O符号定义了函数T(n) 的一个上限,算法的运行时间(基本运算次数)至多是g(n)的一个常数倍,即:T(n)的增长速度至多与g(n)的增长速度一样快。
(2) Ω表示法
称T(n) = Ω(g(n)) ,当且仅当存在一个正的常数C和n0,使得对任意的n≥n0,有T(n) ≥ C g(n)。
大 Ω 符号定义了函数T(n) 的一个下限,算法的运行时间至少是g(n)的一个常数倍。即:T(n)的增长速度不低于g(n)的增长速度。
(3) 大Θ表示法
称T(n) = Θ (g(n)) ,当且仅当存在正常数C1、C2和n0,使得对任意的n≥ n0,有:C1g(n) ≤ T(n) ≤ C2g(n)
大Θ符号定义了函数T(n)的上限和下限,T(n)的增长速度与g(n)的增长速度相同。
均摊时间复杂度
确定n个操作的总代价上界T(n),每个操作的平均代价T(n)/n称为每个操作的均摊时间复杂度。
空间复杂性
算法在运行过程中所占用的存储空间的大小被定义为算法的空间复杂性。
空间复杂度一般采用时间复杂度中的大O表示法。
总结
在数据结构的学习过程中算法的时间复杂性是十分重要的,而时间复杂性的表示通常使用的是大O表示法,因此大O表示法需要重点掌握。可以配合数据结构之时间复杂度和空间复杂度这篇文章的例子加以理解掌握。