matlab生成组合字典序法,组合数学 排列生成算法 字典序

字典序排序生成

数字使用1~MAX

function dfs(n) {

if (n == MAX) {

// console.log(a)

ALL.push(Array.from(a))

used.delete(a.pop())

return

}

for (let i = 1; i <= MAX; i++) {

if (!used.has(i)) {

a.push(i)

used.add(i)

dfs(n + 1)

}

}

used.delete(a.pop())

}

递增进位制

由于n个排列有n!个,n位递增进制数可以一一对应一个排列

各种转换

排列转中介数

中介数转排列

序数转中介数

中介数转序数

let a = []

let MAX = 4

let used = new Set()

let ALL = []

function dfs(n) {

if (n == MAX) {

// console.log(a)

ALL.push(Array.from(a))

used.delete(a.pop())

return

}

for (let i = 1; i <= MAX; i++) {

if (!used.has(i)) {

a.push(i)

used.add(i)

dfs(n + 1)

}

}

used.delete(a.pop())

}

// 阶乘

function fac(n) {

return n < 2 ? 1 : n * fac(n - 1)

}

// 字典序中介数计算

function f1(arr) {

let ret = []

for (let i = 0; i < arr.length; i++) {

let c = 0

for (let j = i + 1; j < arr.length; j++)

arr[j] < arr[i] ? c++ : c

ret[i] = c

}

return ret

}

// 字典序求序数

function getM1(arr) {

return arr.reduce(

(pre, cur, index) => pre + cur * fac(arr.length - 1 - index),

0

)

}

// 字典序序数转中介数

function g1(m) {

let len = MAX

while (fac(len) < m)

len++

let arr = []

for (let i = 1; i < len; i++) {

m = Math.floor(m / i)

arr.push(Math.floor(m) % (i + 1))

}

return arr.reverse()

}

// 中介数转排列

function h1(arr) {

let used = new Set()

let ret = []

for (let i = 0; i < arr.length; i++) {

let t = arr[i] + 1

while (used.has(t))

t++

ret.push(t)

used.add(t)

}

return ret

}

dfs(0)

for (let i of ALL) {

console.log(i, f1(i), getM1(f1(i)), g1(getM1(f1(i))), h1(f1(i)))

}

[ 1, 2, 3, 4 ] [ 0, 0, 0, 0 ] 0 [ 0, 0, 0 ] [ 1, 2, 3, 4 ]

[ 1, 2, 4, 3 ] [ 0, 0, 1, 0 ] 1 [ 0, 0, 1 ] [ 1, 2, 3, 4 ]

[ 1, 3, 2, 4 ] [ 0, 1, 0, 0 ] 2 [ 0, 1, 0 ] [ 1, 2, 3, 4 ]

[ 1, 3, 4, 2 ] [ 0, 1, 1, 0 ] 3 [ 0, 1, 1 ] [ 1, 2, 3, 4 ]

[ 1, 4, 2, 3 ] [ 0, 2, 0, 0 ] 4 [ 0, 2, 0 ] [ 1, 3, 2, 4 ]

[ 1, 4, 3, 2 ] [ 0, 2, 1, 0 ] 5 [ 0, 2, 1 ] [ 1, 3, 2, 4 ]

[ 2, 1, 3, 4 ] [ 1, 0, 0, 0 ] 6 [ 1, 0, 0 ] [ 2, 1, 3, 4 ]

[ 2, 1, 4, 3 ] [ 1, 0, 1, 0 ] 7 [ 1, 0, 1 ] [ 2, 1, 3, 4 ]

[ 2, 3, 1, 4 ] [ 1, 1, 0, 0 ] 8 [ 1, 1, 0 ] [ 2, 3, 1, 4 ]

[ 2, 3, 4, 1 ] [ 1, 1, 1, 0 ] 9 [ 1, 1, 1 ] [ 2, 3, 4, 1 ]

[ 2, 4, 1, 3 ] [ 1, 2, 0, 0 ] 10 [ 1, 2, 0 ] [ 2, 3, 1, 4 ]

[ 2, 4, 3, 1 ] [ 1, 2, 1, 0 ] 11 [ 1, 2, 1 ] [ 2, 3, 4, 1 ]

[ 3, 1, 2, 4 ] [ 2, 0, 0, 0 ] 12 [ 2, 0, 0 ] [ 3, 1, 2, 4 ]

[ 3, 1, 4, 2 ] [ 2, 0, 1, 0 ] 13 [ 2, 0, 1 ] [ 3, 1, 2, 4 ]

[ 3, 2, 1, 4 ] [ 2, 1, 0, 0 ] 14 [ 2, 1, 0 ] [ 3, 2, 1, 4 ]

[ 3, 2, 4, 1 ] [ 2, 1, 1, 0 ] 15 [ 2, 1, 1 ] [ 3, 2, 4, 1 ]

