
源代码:
C:\迅雷下载\2021072816023491335\59e95a4689eeb92f380f4ab2\202107\29976aaa-ef7a-11eb-aba5-00163e0a088c
PPT:
C:\迅雷下载\2021072816023491335\59e95a4689eeb92f380f4ab2\202009\942a5ce8-fe34-11ea-a6a1-00163e0396a1
参考文献:
C:\迅雷下载\2021072816023491335\59e95a4689eeb92f380f4ab2\202009\c53b3bcc-fe34-11ea-97a4-00163e0a088c
推导大 O 阶方法
1)用常数 1 取代运行时间中的所有加法常数。
即,不论算法函数运行多少次,只要是通过加法得到的,就改为 1。
2)在修改后的运行次数函数中,只保留最高阶项
3)如果最高阶项存在且其系数不是 1,则去除与这个项相乘的系数。
得到的结果就是大 O 阶。
2 x Count >= n 退出循环
由 2Count = n 得到 x = log2n,时间复杂度是 O(logn)
常数阶
12
O(1)
线性阶
2n + 3
O(n)
平方阶
3n2 + 2n + 1
O(n2)
对数阶
5log2n + 20
O(logn)
nlogn阶
2n + 3nlog2n + 19
O(nlogn)
立方阶
6n3 + 2n2 + 3n + 4
O(n3)
指数阶
2n
O(2n)
时间复杂度耗费的时间从小到大排:
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
线性表:(List) 零个或多个元素的有限序列。
数组长度:存放线性表的存储空间的长度,存储分配后这个量一般是不变的。
线性表的长度:线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
任意时刻,线性表的长度应该小于等于数组的长度。
优点:
节点:
要通过循环的移动下标,判断,才能读取到指定下标的数据。
1)声明一指针 p 和计数器变量 l
2)初始化一空链表 L。
3)让 L 的头结点的指针指向 NULL,即建立一个带头结点的单链表。
4)循环:
(1)生成一新结点赋值给 p
(2)随机生成一数字赋值给 p 的数据域 p->data
(3)将 p 插入到头结点与前一新结点之间。
后缀表达式:叫后缀的原因,在于所有的符号都是在要运算数字的后面出现。
一种不需要括号的后缀表达法,称为逆波兰表示(Reverse Polish Notation, RPN)。
110页,
[[二叉树的遍历方法]]
书中规则的描述认为不清晰。
普里姆( Prim )算法
克鲁斯卡尔( Kruskal )算法
迪杰斯特拉( Dijkstra )算法
弗洛伊德( Floyd )算法