ruby中对数组的全排列

  • Post author:
  • Post category:其他


全排列,从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列
思路1:将一个数组拆分为前、后两部分,对后数组进行遍历,将遍历到的元素添加进前数组,并从后数组中删除,形成两个新的数组,以这两新数组为参数,进行下一步的递归。采用的是深度优先搜索算法
代码:
def dfs(pre, after)
    if after.length == 0
        yield(pre)
        return
    end
    after.each do |element|
        nextPre = pre.clone
        nextPre << element
        nextAfter = after.clone
        nextAfter.delete(element)
        dfs(nextPre, nextAfter) do |result|
            yield(result)
        end
    end
end

dfs([], [1, 2, 3, 4, 5]) do |result|
    print result
    print "\n"
end
思路2:在思路1的基础上进行优化,思路1的代码中,对pre和after的复制产生了额外的时间和空间开销,于是可以考虑将pre改为栈结构,after改为链表结构(在ruby中全都以数组来实现),在对after的遍历中,



版权声明:本文为qq_26456659原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。