算法--计算给定不重复的数的排列个数

如题,有什么比较快的方法可以计算给定1-9 9个数字的排列个数呢

比较土的算法:

1 定义一个1维数组,【1,2,3,4,5,6,7,8,9】
2 定义一个集合A,用来存储每个排列,一个排列就是一个有序的集合
2 遍历数组,用剩作的8个数,进行递归调用,返回一个包含8位数排列的集合,把当前的数字加入到每个排列的前部,当递归到最后一个数字时,停止递归
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
⼈⼯智能_遗传算法 遗传算法 遗传算法介绍   遗传算法是⼀种模拟⽣命进化机制的搜索和优化⽅法,是把⾃然遗传学和计算机科学结合起来的优化⽅程,有很强的解决问题的能⼒和 ⼴泛的适应性。其假设常描述为⼆进制位串,位串的含义依赖于具体应⽤。搜索合适的假设从若⼲初始假设的群体集合开始。当前种群成员 通过模仿⽣物进化的⽅式来产⽣下⼀代群体,如随机变异和交叉。每⼀步,根据给定的适应度评估当前群体的假设,⽽后使⽤概率⽅法选出 适应度最⾼的假设作为产⽣下⼀代的种⼦。 遗传算法的⼏个基本概念   (1)染⾊体(Chromosome):在使⽤遗传算法时,需要把问题的解编成⼀个适合的码⼦。这种具有固定结构的符号串既是染⾊ 体,符号串的每⼀位代表⼀个基因。符号串的总位成为染⾊体的长度,⼀个染⾊体就代表问题的⼀个解,每个染⾊体也被称为⼀个个体。   (2)群体(Population):每代所产⽣的染⾊体总成为群体,⼀个群体包含了该问题在这⼀代的⼀些解的集合。   (3)适应度(Fitness):对群体中每个染⾊体进⾏编码后,每个个体对应⼀个具体问题的解,⽽每个解对应于⼀个函值。该函值 即适应函,就是衡量染⾊体对环境适应度的指标,也是反映实际问题的⽬标函    基本的遗传操作   (1)选择(Select):按⼀定的概率从上代群体中选择M对个体作为双亲,直接拷贝到下⼀代,染⾊体不发⽣变化。   (2)交叉(Crossover):对于选中进⾏繁殖的两个染⾊体X,Y,以X,Y为双亲作交叉操作,从⽽产⽣两个后代X1,Y1.   (3)变异(Mutation):对于选中的群体中的个体(染⾊体),随机选取某⼀位进⾏取反运算,即将该染⾊体码翻转。   ⽤遗传算法求解的过程是根据待解决问题的参集进⾏编码,随机产⽣⼀个种群,计算适应函和选择率,进⾏选择、交叉、变异操 作。如果满⾜收敛条件,此种群为最好个体,否则,对产⽣的新⼀代群体重新进⾏选择、交叉、变异操作,循环往复直到满⾜条件。 TSP问题   所谓TSP问题(旅⾏商问题)即最短路径问题就是在给定的起始点S到终⽌点T的通路集合中,寻求距离最⼩的通路,这样的通路成为S 点到T点的最短路径。在寻找最短路径问题上,有时不仅要知道两个指定顶点间的最短路径,还需要知道某个顶点到其他任意顶点间的最短 路径。⽤遗传算法解决这类问题,没有太多的约束条件和有关解的限制,因⽽可以很快地求出任意两点间的最短路径以及⼀批次短路径。 TSP问题的遗传算法设计与实现   (1)编码问题:由于这是⼀个离散型的问题,我们采⽤整编码的⽅式,⽤1-n来表⽰n个城市,1-n的任意⼀个排列就构成了问 题的⼀个解。可以知道,对于n个城市的TSP问题,⼀共有n!种不同的路线。   (2)种群初始化:对于N个个体的种群,随机给出N个问题的解(相当于是染⾊体)作为初始种群。这⾥具体采⽤的⽅法是:1,2, …,n作为第⼀个个体,然后2,3,…n分别与1交换位置得到n-1个解,从2开始,3,4,…,n分别与2交换位置得到n-2个解,依次类推。(如 果这样还不够初始种群的量,可以再考虑n,n-1,…,1这个序列,然后再按照相同的⽅法⽣成,等等)   (3)适应度函:设⼀个解遍历初始⾏⾛的总距离为D,则适应度fitness=1/D.即总距离越⾼,适应度越低,总距离越低(解越 好),适应度越⾼。   (4)选择操作:个体被选中的概率与适应度成正⽐,适应度越⾼,个体被选中的概率越⼤。这⾥仍然采⽤轮盘赌法。选择作为交叉的 双亲,是根据前代染⾊体的适应函值所确定的,质量好的个体,即从起点到终点路径长度短的个体被选中的概率较⼤。交叉率不可选择过 ⼩,否则,延缓获得最优解的过程,本程序选择 =0.85。   (5)交叉操作:交叉操作是遗传算法最重要的操作,是产⽣新个体的主要来源,直接关系到算法的全局寻优能⼒,这⾥采⽤部分映射 交叉。⽐如对于n = 10的情况,对于两个路径:           1  2 4  5  6  3  9  0  8   7           3  9 7  6  8  0  5  1  2   4   随机产⽣两个[1,10]之间的随机r1,r2,代表选择交叉的位置,⽐如r1 = 2,r2 = 4,如上图划线的位置,将第⼀个个体r1到r2之间 的基因(即城市序号)与第⼆个个体r1到r2之间的基因交换,交换之后变为:           1  9  7  6  6  3  9  0  8  7           3  2  4  5  8  0  5  1  2  4   划线部分表⽰交叉过来的基因,这个时候会发现可能交叉过来的基因与原来其他位置上的基因有重复,容易直到,第⼀个个体重复基因 的⽬与第⼆个个体重复基因的⽬是相同

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值