[ 3, 4, 1, 2 ] [ 2, 2, 0, 0 ] 16 [ 2, 2, 0 ] [ 3, 4, 1, 2 ]

[ 3, 4, 2, 1 ] [ 2, 2, 1, 0 ] 17 [ 2, 2, 1 ] [ 3, 4, 2, 1 ]

[ 4, 1, 2, 3 ] [ 3, 0, 0, 0 ] 18 [ 3, 0, 0 ] [ 4, 1, 2, 3 ]

[ 4, 1, 3, 2 ] [ 3, 0, 1, 0 ] 19 [ 3, 0, 1 ] [ 4, 1, 2, 3 ]

[ 4, 2, 1, 3 ] [ 3, 1, 0, 0 ] 20 [ 3, 1, 0 ] [ 4, 2, 1, 3 ]

[ 4, 2, 3, 1 ] [ 3, 1, 1, 0 ] 21 [ 3, 1, 1 ] [ 4, 2, 3, 1 ]

[ 4, 3, 1, 2 ] [ 3, 2, 0, 0 ] 22 [ 3, 2, 0 ] [ 4, 3, 1, 2 ]

[ 4, 3, 2, 1 ] [ 3, 2, 1, 0 ] 23 [ 3, 2, 1 ] [ 4, 3, 2, 1 ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

血型算法php,血型排行榜!(真的很准)

一最容易动怒的人是&#xff1a;1.O 型&#xff1a;急性子&#xff0c;一点小事就能惹火他&#xff0c;性格中有好斗的一面&#xff0c;会以 " 我想发泄一下 " 为理由大发雷霆。2.B 型&#xff1a;看上去脾气很好&#xff0c;其实性情很直接&#xff0c;被愤怒冲昏头…

php div行内块元素,行内元素与块级元素的区别详细介绍

首先&#xff0c;CSS规范规定&#xff0c;每个元素都有display属性&#xff0c;确定该元素的类型&#xff0c;每个元素都有默认的display值&#xff0c;分别为块级(block)、行内(inline)。块级元素&#xff1a;(以下列举比较常用的块级元素&#xff0c;详情可在w3cschool查询)定…

每个java小应用程序都得继承,JAVA复习题3

23.容器JFrame及JPanel默认的布局管理器分别是()A、FlowLayout和GridLayoutB、BorderLayout和FlowLayoutC、FlowLayout和FlowLayoutD、CardLayout和BorderLayout24.在开发一个JAVA GUI程序时&#xff0c;通常都要对按键事件作出响应和处理&#xff0c;一般需要在程序的开头写上…

php文件上传漏洞防御,第十二课 php文件上传漏洞和代码防御

挖掘上传漏洞常见上传函数$_FILES move_uploaded_file等函数搜索关键字$_FILES move_uploaded_file如何防止上传漏洞自定义文件扩展名和路径POST /dvwa/vulnerabilities/upload/ HTTP/1.1Host: 127.0.0.1Connection: keep-aliveUser-Agent: Mozilla/5.0 (Windows; U; Windows…

anaconda下安装python,Windows下Anaconda的安装和简单使用方法

Anaconda is a completely free Python distribution (including for commercial use and redistribution). It includes over 195 of the most popular Python packagesfor science, math, engineering, data analysis.1、安装anaconda之前什么都不需要安装&#xff0c;直接在…

oracle免费云攻略,使用免费的Oracle云服务-创建云主机

上一篇我们讲了如何注册并使用Oracle的免费云服务&#xff0c;这篇我们讲如何创建免费的云主机。进入到控制台后&#xff0c;从左上角的菜单栏进入到Instances的管理界面&#xff1a;然后点击&#xff0c;则会进入创建云主机的界面。创建云主机真的非常简单&#xff0c;甚至你都…

aix查看oracle数据库端口号,通过netstat+rmsock查找AIX端口对应进程

rmsock除去不包含文件描述符的套接字。它接受 socket、tcpcb、inpcb、ripcb 或 rawcb 地址并将其转换成套接字地址。然后检查每个进程所有打开的文件以查找套接字的匹配。如果没找到匹配&#xff0c;对该套接字执行异常终止操作&#xff0c;而不考虑套接字 linger 选项的存在。…

maven中的oracle,maven中安装SQL SERVER 和 Oracle JDBC驱动

都什么年代了&#xff0c;居然MS SQL 和 Oracle的jdbc驱动还不支持maven&#xff0c;只能自己弄一下了。SQL SERVER2、install jar文件到maven&#xff1a;mvn install:install-file -Dfilesqljdbc4.jar -Dpackagingjar -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4…

oracle groupq by,oracle group by 性能优化

慕田峪9158850(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效)&#xff1a;ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名&#xff0c;FROM子句中写在最后的表(基础表 driving table)将被最先处理&#xff0c;在FROM子句中包含多个表的情况下,你必须选择记录…

oracle面向对象的数据类型,Oracle面向对象编程OOP

1.2.6 嵌套表AS TABLE OF嵌套表是表中之表&#xff0c;一个嵌套表是某些行的集合&#xff0c;它在主表中表示为其中的一列。对主表中的每一条记录&#xff0c;嵌套表可以包含多个行。语法如下&#xff1a;CREATE OR REPLACE TYPE table_name AS TABLE OF type;语法说明&#x…

oracle 减少回表,減少oracle sql回表次數 提高SQL查詢性能 | 學步園

要寫出高效的SQL&#xff0c;那麼必須必須得清楚SQL執行路徑&#xff0c;介紹如何提高SQL性能的文章很多&#xff0c;這裡不再贅述&#xff0c;本人來談談如何從 減少SQL回表次數 來提高查詢性能&#xff0c;因為回表將導致掃描更多的數據塊。我們大家都知道&#xff0c;數據庫…

oracle执行计划的概念,SQL语句性能调整之ORACLE的执行计划

对于CBO优化器&#xff1a;CBO根据统计信息选择驱动表&#xff0c;假如没有统计信息&#xff0c;则在from 子句中从左到右的顺序选择驱动表。这与RBO选择的顺序正好相反。这是英文原文(CBO determines join order from costs derived from gathered statistics. If there are n…

今日头条PHP开发工程师面试,今日头条2018春招研发岗第一次笔试题解

第一题&#xff1a;双指针&#xff1a;#include using namespace std;typedef long long ll;const int N 1e67;int a[N];int main(){int n,k;scanf("%d%d",&n,&k);for(int i0;isort(a, an);n unique(a, an) -a;int r 0, ans0;for(int l0; l{while(rif(rn)…

oracle 序列验证脚本,oracle 生成序列脚本

今天在移植一个项目的的数据库时,要移动所有的序列,下面就是一个如何生成序列脚本的语句方法一:SELECT CREATE SEQUENCE ||SEQUENCE_NAME|| INCREMENT BY ||INCREMENT_BY || START WITH ||LAST_NUMBER|| MAXVALUE ||MAX_VALUE || CACHE ||CACHE_SIZE|| ORDER NOCYCLE ;FROM u…

php打开EXCEL过慢,打开excel很慢,编辑某个工作表很卡

一些啰嗦的话&#xff1a;同事一个office ,excel档有五个工作表&#xff0c;打开时非常慢的。进去后其中只要点击到两个工作表其中一个就很卡甚至没响应。试用wps打开流畅。但她坚持要用office说用惯了&#xff0c;没办法女人。这个文档接近3M&#xff0c;都是一些数据也没见有…

linux 如何清理垃圾文件,Linux系统怎样清理垃圾文件

大家都用过windows&#xff0c;在使用windows系统的过程中系统会变得越来越慢。而对于windows下饱受诟病的各种垃圾文件都需要自己想办法删除&#xff0c;不然系统将会变得越来越大&#xff0c;越来越迟钝!windows怎么清理垃圾相信大家都知道的&#xff0c;那么linux下怎么清理…

linux vim命令跳到67行,Linux学习之Vim/Vi使用(十三)

Linux学习之Vim/Vi使用Vim/Vi简介Vim/Vi工作模式Vim/Vi基本使用Vim/Vi应用技巧Vim/Vi简介Vim/Vi是一个功能强大的全屏幕文本编辑器&#xff0c;是Linux/UNIX上最常用的文本编辑器&#xff0c;它的作用是建立、编辑、显示文本文件。Linux下的编辑器最常用的就是vim或者vi文本编辑…

linux查看端口属性,linux如何查看系统属性指令?

linux是一款非常免费资源的操作系统&#xff0c;但是很多用户不知道怎么查看系统信息&#xff0c;今天小编就给大家带来了linux查看系统属性指令分享。喜欢的快点下载吧。linux查看系统属性指令分享1、查看cpu信息查看所有cpu信息&#xff1a;cat /proc/cpuinfo查看cpu类型&…

linux命令提示符不同,Linux命令提示符如何按照自己的习惯修改?

原本的 [rootlocalhost ]$ 看久了难免让人厌倦。如果按自己的习惯修改&#xff0c;既能看着舒服&#xff0c;又能提高“逼格”。下面小编就为大家详细介绍Linux命令提示符如何按照自己的习惯修改方法&#xff0c;希望能对大家有所帮助!美化Bash1、在目录下&#xff1a;vim .bas…

ubuntu linux编译环境搭建,Ubuntu14.04开发环境搭建

Ubuntu14.04开发环境搭建嵌入式开发过程中很重要的一环节就是开发环境的搭建&#xff0c;开发环境搭建的好可以很好的提高开发效率。其中关键的一部就是挂载运行程序&#xff0c;对于程序的挂载运行需要借助NFS服务器&#xff0c;下面介绍windows和linux操作系统下NFS服务器的搭…