
算法训练营
文章平均质量分 67
主要记录一下关于算法的训练
小熊不吃香菜
能做就做,不多说话
展开
-
0-1背包问题
问题描述:假设有n个物品和一个背包,每个物品i都有对应的价值vi,和重量wi,背包的容量为W,每个物品只有一件,要么装,要么不装,不可拆分。则在不超重的情况下,怎么选取物品装入背包,使得所装物品总价值最大。问题分析:本题不可用贪心算法,因为物品不可分解,只能得到局部最优解,而不是整体最有,因此可用动态规划来求解最优解用c[ ][ ]表示前i件物品放入一个容量为j的背包中所获得的最大价值,x...原创 2018-08-24 11:20:47 · 267 阅读 · 0 评论 -
动态规划之矩阵连乘
题目描述: 给定n个矩阵{A1,A2,…,An},其中,Ai与Ai+1是可乘的,(i=1,2 ,…,n-1)。用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法,使得矩阵连乘的次数最小。例如: A1是A(5*10)的方阵; A2是A(10*...原创 2018-08-21 15:09:16 · 60130 阅读 · 9 评论 -
动态规划 最长公共子序列
公共子序列:即序列X和序列Y共有的序列,可以不是连续序列,但子序列存在顺序排列例如:X : 3 2 1 5 7 9 5 4 Y :6 3 1 4 7 4 2则序列X和序列Y最长公共子序列为 3 1 7 4(有时可能不唯一)第一个想到的是直接暴力破解,对每个X的子序列进行穷举,检查每个子序列是否是Y的子序列,但如果X有m个元素,X的子序列有2^m个,此时时间...原创 2018-08-03 16:21:32 · 274 阅读 · 0 评论 -
分治法 大整数乘法
学习算法的时候,其中一道经典就是大整数乘法咯,感觉有点难理解,于是写一篇博客加深下理解。大数相乘不可以直接得到答案,肯定会超出数的范围,而解决大数相乘的办法就是分治法:将大问题变成小问题,再变成简单问题,最后进行合并。例如: 1234*23456 =(12*10^2+34)*(234...原创 2018-08-02 11:10:27 · 3091 阅读 · 0 评论