这里我们使用

“箭头”

的方式来进行排列的讲解

比如给个三位数字【1,2, 3】求有多少种组合方式:
结果其实很简单:123 132 213 231 312 321 无非就是这六种

用代码实现的话普遍时间复杂度在大于 O(n!),小于 O(n∗n!)

这里我要讲的是另外一种方式,主要是靠“移动”来进行排列的负责度只有O(n!)

这里用三位数来讲解一下
[1,2,3]

先文字说明一下,后面代码实现

这里的话要实现移动排列的话首先要明白这两个步骤的意思:(主要按照下面图一、
图而来说明)
步骤1、找到最大能够移动的数字(图一)最大:不一定是数组中最大的,而是需要能够移动的最大的数字;能够移动:(1):箭头代表方向,首先这个数字头上箭头所指的方向必须要有数字,比如(参考下面图一):3头上箭头指向左边,左边还有5,4两个数字,这个可以,又比如4头像箭头指向左边,但是左边没有数字,所以4不满足条件,不能够移动(但是最后能不能移动还不能只靠有没有数字来决定,还需要第二个条件,如下)(2):除了箭头所指的方向有数据以外,还要要求箭头所指方向的数据要比当前数小才行,比如(参考下面图一):在第一个条件中说到3可以移动,但是他不满足第二个条件,因为3的箭头是向左边的,左边的数据5大于3,所以3不能移动。下图中唯一可以移动的是5,说明:5的箭头是向右的,右边右数据,满足第一个条件,右边的数据是3,比5小,满足第二个条件,所以5可以移动
步骤2、每次向左或者向右移动一位的时候需要做的两件事:(图二)(1):移动的话需要调换两个数的位置(2):然后就是把  比当前移动的数大的其它数的箭头掉转方向说明(参考下面图二)每一次移动都要满足上面两个步骤才算是成功移动

图一

图二

正式开始排列了


一直移动,直到没有数可以移动了就好了,所以只有六种

代码没有去实现,后期补上,你们可以试着去敲一下,

n个数字生成排列组合对象的算法(Johnson-Trotter)相关推荐

  1. 算法:数字的排列组合问题

    数字的排列组合问题 例子:给定一个集合{1,2,3},让你给出所有的可能的长度为三的组合情况. 组合中允许存在重复数字 组合中不允许存在重复数字 分析:这种问题肯定是要用到dfs,说到dfs最重要的就 ...

  2. TIA博途SCL编程学习21_4个数字中的3个数字的排列组合

    从四个数字中选出三个,一共有多少组合?不重复的 排列组合问题.从四个数字中选出三个,一共有C(4,3)=4*3*2/3*2*1=4种组合. 排列组合问题联系实际且生动有趣,但题型多样,思路灵活,因此解 ...

  3. c语言编程数字字母排列组合,如何编程实现排列组合

    怎么编程实现排列组合? 例如 编程实现从5人里面随机选3个人出来.有多少种不同的选法? 该如何编写? 需要用到 头文件MATH.H吗,若不用到该怎么写? 谢谢! ------解决方案--------- ...

  4. Python 字符串和数字的排列组合,无重复

    字符串的排列组合 def perms(s=''): if len(s)<=1: #长度为1的字符串,排列组合就是自己 return [s] sl=[] #放结果 for i in range(l ...

  5. 生成组合对象的算法——Johnson-Trotter算法的python实现

    伪代码是Anany Levitin 著作的<算法设计与分析基础> ,初学代码,发现网上几乎没有Johnson-Trotter算法的python实现,所以自己根据伪代码琢磨了一下,写了这个代 ...

  6. python生成排列组合_Python 排列组合生成

    zckun:老哥们, 请教一个问题, 是关于排列组合的, 前几天和老哥们讨论了一下, 能是能解决, 但感觉不太方便 看一个简单的例子应该就明白了. to 目前是我这样做的, 用了一个模版 templa ...

  7. n个自然数中取出r个数字的排列组合(python)实现

    '''找出n个自然数(1,2,3,4,...,n)取出r个数的组合 例: 当n=5时,r=3时,所有组合为: 1 2 3: 1 2 4: 1 2 5: 1 3 4: 1 3 5: 1 4 5: 2 3 ...

  8. c语言编程数字字母排列组合,用简单的排列组合解决字符排列问题 (C语言代码)...

    解题思路: 先计算出所有字符的排列总数,再除以重复字母的排列数 注意事项: 参考代码:#include int main() { int len,i,j,m,n=1,a[26]={0};        ...

  9. python 排列组合_Python 实现排列组合中 nCr 算法

    前言 本文提供一种使用 Python 计算 组合公式 nCr 比较高效的算法. 环境 Python 2.7. 公式中,n为下角标,m为上角标. C(n, m) = A(n, m) / m! = n! ...

最新文章

  1. RabbitMQ 入门系列(9)— Python 的 pika 库常用函数及参数说明
  2. Google图嵌入工业界最新大招,高效解决训练大规模深度图卷积神经网络问题
  3. ECharts的简单使用过程
  4. Summary of the Academic English Class
  5. 2-2 工程源码文件结构
  6. C++基础知识(五)—— 基本输入输出
  7. 智慧交通day02-车流量检测实现03:辅助功能(交并比and候选框的表现形式)
  8. 大数据、云计算、AI大牛都在这里了,就等你来捞干货
  9. 连续自然数和(洛谷-P1147)
  10. 二、Spring MVC之常用注解
  11. Centos7没有ip地址
  12. Matplotlib随记2
  13. IntelliJ IDEA 初始化项目时No Java SDK Found
  14. linux 域名怎么平台,linux平台搭建DNS域名服务与常用配置
  15. 多线程之Lock锁和读写锁ReadWriteLock
  16. python实时语音转写_语音识别 - 实时语音转写 - 《科大讯飞REST_API开发指南》 - 书栈网 · BookStack...
  17. 水质检测c语言程序,单片机TDS水质检测源程序
  18. 服务器 多显卡 显示器,一台主机接多个显示器,居然有三种方法实现,提高工作效率的神器...
  19. 程序员课外拓展001:EI收录号Accession number中的数字的含义
  20. 资源分享——免费的高端PPT模板网址

热门文章

  1. VS +QT 手动添加Q_OBJECT 报错问题解决
  2. 浅谈OSI七层模型及ICP/IP四层模型
  3. 中年刘强东背后,是已婚男性的集体挣扎
  4. JAVA技术及其应用实验三(抽象类和匿名类)
  5. IDEA-集成VisualVM插件,启动Java VisualVM
  6. qq侧滑界面的实现(DreawerLayout)
  7. apache服务器wind 下载,安装及部署
  8. Win 10系统安装3ds max 2014
  9. Pr入门学习之选择GPU加速
  10. 一篇文章告诉你,事件知识图谱核心关键技术有哪些?