Algorithm 带区间调度的回文划分

Algorithm 带区间调度的回文划分,algorithm,scheduling,intervals,partitioning,palindrome,Algorithm,Scheduling,Intervals,Partitioning,Palindrome,所以我在研究解决回文划分问题的各种算法。 就像字符串“banana”的最小剪切数一样,每个子字符串的回文数都是1,即“b | anana” 现在,我尝试使用间隔计划解决此问题,如: Input: banana Transformed string: # b # a # n # a # n # a # P[] = lengths of palindromes considering each character as center of palindrome. I[] = interval

所以我在研究解决回文划分问题的各种算法。 就像字符串“banana”的最小剪切数一样,每个子字符串的回文数都是1,即“b | anana”

现在,我尝试使用间隔计划解决此问题,如:

Input: banana
Transformed string:  # b # a # n # a # n # a #  
P[] = lengths of palindromes considering each character as center of  palindrome.
I[] = intervals

String: # b # a # n # a # n #  a  #
P[i]:   0 1 0 1 0 3 0 5 0 3 0  1  0
I[i]:   0 1 2 3 4 5 6 7 8 9 10 11 12
示例:以“a”(索引7)为中心的回文是5“anana”

现在基于p[i]为每个字符构造间隔:

b = (0,2)
a = (2,4)
n = (2,8)
a = (2,12)
n = (6,12)
a = (10,12)
现在,如果我必须在时间0到12上安排这么多的时间间隔,这样可以安排最少的时间间隔,并且没有时间间隔是空的,我会选择(0,2)和(2,12)时间间隔,因此解决方案的答案是1,因为我已经将给定的字符串分解为两个回文

另一个测试用例:

String: # E # A # B # A # E #  A  #  B  # 
P[i]:   0 1 0 1 0 5 0 1 0 5 0  1  0  1  0
I[i]:   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
在图形上绘图:

现在,可以安排的最小间隔数为: 1(0,2)、2(2,4)、5(4,14)或 3(0,10),6(10,12),7(12,14)

因此,我们有3个分区,因此切割的数量也将是2

E|A|BAEAB 
EABAE|A|B
这些只是例子。我想知道这个算法是否适用于所有情况,或者在某些情况下它肯定会失败

请帮助我证明它在任何情况下都有效

注意:如果这篇文章毫无意义,请不要劝阻我,因为我已经在这个问题上投入了足够的时间和精力,请说明原因或提供一些链接,让我可以继续解决这个问题。多谢各位


只要你能得到字符串的一个分区,你的算法就会工作

回想一下,集合
S
的部分
p
是一组非空子集
A1,…,一个

  • 每个集合的并集
    A1。。。一个
    给出集合S
  • 任何
    Ai,Aj
    (与
    i!=j
    )之间的交点为空
即使回文分区处理字符串(与集合稍有不同),分区的属性仍然正确。 因此,如果你有一个分区,那么你就有了一组没有“洞”的时间间隔。 选择具有最小子集数的分区,可以使时间间隔数最少,因此切割数最少


此外,一个字符串始终至少有一个回文分区:在最坏的情况下,您会得到一个由单个字符组成的回文分区。

是的,绘制的图形可以这样总结。Thanks@quintin在这个问题上你还需要帮助吗?