【发布时间】:2015-11-28 15:26:52
【问题描述】:
我有 N 个整数,例如 3、1、4、5、2、8、7。可能有一些重复。我想将此序列划分为连续的子序列,以便我们可以从它们形成非递减序列。如何计算最小切割数?对于上面提到的例子,答案是 6,因为我们可以把这个序列分成 {3}, {1}, {4, 5}, {2}, {7}, {8} 然后形成 {1, 2 , 3, 4, 5, 7, 8}。最快的方法是什么?
假设某些数字可能相等,有谁知道如何解决它?
【问题讨论】:
-
为什么这个问题被标记为图论或多重集?例如,如果您认为图表在这里有用,请与我们分享您的发现。就目前而言,您的问题没有显示任何努力或研究
-
我将其标记为图论,因为许多看起来与图无关的难题在图论中都有解决方案。我不知道如何解决这个问题。
-
@Paul 不,不是。看一下这个例子:3、1、4、5、2、8、7。您的算法会将其划分为 {3}、{1、4、5}、{2、8}、{7},但是我们不能用这些片段制作一个非递减的序列。
-
这可以被认为是一个决策问题,因为您可以将问题重新表述为:这是我可以对该序列进行的最小切割次数吗?在这种情况下,这可能是 NP-Complete,但我可以看到一些伪多项式动态规划的可能性。
标签: algorithm graph-theory set-theory