Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 通过动态规划构造最小尺寸的Trie(战争故事:什么&x2019;的过去是Steven s Skiena的算法设计手册中的序言)_Algorithm - Fatal编程技术网

Algorithm 通过动态规划构造最小尺寸的Trie(战争故事:什么&x2019;的过去是Steven s Skiena的算法设计手册中的序言)

Algorithm 通过动态规划构造最小尺寸的Trie(战争故事:什么&x2019;的过去是Steven s Skiena的算法设计手册中的序言),algorithm,Algorithm,我正在阅读史蒂文·斯基纳(Steven S Skiena)的算法设计手册,并试图理解算法问题的解决方案。 这个问题也得到了很好的描述 基本上,问题是,给定一个有序的字符串列表,给出一个最优的解决方案来构造一个最小大小的trie(字符串字符作为节点),约束条件是必须保留字符串的顺序,而字符索引可以重新排序 对于stackoverflow来说,这可能不是一个合适的问题,但是我想知道是否有人可以给我一些关于解决方案的提示,特别是这个循环的参数意味着什么: 你可以这样想: 假设我们修复了第一个字符的索引

我正在阅读史蒂文·斯基纳(Steven S Skiena)的算法设计手册,并试图理解算法问题的解决方案。 这个问题也得到了很好的描述

基本上,问题是,给定一个有序的字符串列表,给出一个最优的解决方案来构造一个最小大小的trie(字符串字符作为节点),约束条件是必须保留字符串的顺序,而字符索引可以重新排序

对于stackoverflow来说,这可能不是一个合适的问题,但是我想知道是否有人可以给我一些关于解决方案的提示,特别是这个循环的参数意味着什么:
你可以这样想:

  • 假设我们修复了第一个字符的索引。根据此位置的字符值,所有字符串都会被拆分为
    r
    bin(bin基本上是子树)

  • 我们可以独立处理每个箱子。它不会改变不同存储箱之间的顺序,因为不同存储箱中的两个字符串在第一个字符中是不同的

  • 因此,我们可以独立地解决每个箱子的问题。之后,我们只需要一条边将根连接到每个bin(即子树)。这就是公式
    C[i_k,j_k]+1
    来自

  • 由于我们希望最小化边的总数,并且可以自由选择第一个位置,因此我们只需在
    m
    位置中尝试所有可能的选项


  • 注意:假设我们可以独立地对每个子树中的其余字符重新排序,则该算法是正确的。如果不是这样,则动态规划解决方案是不正确的

    谢谢!我能理解你的想法。但是我被困在
    C[I_k,j_k]
    上了。在子运行(bin)中,我们需要选择下一个最佳位置,将子运行划分为多个运行。那么在不知道之前选择的位置的情况下,我们会再次选择它吗?而且,与其他典型的DP算法一样,我认为
    C[I_k,j_k]
    可以在不同的子运行中重用,但是如何重用呢?@user650167是的,我们再次选择它们并重用结果。请您帮忙。再解释一下?或者任何伪代码?