Algorithm 带区间调度的回文划分
所以我在研究解决回文划分问题的各种算法。 就像字符串“banana”的最小剪切数一样,每个子字符串的回文数都是1,即“b | anana” 现在,我尝试使用间隔计划解决此问题,如: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
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,…,一个
:
- 每个集合的并集
给出集合SA1。。。一个
- 任何
(与Ai,Aj
)之间的交点为空i!=j
此外,一个字符串始终至少有一个回文分区:在最坏的情况下,您会得到一个由单个字符组成的回文分区。是的,绘制的图形可以这样总结。Thanks@quintin在这个问题上你还需要帮助吗?