字符串中的Booth算法

时间:2012-07-26 18:52:48

标签: c string algorithm

我尝试在O(n)时间内使用problem在SPOJ中解决此Booth Algorithm,但它失败了虽然它适用于我尝试的所有测试用例。
然后我在O(n ^ 2)时间用Brute force方式做了,它起作用了。我已经附上了两个案例的代码,告诉我哪里出错了,或者Booth算法是否正确解决了这个问题?

不是问题,找到按字典排序的最小字符串的最小旋转

对于第一种方法,Booth算法:http://ideone.com/J5gl5
对于第二种方法,蛮力:http://ideone.com/ofTeA

1 个答案:

答案 0 :(得分:5)

例如,您的算法为字符串“ABAED”提供了错误的答案。

您的算法返回7(即使这比字符串长!)。

正确的答案是0。

(注意这个错误也可能出现在您找到算法描述的任何地方!如果您查看wikipedia article的历史/讨论,有很多修改错误的修改 - 都声称要修复错误在原始论文中,并修复错误修复中的错误...)

如果你更换它似乎工作得更好:

if( lst[i] < lst[ans+i+1] )

if( lst[j] < lst[ans+i+1] )