(一)数据结构与算法基础
(1)数据结构的基本概念
数据结构是指相互有关联的数据元素的集合,数据结构研究的三个方面:(也称为:数据结构的三要素)
①数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;
- 数据的逻辑结构包含:
- 表示数据元素的信息;
- 表示各数据元素之间的前后件关系
②在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;
- 数据的存储结构有顺序、链接、索引等
③对各种数据结构进行的运算。
(2)线性/非线性数据结构
根据数据结构各元素前后之间关系的复杂程度,将数据结构分为两类:
-
线性数据结构(也称线性表)
- 满足条件一:有且只有一个根结点;
- 满足条件二:每个结点最多有一个前驱,也最多有一个后继。
-
非线性数据结构
(3)抽象数据类型(Abstract Data Type)
抽象数据类型(ADT)的含义是指一个数学模型以及定义在此数模型上的一组操作。即把数据类型和数据类型上的运算捆绑在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔离开,使得它们相互独立。
最常用的数据运算有五种:
- 插入;
- 删除;
- 修改;
- 查找;
- 排序
(4)算法
算法是独立存在的一种解决问题的方法和思想。对于算法而言,实现的语言并不重要。
- 算法的五大特性
- 输入:算法具有0或多个输入;
- 输出:算法至少有1个或多个输出;
- 有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每个步骤需要在可接受的时间内完成;
- 确定性:算法中的每一步都有确定的含义,不会出现二义性;
- 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成。
(5)算法的分析
时间复杂度:编写算法(程序)在计算机中运行时间的度量。最优时间复杂度,最坏时间复杂度以及平均时间复杂度,因此,我们需要关注算法的最坏情况,即最坏时间复杂度。
时间复杂度的影响因素:
- 问题规模
- 计算机软硬件条件
- 程序中语句的执行次数
时间复杂度的几条基本计算规则
- 基本操作,即只有常数项,认为时间复杂度为O(1);
- 顺序结构,时间复杂度按加法进行计算;
- 循环结构,时间复杂度按乘法进行计算;
- 分支结构,时间复杂度取最大值;
- 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略;
- 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。
时间复杂度与大O表示法
每台机器执行的总时间不同,但是执行基本运算的数量大体相同,对于算法的时间效率,我们可以使用“大O记法”来表示。
空间复杂度:算法中所需辅助空间单元占用空间的度量。
(6)数据结构和算法的区别
数据结构只是静态的描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法。
程序=算法+数据结构;
总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!