Algorithm 基于某些条件的安全阵列分区

Algorithm 基于某些条件的安全阵列分区,algorithm,dynamic-programming,computer-science,Algorithm,Dynamic Programming,Computer Science,我正在努力解决这个问题。问题可以概括为: 给定一个整数序列,找不到安全分区,其中安全分区定义为: 安全分区是将子序列S1、S2、…、SK划分为每个有效i、minSi的分区≤|硅|≤maxSi-即,对于该分区中的每个子序列,其长度大于或等于其最小元素,小于或等于其最大元素。 例: 我可能会在互联网上的某个地方找到解决方案,其中包括代码,但我更感兴趣的是找到解决这个问题的方法,所以我在这里问,我在观察中遗漏了哪些要点 当我读到这个问题时,我脑海中闪现出以下几点: 如果索引i处的元素安全地扩展序列,则

我正在努力解决这个问题。问题可以概括为: 给定一个整数序列,找不到安全分区,其中安全分区定义为:

安全分区是将子序列S1、S2、…、SK划分为每个有效i、minSi的分区≤|硅|≤maxSi-即,对于该分区中的每个子序列,其长度大于或等于其最小元素,小于或等于其最大元素。 例:

我可能会在互联网上的某个地方找到解决方案,其中包括代码,但我更感兴趣的是找到解决这个问题的方法,所以我在这里问,我在观察中遗漏了哪些要点

当我读到这个问题时,我脑海中闪现出以下几点:

如果索引i处的元素安全地扩展序列,则其 可能它也可能是一个新序列的开始 每个元素我都有两个选择是否扩展 顺序与否。 所以我认为它可以用数学来表示

p(0..N)=1+P(i..N)+P(i+1..N),if A[i] is safe to extend current partition
p(0..N)=1+ p(i..N), if A[i] can't be used to extend 
其中p是配分函数。
这个理由正确吗?我遗漏了什么吗?

[我很难在没有给出解决方案的情况下给出一个方向,因为一旦一个人朝着正确的方向思考,那么解决方案就会变得明显。我将尝试强调一些可能让一个人走上正确轨道的事实。]

显式枚举安全分区是有问题的,因为存在O2n个安全分区。例如:

1,N,1,N,1,N ... [N elements]
对于该序列,在长度大于1的任何子序列处,子序列[1]与标准匹配。对于这种长度为n=2k的序列,安全分区的数量为3k-1。要证明这一点,请看以下内容

基准k=1:f1=f2=1

步骤假设:f2k=3k-1

f2k+1= f2k+2=f2k+f2k-1+f2k-2+f2k-3+…+f1+1 =2*f2k+f2k-2+..+f2+1 =2*3k-1+3k-2+…+1 + 1 =2*3k-1/2+1 =3k

由于枚举是不可能的,因此对于任何合理的性能,解决方案必须以某种方式计数而不进行迭代。由于1,N,…,1,N具有3k-1的证明不必显式地枚举所有序列,因此其原理可以推广到任何序列

注:

我以前解决过类似的问题,所以方向对我来说很清楚。对于这个问题,我试图将我的想法分解成一些可管理的东西,并提出了关于复杂性的想法。我有一个非常强烈的感觉,这是指数甚至在写下来,并试图证明它。这来自经验和看到其他问题。复杂性函数感觉比斐波那契更糟糕,因为向序列中添加一个元素似乎至少添加了两个大小较小的元素,类似于斐波那契序列。因为斐波那契是指数的,所以1,…,1分区必须是指数的。然后用递推关系对其进行了分析

我得出答案的确切方式与我的想法相符。每个人都有不同的思维方式,他们需要发展并找到它

这就是为什么我怀疑tge示例中的安全序列数是3k-1:

我递归地计算了f2k,基本条件f1=f2=1。那么对于3:

[1,N,1]
[1],[N,1]
[1,N],[1]
至于第四项:

[1,N,1,N]
[1],[N,1,N]
[1,N],[1,N]
意思是f3=f4=3。然后我递归地应用

f2k+2=2*f2k+f2k-2+..+f2+1


结果是f2=1,f4=3,f6=9,f8=27。这看起来像3k-1。然后我只需要用归纳法来证明这一点。

谢谢你把事情弄清楚,我会讲清楚的。你能告诉我你是如何得出f2k=3^k-1的吗。证明这一点有助于验证它是否适用于所有n,但对我来说,达到这个关系似乎很困难。或者这是一个已知的标准关系?它不是一个标准关系,只是证明中的几何级数之和。在答案的末尾添加了一个注释,详细说明了我对3^{k-1}@anekix的思考过程。我没有说的是,在进行证明之前,我脑子里有一个算法的草图。我有一种感觉,大多数程序员不是从证明开始,而是从算法的基本思想开始。但是证明和算法的思维方式有很多共同点,特别是在复杂度很重要的情况下。
[1,N,1,N]
[1],[N,1,N]
[1,N],[1,N]