算法导论
全世界最好的李子维
这个作者很懒,什么都没留下…
展开
-
第15章 动态规划
分治方法:子问题互不相交,递归地求解子问题,再将他们组合起来。 动态规划:子问题之间相互重叠 15.1 钢条切割 购买的长钢管切割为短钢管出售,求最佳切割方案。 价格表: 长度 i 1 2 3 4 5 6 7 8 9 10 价格 Pi 1 5 8 9 10 17 17 20 24 30 问题:给定一段长度为n英寸的钢条和一个价格表pi,求切割钢条方案,使得销售收益最大。 最优子结构:问题的最优解由相关子问题的最优解组合而成,而这些子问题可以独立求解。 ...原创 2020-06-08 17:13:52 · 135 阅读 · 0 评论 -
第五章 概率分析和随机算法
5.1雇佣问题 面试一个人需要花费ci,雇佣一个人需要花费ch。当面试者比现有员工优秀时,就要雇佣他。因此伪代码为: Hire-assistant(n) 1 best = 0 2 for i = 1 to n 3 interview candidate i 4 if candidate i is better than candidate best 5 best = i 6 hire candidate i 假设雇佣m个人,则总花费: cin+原创 2020-06-03 01:59:19 · 266 阅读 · 0 评论 -
第四章 分治策略(3)
求解递归式 代入法 步骤 1、猜测解的形式 2、用数学归纳法求出解中的常数,并证明解是正确的 验证上界和下界 递归树方法 用来产生好的猜测 主定理法 T(n) = aT(n/b)+f(n) a>=1,b>1,f(n)是一个函数O(nm)。 1、 logba>m, T(n) = Θ(n^logba) 2、logba=m, T(n) = Θ(n^logba*lgn) 3、logba<m, 对于某个常数c<1,和所有足够大的n有af(n/b)<=cf(n), 则T(n) =Θ原创 2020-05-26 05:44:55 · 176 阅读 · 0 评论 -
第四章 分治策略(2)
矩阵乘法的Strassen算法 求解两个矩阵的点乘积的算法 简单算法 时间复杂度为:Θ(n3) 简单的分治算法 假设矩阵的行列数相等的方阵,并且为2的幂。 递归地将两个矩阵分别平均分解为行列数为(n/2,n/2)的四个方阵。 已知: 直接的递归算法伪代码: python实现(方阵的乘积): import sys import numpy as np # index = 0 def multi_matrix(A,B): n= A.shape[0] if n == 1:原创 2020-05-26 03:42:07 · 146 阅读 · 0 评论 -
算法导论第二章——插入排序和分治算法
目录2-1 插入排序2-2 分析算法2-3 分治算法归并排序分析分治算法 2-1 插入排序 将序列的第一个作为参考,循环与下一个进行比较,若后者小于前者,则交换位置。 插入算法简单代码: import sys if __name__ == "__main__": n = list(map(int, sys.stdin.readline().strip().split(' '))) ...原创 2020-05-06 05:16:01 · 603 阅读 · 0 评论 -
第四章 分治策略(1)
分治策略 最大子数组问题 问题描述: 给定一个数组,求出他的最大子数组,即此子数组的和最大。 分治求解: 数组A[low,high],mid=(low+high)/2 最大子数组存在的三种情况: a. 最大子数组在[low,mid]中, b. 最大子数组在[mid+1,high]中, c. 最大子数组跨越了mid, [i…mid…j]中 假如是前两种情况,那么最大子数组可以继续分解 只有当分解到...原创 2020-05-06 05:09:44 · 189 阅读 · 0 评论