字典序,自己之前并没有很多的了解,最近在做题的时候发现出现的还是挺频繁的,索性今天找出来好好研究学习一下,在这里主要是根据网上的一篇博文来学习的,感觉讲的很容易理解这里就不多说了需要的话可以去看看。

对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是 54321。

示例: 1 2 3的全排列如下:

1 2 3 , 1 3 2 , 2 1 3 , 2 3 1 , 3 1 2 , 3 2 1

我们这里是通过字典序法找出来的。

那么什么是字典序法呢?

从上面的全排列也可以看出来了,从左往右依次增大,对这就是字典序法。

上面的博文实现了C语言的字典序方法,在这里给出来python的字典序全排列算法的实现,下面是代码:

#coding:utf8'''
功能:python实现字典序
'''import randomdef generate_random_numbers(total_num=10, max_num=20):  num_list = []  for i in range(total_num):num_list.append(random.randint(0, max_num))return num_list  def dict_sort(num_list):final_list=[]num=1decrease_list=sorted(num_list, reverse=True)increase_list=sorted(num_list)for i in range(len(increase_list)):num*=increase_list[i]#A(n,n)代表所有元素的全排列数量while num:#这里循环产生A(n,n)次for i in range(len(num_list)-2,-1,-1):if num_list[i]<num_list[i+1]:flagi=ibreakfor j in range(len(num_list)-1,flagi,-1):if num_list[j]>num_list[flagi]:flagj=jbreak# num_list[i], num_list[j]=num_list[j], num_list[i]num_list[flagi], num_list[flagj]=num_list[flagj], num_list[flagi]num_list2=sorted(num_list[i+1:])result_list=num_list[:i+1]+num_list2final_list.append(''.join([str(x) for x in result_list]))num-=1return final_listif __name__ == '__main__':num_list1=[1,2,3]num_list2=[1,2,3,4]final_list1=dict_sort(num_list1)print '**************************num_list1全排列组合为:**************************'print final_list1print len(final_list1)final_list2=dict_sort(num_list2)print '**************************num_list2全排列组合为:**************************'print final_list2print len(final_list2)

其中的随机数生成器最终并没有用到可以删除的,下面是结果:

**************************num_list1全排列组合为:**************************
['132', '123', '312', '213', '321', '231']
6
**************************num_list2全排列组合为:**************************
['1234','1243','1324','3142','3241','3214','1342','1423','1432','2431','3124','3412','3421','2134','2143','4312','4321','2314','2341','2413','4123','4132','4231','4213']
24

字典序的理解以及python实现相关推荐

  1. python 非线性回归_机器学习入门之菜鸟之路——机器学习之非线性回归个人理解及python实现...

    本文主要向大家介绍了机器学习入门之菜鸟之路--机器学习之非线性回归个人理解及python实现,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 梯度下降:就是让数据顺着梯度最大的方向,也 ...

  2. 深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现

    from: 深度学习中IU.IoU(Intersection over Union)的概念理解以及python程序实现 IoU(Intersection over Union) Intersectio ...

  3. 优化算法笔记|粒子群算法理解及Python实现

    粒子群算法的理解及Python实现 1.粒子群算法概述 2 基本PSO算法流程图 3 粒子群算法的Python实现 1.粒子群算法概述 粒子群算法 来源于对鸟群捕食模型的修正. 假设在一个n维空间中, ...

  4. LSTM结构理解与python实现

    LSTM结构理解与python实现 上篇博客中提到,简单的RNN结构求解过程中易发生梯度消失或梯度爆炸问题,从而使得较长时间的序列依赖问题无法得到解决,其中一种越来越广泛使用的解决方法就是 Long ...

  5. python opencv 直方图均衡_深入理解OpenCV+Python直方图均衡化

    原标题:深入理解OpenCV+Python直方图均衡化 正文 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法. 基本思想:把原始图的直方图变换为均匀分 布的形式,这样就增加了像素灰度 ...

  6. python语言的理解-初学Python语言者必须理解的下划线

    下划线(_)在Python语言中有特殊作用. 在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此.如果你是一名Python程序员,对于诸如 _ in ra ...

  7. python语言的理解-使用Python语言理解递归

    递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面 ...

  8. pythonsuper多重继承_小白都能理解的Python多继承

    前言 本文主要做科普用,在真实编程中不建议使用多重继承,或者少用多重继承,避免使代码难以理解. 方法解析顺序(MRO) 关于多重继承,比较重要的是它的方法解析顺序(可以理解为类的搜索顺序),即MRO. ...

  9. Faster RCNN代码理解(Python) ---训练过程

    最近开始学习深度学习,看了下Faster RCNN的代码,在学习的过程中也查阅了很多其他人写的博客,得到了很大的帮助,所以也打算把自己一些粗浅的理解记录下来,一是记录下自己的菜鸟学习之路,方便自己过后 ...

  10. [转载] Python 递归 深入理解递归 Python递归剖析,绝对让你看懂!

    参考链接: Python | print()中的结束参数 目录 递归剖析 递归的两个过程 return 返回值 详解 递归思路二分法和递归尾递归递归练习题 递归剖析 递归真的很重要,之前学的时候,学的 ...

最新文章

  1. 在新基建风口上,华为“鲲鹏”这次要翱翔了
  2. 组件化开发,制作Cocoapods Git库
  3. 【PP】通过创建工程变更号修改BOM
  4. python中while语句的用法_python 使用while循环输出*组成的菱形实例
  5. python中的所有功能_python – 是否可以列出模块中的所有功能?
  6. Properties常用方法
  7. 【安卓开发 】Android初级开发(三)动画
  8. h5 server send event(sse)
  9. 国际C语言混乱代码大赛结果公布
  10. 解决安装SQL Server 2000提示文件挂起的一般方法
  11. 【转载】H264编码原理以及I帧、B帧、P帧
  12. 现代通信原理6.1 常规调幅调制(AM)与抑制载波双边带(DSB-SC)调制
  13. 计算机毕业设计——选题参考
  14. v6使用手册 天正电气t20_天正电气T20手册
  15. 个人打造sm2258xt固态U盘全过程分享,附量产工具和教程
  16. 《机械设计基础》题库
  17. c语言求ab的最大公约数,C语言中如何调用函数求最大公约数和最小公倍数
  18. 语音社交系统源码中实时音频常见问题分析和解决:延时和抖动
  19. 使用itext到处PDF,使用PDF模板导出PDF文件
  20. 实现CS客户端服务器模型(Linux系统)

热门文章

  1. Frame buffer分析 - fbmem.c【转】
  2. Ubuntu 16.04将ISO镜像写入U盘
  3. java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.JPEGCodec
  4. 安装conntrack-tools
  5. nginx proxy_pass后的url加不加/的区别
  6. Javascript+css 实现网页换肤功能
  7. Eclipse在当前行之上插入一行
  8. [leetcode] Excel Sheet Column Title
  9. android root su sticky bit
  10. C#中奇怪的Queue T 行为!