• 全排列next_permutation


    全排列主要针对数组(排好序)

    常见全排列问题

    1,直接问第n个全排列是什么?

    举例说明:如7个数的集合为{1, 2, 3, 4, 5, 6, 7},要求出第n=1654个排列。

    (1654 / 6!)取整得2,确定第1位为3(从0开始计数),剩下的6个数{1, 2, 4, 5, 6, 7},求第1654 % 6!=214个序列;

    (214 / 5!)取整得1,确定第2位为2,剩下5个数{1, 4, 5, 6, 7},求第214 % 5!=94个序列;

    (94 / 4!)取整得3,确定第3位为6,剩下4个数{1, 4, 5, 7},求第94 % 4!=22个序列;

    (22 / 3!)取整得3,确定第4位为7,剩下3个数{1, 4, 5},求第22 % 3!=4个序列;

    (4 / 2!)得2,确定第5为5,剩下2个数{1, 4};由于4 % 2!=0,故第6位和第7位为增序<1 4>;

    因此所有排列为:3267514。

    2. 给定一种排列,如何算出这是第几个排列呢?

    和前一个问题的推导过程相反。例如3267514:

    后6位的全排列为6!,3为{1, 2, 3 ,4 , 5, 6, 7}中第2个元素(从0开始计数),故2*720=1440;

    后5位的全排列为5!,2为{1, 2, 4, 5, 6, 7}中第1个元素,故1*5!=120;

    后4位的全排列为4!,6为{1, 4, 5, 6, 7}中第3个元素,故3*4!=72;

    后3位的全排列为3!,7为{1, 4, 5, 7}中第3个元素,故3*3!=18;

    后2位的全排列为2!,5为{1, 4, 5}中第2个元素,故2*2!=4;

    最后2位为增序,因此计数0,求和得:1440+120+72+18+4=1654

    当然这两个问题都可以通过全排列暴力找

    转自 :https://blog.csdn.net/c18219227162/article/details/50301513

  • 相关阅读:
    简单的股票分析系统
    gtest日志在工程项目中的应用
    doctest初次体验
    python写的读取json配置文件
    logbook日志系统
    python3 pyodbc简单使用
    numpy中dtype
    python获取代码行号
    Python操作SQLServer示例(转)
    log4j与log4j.properties的配置
  • 原文地址:https://www.cnblogs.com/Superwalker/p/8671669.html
Copyright © 2020-2023  润新知