值循环的最小排序

时间:2012-08-18 16:09:09

标签: algorithm sorting graph

给出如下序列:

1,2,1,2,1,1,1,2,1,2,1,3,1,2,1,2,1,3

获得最低排序的高效方法是什么:

1,1,1,2,1,2,1,3,1,2,1,2,1,3,1,2,1,2

蛮力方法很明显所以请不要推荐 - 除非提供令人信服的证据证明蛮力方法是唯一的方法!

更多细节

我有一个生成数字列表的算法。算法的输出是列表/数组,但逻辑上数字代表一个循环,其中只有元素的相对顺序很重要。为了存储这些循环以供稍后比较,我想以这样的方式存储它们:存储的一维数字列表表示循环中元素的最小排序。图片最有用:

Loop

此循环描述了T tetromino周围的路径,其中1向前移动,2向右转,3向左转。无论你从哪里开始,或者你去哪个方向都没关系,按照这18个动作的顺序,你会得到一个T tetromino。产生该循环的算法的输出将返回具有任意起始点和方向的元素。所以返回的数组可能是:

任意初始订购:

1,2,1,2,1,1,1,2,1,2,1,3,1,2,1,2,1,3

Arbitrary order

但是有一个最低排序。它可以从两个不同的电路中获得,反映出T tetromino是对称的这一事实:

最低订购量:

1,1,1,2,1,2,1,3,1,2,1,2,1,3,1,2,1,2

Minimum order

蛮力

明显的蛮力方法是构建所有可能的排序并采取最小化。我的问题是,是否有更聪明有效的方法。

1 个答案:

答案 0 :(得分:4)

这是一个经过充分研究的问题,名为lexicographically minimal string rotation

更好的算法都在O(n)时间运行,而不是天真算法的O(n * n)。