全排列算法

全排列算法

是什么?

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

例如:

如1,2,3三个元素的全排列为:

1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
共3*2*1=6种。

种类?

(1)字典序法(重点)

(2)递增进位制数法

(3)递减进位制数法

(4)邻位对换法

 解法?(根据种类(1))

须知:字典序法是指对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后。

例如:字符集{1,2,3},较小的数字较先输出,

      这样按字典序生成的全排列是:123,132,213,231,312,321(即我们只要将刚开始的字符集进行递增排序好,在进行全排序即可)

思路:如下两张图可知:

 

 

方法:(回溯算法)

复制代码
def quanpaixusuanfa(a,i,c,d):
    if i==c: #若固定的是最后一个元素,则说明整个都固定好了每一个元素。之后将该排序好的一个输出出来
        d.append(a)return
    else:
        for k in range(i,c): #表示确定该位可以固定的元素
            a[i],a[k]=a[k],a[i] #将该位可能出现的元素都进行固定好
            quanpaixusuanfa(b,i+1,c,d) #固定好上一位,则调用该函数进行下一位的元素确定
            a[i],a[k]=a[k],a[i] #将该位的元素回溯回去,来固定其他的元素,是这位的固定元素都是相同的同一个序列进行固定其他元素
a=input()
b=[]
for i in a:
    b.append(i)
c=len(b)
b.sort() #将b列表进行排序,按递增进行排序。使得可以符合字典序列进行输出全排序的结果 quanpaixusuanfa(b,0,c,d) #表示调用该函数quanpaixusuanfa,从第0位(即开头的第一个元素)开始选定
复制代码

 

posted @   天空之城—我的理想国  阅读(117)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示