标签:度量 信息 之间 变量 碎片 单位 先进先出 存在 运行时间
数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合,三要素:逻辑结构、存储结构、数据的运算
数据的逻辑结构:数据元素之间的逻辑关系,与数据的存储无关,是独立于计算机的,数据的逻辑结构分为:线性结构和非线性结构。线性结构:字符串、队列、栈、线性表. 非线性结构:集合(数据元素关系一对一)、树(一对多)和图(多对多)
数据的逻辑结构通常包括集合、线性结构、树形结构和图状结构。
数据的存储结构(物理结构):有顺序存储、链式存储、索引存储、散列存储这四种
(1)顺序存储:把逻辑是哪个相邻的元素存储在物理位置也相邻的存储单元中
优点:随机存取 缺点:只能使用相邻的一整块存储单元、可能会产生较多的外部碎片
(2)链式存储:借助指示元素存储地址的指针来表示元素之间的逻辑关系
优点:不会出现外部碎片,充分利用所有存储单元 缺点:因存储指针而占用额外的存储空间,且只能实现顺序存储
(3)索引存储:在存储元素的同时建立附加的索引表,索引表中的每项称为索引项,一般形式是(关键字和地址)
优点:检索速度快 缺点:占用较多空间
(4)散列存储(Hash存储):根据元素的关键字直接计算出该元素的存储地址
数据的运算:包括运算的定义和实现,定义针对逻辑结构的,实现针对存储结构的
算法:它是指令的有限序列,具有5个特性:
(1)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成(算法运行的步数是有限的,运行时间也是有限的)
(2)确定性:对于相同的输入只能得出相同的输出
(3)可行性:算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的
(4)输入
(5)输出
好的算法应该考虑的目标:正确性、可读性、健壮性、效率、低存储
算法效率的度量是通过时间复杂度和空间复杂度来描述的
时间复杂度:指该语句被重复执行的次数
空间复杂度:S(n)定义为该算法所耗费的存储空间,是问题规模n的函数
常见的渐进时间复杂度
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
常用的时间复杂度
算法原地工作是指算法所需的辅助空间为常量即O(1)
程序不一定满足有穷性,而算法必须有穷,算法代表对问题求解步骤的描述,而程序则是算法在计算机上的特定实现
某算法的时间复杂度为O(n2),该算法的执行时间与n2成正比
类似i=i*2的,时间复杂度均为O(log2n)
阶乘n!,n*(n-1)······,共执行n次,时间复杂度O(n)
时间复杂度O(nlog2n)T(n)=T1(n) * T2(n)=O(n) * O(log2n)=O(nlog2n)
count = 0;
for(k=1;k<=n;k*=2)
for(j=1;j<=n;j++)
count++;
m++执行了n(n+1)次
int m = 0,i,j;
for(i=1;i<=n;i++)
for(j=1;j<=2*i;j++)
m++;
++i题型
int func(int n){
int i = 0,sum = 0;
while(sum<n)
sum+ = ++i;
return i;
}
循环变量为sum,将式子分解开来是++i;即sum = sum+i
sum是正整数之和,假设循环执行k次,那么(k+1)k/2<n
时间复杂度为O(n1/2)
算法独立于计算机和程序设计语言
数据结构相同,对应的存储结构不一定相同,数据结构操作的实现与存储结构有关
打印机缓冲区先进先出的逻辑结构是队列
顺序表、哈希表和单链表表示几种数据结构,既描述逻辑结构,也描述存储关系和数据的运算;而有序表示指关键字有序的顺序表,可以链式存储也可顺序存储,仅描述数据之间的逻辑关系。
三种常见的数据结构时线性表、树、图或队列、栈
for(i=1,s=0;i<=n;i++){
t=1;
for(j=1;j<=i;j++)
t=t*j;
s=s+t;
}
时间复杂度为O(n2)
i = 1;j = 0;
while(i+j<=n){
if(i>j)
j++;
else
i++;
}
? 时间复杂度为O(n)
常见的时间复杂度题型的解决办法
循环主题中的变量参与循环条件的判断
循环主体中的变量不参与循环条件判断
标签:度量 信息 之间 变量 碎片 单位 先进先出 存在 运行时间
原文地址:https://www.cnblogs.com/ChenLua/p/13286151.html