【发布时间】:2014-07-07 10:57:09
【问题描述】:
我想生成一种算法,用于按特定顺序排列不同数字的列表。
示例:-
数字是
1 2 3 4
排列顺序是
3 1 4 2
即排列后第一个数字将排在第三位,第二位到第一位,第三位到第四位,第四位到第二位。
现在数字的顺序将是
2 4 1 3
现在,如果算法继续按相同顺序进行排列,那么经过一些迭代后,它将生成相同的输入数字序列并停止。对于这种情况,总迭代次数为 4。
2 4 1 3
4 3 2 1
3 1 4 2
1 2 3 4
我通过使用另一个数组tmp[] 和另外两个名为number[] 和order[] 的数组来做到这一点。现在我只是在tmp[] 中复制number[] 的元素,方法是维护order[] 中特定元素的位置顺序,并在下一次迭代之前检查相同的数字序列。如果需要另一次迭代,那么
number[]=tmp[],算法会重复前面的步骤。
现在,如果元素的数量很大,例如10^7 或更高,则此方法运行缓慢。
有没有更好的方法来求迭代次数?
【问题讨论】:
-
你想用什么语言来做这个?
-
您是否需要实际生成排列列表,还是只想计算步数,然后得出第一个排列?
-
我想要更好的算法。语言无关紧要。
-
您可以尝试就地排序,这可能会更快,因为您不必一直复制,尽管它的复杂性更差
O(n log n)而不是O(n)。 -
这相当于当前 CodeChef 竞赛中的一个问题:codechef.com/JULY14/problems/SGARDEN。请等到 7 月 14 日比赛结束后再回答。
标签: arrays algorithm permutation