Algorithm 通过动态规划构造最小尺寸的Trie(战争故事:什么&x2019;的过去是Steven s Skiena的算法设计手册中的序言)
我正在阅读史蒂文·斯基纳(Steven S Skiena)的算法设计手册,并试图理解算法问题的解决方案。 这个问题也得到了很好的描述 基本上,问题是,给定一个有序的字符串列表,给出一个最优的解决方案来构造一个最小大小的trie(字符串字符作为节点),约束条件是必须保留字符串的顺序,而字符索引可以重新排序 对于stackoverflow来说,这可能不是一个合适的问题,但是我想知道是否有人可以给我一些关于解决方案的提示,特别是这个循环的参数意味着什么:Algorithm 通过动态规划构造最小尺寸的Trie(战争故事:什么&x2019;的过去是Steven s Skiena的算法设计手册中的序言),algorithm,Algorithm,我正在阅读史蒂文·斯基纳(Steven S Skiena)的算法设计手册,并试图理解算法问题的解决方案。 这个问题也得到了很好的描述 基本上,问题是,给定一个有序的字符串列表,给出一个最优的解决方案来构造一个最小大小的trie(字符串字符作为节点),约束条件是必须保留字符串的顺序,而字符索引可以重新排序 对于stackoverflow来说,这可能不是一个合适的问题,但是我想知道是否有人可以给我一些关于解决方案的提示,特别是这个循环的参数意味着什么: 你可以这样想: 假设我们修复了第一个字符的索引
你可以这样想:
r
bin(bin基本上是子树)C[i_k,j_k]+1
来自m
位置中尝试所有可能的选项注意:假设我们可以独立地对每个子树中的其余字符重新排序,则该算法是正确的。如果不是这样,则动态规划解决方案是不正确的 谢谢!我能理解你的想法。但是我被困在
C[I_k,j_k]
上了。在子运行(bin)中,我们需要选择下一个最佳位置,将子运行划分为多个运行。那么在不知道之前选择的位置的情况下,我们会再次选择它吗?而且,与其他典型的DP算法一样,我认为C[I_k,j_k]
可以在不同的子运行中重用,但是如何重用呢?@user650167是的,我们再次选择它们并重用结果。请您帮忙。再解释一下?或者任何伪代码?