数据
但凡能被计算机存储、识别、计算的东西都叫数据(二进制)
硬盘中:mp3、jpg、doc、avi、exe、txt等
内存中:变量、常量、数组、对象、字节码等
结构
数据与数据之间一种或多种特定的关系
数据结构
逻辑思维与抽象思维的能力
数据结构=数据+数据之间的关系
数据结构主要解决将零散数据整齐划一方便操作
《离散数学》、《概率论》和《统计学》提供理论基础
数据结构是具体的实施方案(主要依赖《离散数学》)
逻辑结构
数据元素之间的相互关系
没有实质性的存储在计算机内
仅仅描述该事物的属性和行为的组成
集合结构:数据元素仅仅同属一个集合没有其他关系
线性结构:数据元素之间一对一的关系
树形结构:数据元素之间一对多的关系(层级关系)
图形结构:数据元素之间多对多的关系
物理结构
数据的逻辑结构在计算机中的存储形式
即在内存中具体实现逻辑结构
顺序存储结构:通常用数组实现
开辟一组连续的空间存储数据
保证了数据之间的关系
查改快 增删慢
链式存储结构:通常用节点实现
开辟一组随机空间存储数据以及下一节点位置以保证数据之间的关系
增删快 查改慢
根据应用场景选择最适合的数据结构
算法
解决特定问题求解步骤的描述
在计算机中表现为指令的有序序列
每条指令表示一个或多个操作
可以用不同的算法解决同一个问题
算法优越性
设计算法要提高程序运行效率
效率大都指算法执行时间
分析程序执行时间时应把程序看成独立于程序设计语言的算法或一系列步骤
执行时间取决于以下因素(抛开软硬件):
所采用的算法(算法本身)
编程代码质量(//软件支持)
问题输入规模(输入数据量)
机器执行指令速度(//硬件性能)
事后统计方法:
通过设计好的程序和数据利用计算机计时器对不同算程序运行时间进行比较
缺陷:必须事现写好程序再运行
若数据量较大可以体现出算法优越性却会花费大量时间精力
若数据量较小算法的影响微乎其微相差几乎为零
事前分析估算方法:
计算机编制程序前依据统计方法对算法进行估算
时间复杂度
在进行算法分析时语句总执行次数T(n)是关于问题规模n的函数 进而分析T(n)随n的变化情况并确定发T(n)的数量级 算法的时间复杂度 也就是算法的时间量度 记作:T(n)=O(f(n)) 表示随问题规模n的增大 算法执行时间的增长率和f(n)的增长率相同 称作算法的监禁时间复杂度 简称时间复杂度 其中f(n)是问题规模n的某个函数
方法:忽略常数及n的系数 只保留n的最高幂次
常数阶O(1):无论n如何增大只执行1次
线性阶O(n):执行次数与n成正比例
对数阶O(logn):执行次数随着n的增大逐渐缓慢上升
平方阶O(n²):执行次数随n增大成指数增长
时间复杂度比较:
O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2n)<O(n!)<O(nn)
时间复杂度都考虑最坏情况