算法导论笔记(四)

第六章:变治法

三种类型:

(1)变换为同样问题的一个更简单或者更方便的实例——实例简化

(2)变换为同样实例的不同表现——改变表现

(3)变换为另一个问题的实例,这种问题的算法是已知的——问题简化

6.1预排序:

就是利用合并排序/快速排序,时间复杂度为nlogN的先对要进行计算的数组进行排序

然后将有序数组用来运算

6.2高斯消去法:

初等行变换将原矩阵转变成上三角矩阵然后自底向上进行求解

第一种:从第一行到倒数第二行循环,对其余行进行每个元素循环,减去标杆行修改元素和本行修改元素的比例(效率低)

第二种:从第一个元素到倒数第二个元素,遍历,将对应列的最小的放在最前面,交换行,然后对其余行和该行按修改元素比例进行做差

6.2.1LU分解:

U为上三角矩阵(高斯消去法得出)

L为对角线为1,其余为比例系数的下三角矩阵

Ax=b即为LUx=b

设Ux = b 则为 Ly  = b

解y->然后解Ux = y

6.2.2计算矩阵的逆:

退化矩阵:矩阵无法计算逆,逆不存在

非退化矩阵:高斯消去法得到的矩阵对角线上面无0元素即为非退化矩阵

需要计算n2个元素

AB = E

Axj = ej 矩阵A乘以矩阵B的xj列 = 矩阵E的ej列(j∈(1,n))

6.2.3计算矩阵的行列式(计算矩阵的值)

元素下角标之和 奇负偶正

然后乘以代数余子式

6.3平衡查找树:

6.3.1AVL树:

对左右子树求高度差,高度差的绝对值均小于2的二叉查找树(左子树小于根节点,右子树大于根节点)即为AVL树

通过旋转使得新插入节点导致不平衡的AVL树重新变得平衡,通过修改距离插入节点最近的节点来使得AVL树平衡,

时间复杂度logn

6.3.2 2-3树:

2-3树即树可以包含两种类型的节点:两个节点和三个节点

两个节点:一个键,两个子女

三个节点:两个键,三个子女,左小于min,中∈(min,max),右大于max

2-3树总是高度平衡的,树种所有的叶子必须在同一层

2-3树中插入新节点的做法:二节点的找到合适的位置(小于原来的键或者大于原来的键)插入,三节点的插入后分裂,最小的键分到左侧叶子,中间的升入父母节点,最大的放在右侧叶子

6.4堆和堆排序

堆用二叉树表示,且满足两个特性:

1.完全二叉树,只有最后一层的右测可以缺

2.父母优势,父母节点大于所有子女节点

实际用数组表示,第一个空出来

前n/2向下取整是父母节点,后n/2向上取整是子女节点,按照从左到右次序排列

父母节点为i 子女节点为2i 2i+1 子女节点为i 父母节点 i/2向下取整

构造堆两种方法:

1.自底向上构造堆

先按照给的生成完全二叉树,然后作交换保证父母优势,不能则跟子女节点最大的作交换,从最后的父母节点开始,到根,交换后检查交换过来的小节点是否满足父母优势

时间效率O(n)

2.自顶向下构造堆

插入节点方法,然后将新插入的节点和父母节点作比较,直到满足父母优势为止

删除节点的方法:

将要被删除的节点和最后一个节点做交换,规模减一,然后自底向上堆化

6.5霍纳法则和二进制幂

6.5.1霍纳法则

将含x的多次多项式的式子不断提x进行拆解,直到不存在x的多次式

系数从左到右排序

6.5.2二进制幂

1.从左到右的二进制幂

将次方拆成2进制表示 1从左边起每位都平方然后0次方不变1次方+1

2.从右到左的二进制幂

将次方拆成二进制表示 每个二进制位对应a的2的二进制位次方,1则存在,0则不存在

6.6问题简化

6.6.1最小公倍数的问题

1.找出每个的因子相同个数的乘一遍其余不同的各自乘一遍

2.lcm = mxn/gcd(m,n)去除最大公约数

6.6.2计算图中的路径数量

第i个顶点到第j个顶点,长度为k的路径的数量 = pow(A,k)对应(i,j)位置的数目

A为邻接矩阵

6.6.3优化问题的化简

最大化问题和最小化问题的互相转化

max = -min min

6.6.4线性规划问题

背包问题的线性规划解法,给定目标和约束

6.6.5简化为图的问题

同标题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值