- 博客(7)
- 收藏
- 关注
原创 详解Huffman编码 - Java实现
关于Huffman编码的具体定义可参考《算法导论》P245 Huffman Tree节点定义: abstract class AbstractNode { protected int weight; protected abstract AbstractNode setWeight(int weight); protected abstract int getWeight(); protected AbstractNode(int weight) { .
2020-06-15 14:17:27 358
原创 详解dp - 最长回文子序列
给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。 类似问题 : 最长回文子串 首先找出状态转移方程 : table[i][j] = table[i+1][j-1] + 2, if s[i] == s[j] ; else table[i][j] = max(table[i+1][j], table[i][j-1]),同最长回文子串的求解方法进行求解 code : class Solution { public int longestPalin
2020-06-14 21:59:18 481
原创 详解 dp - 最长回文字串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 思路 : 先给出状态转移方程,然后分别由备忘递归或者dp求解;本题中,对于任意的两个合法下标 i - j,table[i][j] = table[i+1][j-1] && (s[i] == s[j]) , 考虑边缘情况,由于这个表达式只能适用于长度 >= 3的字符串,考虑长度 == 1的字符串,table[i][i] = true,考虑长度 == 2 的字符串 : table[i][j] = s[
2020-06-14 21:53:22 271
原创 钢条切割问题 - Java实现(递归,备忘录递归,动态规划)
因为这个问题比较简单,就不给详细解答,直接贴代码了 public class RodCut { public static void main(String[] args) { int [] price = {0,1,5, 8,9,10,17,17,20,24,30,34,38,43,47,50,57,62,63,64,65,66,67,68,69,70, 71, 82}; final int num = price.length - 1; int[]
2020-06-14 21:35:04 450 1
原创 最优二叉搜索树 - Java实现(递归,带备忘录递归,动态规划)
对于一个给定的概率集合,我们希望构造一棵期望搜索代价最小的二叉搜索树,我们称之为最优二叉搜索树 最近复习了一下算法导论的动态规划,发现最优二叉搜索树的实现方法与矩阵链连乘问题极其相似。 根据动态规划bottom -> top的思想,我们应该从length = 1的情况逐渐求解到length = n的情况,对于每一个i = length,我们从起始位置 j = 1开始,加上length -...
2020-05-06 21:33:38 1323
原创 详解矩阵链乘法问题 - Java实现版本(递归与动态规划)
矩阵链乘法问题:给定n个矩阵的链<A1,A2,…,An>,矩阵Ai的规模为pi-1*pi(1<=i<=n),求完全括号化方案,使得计算乘积A1A2…An所需标量乘法次数最少 看到这种具有最优子结构的问题,第一时间就应该想到使用动态规划的思想来解决,假设dp[i][j]是Ai…Aj的最小代价括号化子问题,当i==j时是同一矩阵不需要相乘,所以dp[i][i] = 0 ( ...
2020-04-22 01:24:59 978
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人