一.数据(data):数据是信息的载体,是对客观事物的符号表示,能够被计算机识别,储存和加工处理。
二.数据元素(data element):数据元素是数据中具有独特意义的个体,是数据的基本单位,通常,,,,,数据元素可以有若干数据项,数据项是不可分隔的最小单位。
三.数据对象(data object):数据对象是性质相同的数据元素的集合,是数据的一个子集。如 N={0,+1 ,-1,+2,-2,...}
四.数据类型(data type):数据类型是计算机程序中的数据对象以及定义在这个数据对象集合上的一组操作总称(数据类型分原子数据类型和结构数据类型)。
五.数据结构(data structure):数据结构是数据对象以及数据对象集合中的数据元素之间的相互关系。
(1)数据元素之间的逻辑关系叫数据的逻辑结构,通常有4类:集合;线性结构;树状结构;图状结构
(2)数据元素以及他们之间的相互关系在计算机存储器内的表示叫存储结构(或者物理结构)
(3)数据元素之间的运算(或操作)叫数据运算(数据操作)
(4)存储方法:(1)顺序存储方法 (2)链接存储方法(3)索引存储方法(4)散列存储方法
六.算法(Algorithm):算法是对特定问题求解步骤的一组描述。它具有下列5个特征:
(1)有穷性 (2)确定性-每步有确切的含义(3)可行性(4)输入-0个或者多个(5)输出-1个或多个
七.算法优劣:(1)正确性 (2)健壮性-输入非法数据能做成反应 (3)可读性 (4)执行时间 (5)执行的辅助空间
八.时间复杂度定义:如果存在正的整数M和n0,当问题规模n>n0时算法的时间量度T(n)<=M*f(n),那么就称改算法的时间复杂度为O(f(n))。(这个定义说明,如果n可以确定,时间复杂度越高的算法运行速度可能会比时间复杂度低的算法运行效率更高,但是一定存在某个值,M>n时,时间复杂度高的会比时间复杂度低的运行速率慢)
九.空间复杂度定义:略
十.计算复杂度标准解法(这个是我转载的,这个是我发现求时间复杂度最严谨通用方法,转载:https://www.cnblogs.com/xuancaoyy/p/5814692.html):
1. 计算出基本操作的执行次数T(n)
基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语句的频度。在做算法分析时,一般默认为考虑最坏的情况。
2. 计算出T(n)的数量级
求T(n)的数量级,只要将T(n)进行如下一些操作:
忽略常量、低次幂和最高次幂的系数
令f(n)=T(n)的数量级。
3. 用大O来表示时间复杂度
当n趋近于无穷大时,如果lim(T(n)/f(n))的值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n))。
一个示例:
(1) int num1, num2;
(2) for(int i=0; i<n; i++){
(3) num1 += 1;
(4) for(int j=1; j<=n; j*=2){
(5) num2 += num1;
(6) }
(7) }
分析:
1.
语句int num1, num2;的频度为1;
语句i=0;的频度为1;
语句i<n; i++; num1+=1; j=1; 的频度为n;4条
语句j<=n; j*=2; num2+=num1;的频度为n*log2n;3条
T(n) = 2 + 4n + 3n*log2n
2.
忽略掉T(n)中的常量、低次幂和最高次幂的系数
f(n) = n*log2n
3.
lim(T(n)/f(n)) = (2+4n+3n*log2n) / (n*log2n)
= 2*(1/n)*(1/log2n) + 4*(1/log2n) + 3
当n趋向于无穷大,1/n趋向于0,1/log2n趋向于0
所以极限等于3。
T(n) = O(n*log2n)
简化的计算步骤
再来分析一下,可以看出,决定算法复杂度的是执行次数最多的语句,这里是num2 += num1,一般也是最内循环的语句。
并且,通常将求解极限是否为常量也省略掉?
于是,以上步骤可以简化为:
1. 找到执行次数最多的语句
2. 计算语句执行次数的数量级
3. 用大O来表示结果
继续以上述算法为例,进行分析:
1.
执行次数最多的语句为num2 += num1
2.
T(n) = n*log2n
f(n) = n*log2n
3.
// lim(T(n)/f(n)) = 1
T(n) = O(n*log2n)