数据库结构与算法
1、什么是算法:
计算机解决解决某个问题特定任务的具体实现步骤。
算法是独立解决问题的一种方法和解决思路
2、算法特性:
输入:有0个或者多个参数
输出:至少有一个以上的计算结果,
有穷性:算法在有限的步骤内会自动结束,不会无限循环,并且每一个执行步骤是需要的时间是可接受的
确定性:算法的每一个步骤必须要有确定的含义,不能出现二义性
可行性:算法执行的没一个步骤都是可性的,每一步骤都会在有限的执行次数完成
3、时间复杂度
实现算法的执行时间可以反应出
算法的时间效率称为时间复杂度
可以用这段程序的最终要发挥的基本步骤来描述他的算法优略性,哪这个描述基本运算数量的总和叫做 时间复杂度
总执行时间 = 基本运算数量 * 每一个基本运算时间
4、时间复杂度表达式
eg:
1 2 3 4 5 | for i in range ( 0 , 1000 ): for ii in range ( 1000 ): for iii in range range ( 1000 ): if i + ii + iii = = 12345 and i + ii = 100 : print (i,ii,ii) |
T = 1000 * 1000 * 1000 * 2
T = n * n * n * 2
T(n) = n^3 * 2
T(n) = k*g(n) + c
g(n) = n*3
T(n) = n^3
k:常数
c:系数 可以为 0
n:解决问题的规模
g(n): g(n)是T(n)的渐进函数,也就是g(n)能够表达出T(n)时间复杂度的一个特征【g(n)是T(n)去除旁支末节(常熟项、系数),只留下最主要的特征部分】
T(n):时间复杂度【对于某个问题解决步骤的统一标识】
大O表示法:g(n)就叫做一个时间复杂度T(n) 的大O表示法
5、最坏时间复杂度
最优时间复杂度:算法完成任务最少需要多少基本操作。最乐观的情况,没有参考价值。
最坏时间复杂度:算法完成任务最多需要多少基本操作。提供一种保障,在最坏的情况下也能完成任务 ***
平均时间复杂度:算法完成任务平均需要多少基本操作。对算法的全面评价,反应了算法的性质,但是这种评价并不准确
关注:最坏时间复杂度 --> 最优时间复杂度
6、时间复杂度计算规则:
1) 基本操作,即只有参数项,认为其时间复杂度为 O(1)
2) 顺序结构,时间复杂度按照 加法计算
3) 循环结构,时间复杂度按照 乘法计算
4) 分支机构,时间复杂度去最大值
5) 判断一个算法的效率时,往往只关注操作数量最高次项,其他次要项和参数项目可以忽略不记
6) 没有特殊说明,一般分析的算法的时间复杂度都是指 最坏时间复杂度
7、常见时间复杂度
8、顺序表
线性表:将一种元素看成一种序列,元素在序列的位置和顺序表示实际应用中的一种关系或者某种意义,或者数据元素之间的某种关系。这样一种元素的组织形式,抽象为:线性表
顺序表:将元素顺序的存储在一块连续的存储空间内元素的顺序关系由他们的存储顺序自然表示
链表:将元素存储在通过链表构成的一系列纯粹块中
9、顺序表操作
插入元素
尾端添加元素: 时间复杂度O(1)
非保序添加元素:时间复杂度 O(2) <==>O(1)
保序插入元素:时间复杂度O(n)
删除元素
尾端删除元素: 时间复杂度O(1)
非保序删除元素:时间复杂度 O(2) <==>O(1)
保序删除元素:时间复杂度O(n)
10、栈
一种可以存储、删除、查询元素的容器,只允许在容器的一端进行操作
特点:后进先出【因为只允许在容器的一端进行操作】
10、队列
一种只允许在一端插入,另外一端删除的线性表
特点:先进先出(FIFO)
11、双端队列
一种具备队列和栈的性质的数据库结构,其元素可以从两端进行 弹出,插入、删除。可以在队列的任意一段入队和出队
12、链表
结构:| 数据 区(数据)| 链接区(下一节点地址) |
链表:一种常见的基础数据结构,是一种线性表,但它不像顺序表一样连续存储数据,而是在每一个节点上存储下一个节点位置信息
13、单向链表
单向链表也叫单链表,是链表中最简单的一种形式, 它的每个节点包含2个域,一个是信息域,一个是链接域,链接指向链表的下一个节点,而最后一个节点的链接域指向一个空值
数据结构: (信息域 | 节点域 > (数据 | 下一个节点链接)
完整结构:头节点 --> (数据 | 下一节点链路) --> (数据 | 下一节点链路-) --> (数据 | 空值)
14、python3 变量标识
a = 10
a1 = 20
a, a1 = a1, a
转换原理: 只改变地址引用,其他不变
引式声明: 声明一个变量时,变量名保存的是一个地址,地址指向的是谁,变量的值就是谁
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架