1、生成排列

n个正整数组成的集合{1,2,...,n}有n!个排列

如何生成全排列?

组合数学新算法:交错插入法。

简单来说,一次次生成{1}到{1,2}到{1,2....n}所有的排列,用当前排列生成下一个排列。具体操作是:

给定一个整数,我们赋予它一个方向(direction),即在这个整数的上方画出一个指向右或指向左的箭头。考虑{1,2,...,n}的一个排列,其中的每一个整数都给定一个方向。如果一个整数k的箭头指向一个与其相邻但比它要小的整数,那么称这个整数k是可移动的(mobile)。

生成{1,2,...n}的排列的算法

以{1,2,...,n}开始:

当存在1个可移动整数时,完成以下事情:

(1)找到最大的移动整数m。

(2)交换m和它的箭头所指向的与它相邻的整数。

(3)将所有满足p>m的整数p上的方向切换方向(改变p箭头方向)。 如图

因为2134没有可移动数算法终止。

2、排列中的逆序

举个例子:31524逆序列为12010 无序程度为4

算法1:

n: 把n写下来。

n-1:考虑b_{n-1} ,我们知道0⩽b_{n-1}⩽1 , 如果b_{n-1}=0 ,那么n-1 必须放在n 之前。如果b_{n-1}=1 ,那么n-1 必须放在n 之后。

n-2:考虑bn-2如果bn-2=0,则n-2必须放在步骤n-1的两个数字之前。如果bn-2=1,则n-1必须放在两个数字之间。如果为2,n-2必须放在由步骤n-1得到两个数的后面。

3、生成组合

1)二进制数法:n元集合组合与长度为 n 的二进制数一一对应

组合数学 ch4 生成排列和组合相关推荐

  1. python把list的所有元素生成排列和组合

    2019独角兽企业重金招聘Python工程师标准>>> 生成排列可以用 itertools.product: from itertools import product l = [1 ...

  2. 组合数学(四)生成排列和组合

    文章目录 全排列的生成 序数法 字典序法 回溯法 插入法 JohnsonTrott算法(换位法) 全排列的生成 利用LeetCode46题全排列来验证一下是否正确 序数法 这个方法把n!个排列与0n! ...

  3. python 生成排列、组合以及选择

    from <python cookbook> 19.15 任务 需要对一个序列的排列(permutation).组合(combination)或选择(selection)进行迭代操作.即使 ...

  4. 组合数学基本工具-- 排列与组合以及简单公式

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

  5. 组合数学 多重集的排列和组合

    多重集: 元素可以重复出现 对于无穷元素来说: 特例: 当n=2时,只有两类,那么全排列可以视为从k个里面选择k1个元素

  6. 组合数学 | 排列与组合

    组合数学是研究按一定方式配置一组事物的存在情况 目录 加法法则和乘法法则 一一对应 排列与组合 圆周排列 排列的生成算法 允许重复的组合和不相邻的组合 加法法则和乘法法则 组合数学最主要的内容是对离散 ...

  7. 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )

    文章目录 一.排列组合内容概要 二.选取问题 三.集合排列 四.环排列 五.集合组合 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排 ...

  8. 算法之组合数学及其算法篇(一) ----- 排列与组合

    组合数学及其算法篇 前言 排列与组合 无重集的排列与组合 无重集的排列 应用例子 无重集的组合 应用例子 重集的排列和组合 重集的排列 重集的组合 前言 组合数学研究的对象是组态.所谓组态就是指若干个 ...

  9. 组合数学_排列与组合

    加法原理 完成一件事情,有N类方式去实现,第一类方式有 a 1 a_1 a1​种,第二类方法有 a 2 a_2 a2​种,-,第N类方法有 a n a_n an​种,则完成这件事情的总方法数为: ∑ ...

最新文章

  1. 设置MySQL/MariaDB 数据库默认编码为utf8mb4 (推荐)
  2. linux: convmv =-======pkgs.org
  3. C#之windows桌面软件第十一课:电脑ADC值显示(上位机)(多通道显示)
  4. android 从零单排 第一期 按键显示helloworld
  5. ALGO-1 区间k大数查询
  6. 云计算odps使用笔记(一)环境搭建
  7. EventBus的使用
  8. 【CVPR 2019】Strong-Weak Distribution Alignment for Adaptive Object Detection
  9. Django 创建超级用户
  10. 四川农大2020计算机专业录取分数线,四川农业大学2020年在全国各省市分专业录取分数线!含艺体类!...
  11. 【转载】卸载Sql Server 2014数据库
  12. PDMS Pipeline Tool 教程(七):错误代码
  13. EJB到底是什么?(通俗易懂白话文)
  14. java for冒号_浅谈对Java双冒号::的理解
  15. 十二届蓝桥杯Scratch国赛试题
  16. 2.Hadoop 生态圈及核心组件简介
  17. 用动态规划算法实现最长公共子序列问题的算法(java实现)
  18. 2022网络安全学习路线 非常详细 推荐学习
  19. iPhone删除面部解锁忘记了密码
  20. 春运赶火车小心这些骗术

热门文章

  1. 【微积分的本质|笔记】绪论——微积分中的核心思想
  2. metalink 使用向导(整理点metalink使用资料)
  3. oracle坏块 戴明明,Oracle数据库问题解决方案和故障排除手册
  4. 前端ps动态小图标制作方法
  5. 自费访问学者申请需要哪些材料?
  6. cocos 2dx使用webView
  7. 路内停车物联网扫码支付平板车位锁(技术调研)
  8. 加息点阵图与贵金属白银走势
  9. 素材网站大集合(转)
  10. 安卓Android学生考勤请假销假系统app