《数据结构》这门课程大多时候等同于《数据结构与算法》,所以我们一般说数据结构,都会涉及到算法。《数据结构》这门课程要求学生根据所学的数据结构理论,能完成复杂的程序设计。而程序设计能力的提高,必须要有学习、观摩、借鉴和实践的过程。
我们把现实中复杂的问题以特定的数据类型(现实中的个体)和特定的存储结构(现实中个体之间的关系)保存在计算机内存中,我们把这种“特定的存储结构”叫做数据结构。在此数据结构的基础之上为实现的某个功能(比如查找、删除、排序)而执行的相应操作叫做算法。
我们可以简单理解为:数据结构 = 个体 + 个体的关系,算法 = 对存储数据的操作。
通过 1.1,我们把处理数据的方法和步骤叫做算法。而衡量算法的标准包括以下几个方面:
- 时间复杂度:程序大概要执行的次数,而非执行的时间
- 空间复杂度:算法执行过程中,大概占用的最大的内存
- 难易程度
- 健壮性
算法最核心的内容是研究算法的时间复杂度和空间复杂度。
数据结构是软件工程中最核心的课程。在实际程序开发中,我们会使用各种编程语言,对各种数据进行相应的功能操作,如存储、查询、删除,或是更复杂的运算。所以数据结构功底在一定程度上,决定了个人在程序开发上的综合能力。
我们可以理解为:程序 = 数据的存储 + 数据的操作(也就是算法) + 可以被计算机执行的语言。
大O分析法是用来描述算法的性能或复杂度的表示法,主要衡量算法在最坏情况下的时间或空间需求。它通过表示算法的增长速率来评估其效率,而不关心具体的常数因子或低阶项。帮助我们忽略不重要的细节,专注于算法的表现。
大O分析法中的“O”来自数学中的“Order”(阶)的概念,表示增长的“数量级”或“规模”。它用来描述函数的渐近行为,即当输入规模无限增大时,算法的执行时间或空间消耗如何随之变化。
大O表示法的核心思想是:
- 时间复杂度:描述随着输入规模(n)的增加,算法所需的执行时间如何增长。
- 空间复杂度:描述算法随着输入规模增加所需的内存增长情况。
常见的大O符号:
- O(1): 常数时间,不管输入规模多大,执行时间始终相同。
- O(log n): 对数时间,算法的执行时间随着输入规模的对数增长。
- O(n): 线性时间,执行时间与输入规模成正比。
- O(n log n): 线性对数时间,常用于高效排序算法(如归并排序、快速排序)。
- O(n²): 平方时间,执行时间与输入规模的平方成正比,常见于一些简单的排序算法(如冒泡排序)。
- O(2^n): 指数时间,随着输入规模增加,执行时间成指数增长,效率极低。
通过大O分析法,开发者可以估计算法在不同输入条件下的表现,选择最合适的算法。
为了方便我们今后的学习,本文列出数据结构的基础知识模块如下
- 连续存储(顺序表)
- 离散存储(链表)
- 线性结构的两种常见应用之一------栈
- 线性结构的两种常见应用之二------队列
- 树
- 图