字符串假设你有一个函数quality(x)
返回字母x
序列的质量。给定一个字符串,如“howareyoutoday,”什么是最有效的方式来确定分割是“你今天怎么”(即品质(如何)+质量(是)+质量(你)+质量(今天)是最高质量可能)?分割使用动态规划
我在想,我们可以有类似如下:
A[0] = h, A[1] = o, ..., A[n] = y
Q[0] = quality(A[0]), Q[1] = quality(A[0]A[1]), ..., Q[n] = quality(A[0]...A[n])
我们确定的分割,我们发现最大{Q [0],...,Q [N]},它会返回一些Q [我](第一个空间在此之后)。然后,我们找到返回另一个Q [i]的最大{Q [i + 1],... Q [n]}(等于此之后的第二个空间)等,直到最大返回Q [n]。
我有两个问题:这是否方法使用动态编程?在我看来,它确实如此,因为我们用最初的问题的子问题构建了初始Q值。此外,这是一个最佳的解决方案?据我了解,最坏的情况将是为O(n^2),最大时返回Q [0],那么Q [1],然后Q [2]等
此问题可能更适合[理论上的CS Stack Exchange](http://cstheory.stackexchange.com/)和[CS Stack Exchange](http://cs.stackexchange.com/) – 2014-10-04 03:49:02
有一个我想这里的问题很少。首先,找到第一个单词后(假设它是“如何”),你说你想找到最大{Q [i + 1],..,Q [n]}(我假设你的意思是i + 1 ,而不是i + i) - 但这意味着质量()将在整个字符串上被调用,即质量(“howa”),质量(“howar”),质量(“howare”)等。 – 2014-10-04 03:57:04
Second ,这似乎是一种贪婪的方法,不一定会给你提供最佳的解决方案,因为你决定在哪里做第一次休息,而不考虑这可能会如何影响下游决策。例如。对于字符串“theredcar”,你会希望第一个单词是“the”,但对于字符串“thereitgoes”它应该是“there”。如果你给“有”低于“该”的质量分数,那么你的算法在第二个输入中总是错误的,而如果你给它一个更高质量的分数,它总是在第一个上是错误的 - 你必须*看看字符串的其余部分来决定。 – 2014-10-04 04:03:46