我正在阅读“算法简介:创造性的方法”,并在第一章中回答了这个问题:
问题1.3:你有一个数字列表,删除尽可能少的数字,使剩余的数字按递增的顺序排列。
例如,给定数组
9 44 32 12 7 42 34 92两个可能的选项是9 12 42 92和32 42 92,前者删除的数字较少。
我尝试了一种递归算法,但对它的性能不满意,因为它仍然需要测试太多的组合。我发现了一种启发式算法,它可以快速获得好的结果,但我不确定它是否能保证最好的结果。我在网上搜索,但没有找到关于这个问题的任何讨论。我认为应该有一个更好的算法。
我编写了我的两个方法这里,以防您需要检查。
更新:我在问这个问题的解决方案,@josilber和@templatety胡枝子给出了链接和正确的方向。事实证明,这是一个已知问题家族的特例,具有很好的解决方案。这里没有必要写详细的解决方案,维基页面的子序列最长,耐心排序提供了详细的信息。
值得注意的是,虽然答案有一些联系,但这个问题并不是关于询问资源或链接。真正的答案是“这个问题是一些已知问题的变体”的知识。
发布于 2014-08-16 19:18:14
作为一种暗示,这相当于找到数组中最长的递增子序列(您知道为什么吗?)因为这是一个具有已知O( known )解的标准算法,您应该能够通过稍微修改LIS来解决这个问题。
希望这能有所帮助!
https://stackoverflow.com/questions/25342775
复制相似问题