生成n个元素全排列的算法

排序算法思想与时间复杂度 文章目录1排序算法直接插入排序二、希尔排序选择排序堆排序快速排序 1排序算法 直接插入排序 直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的元素记录,按其关键字大小插入到它前面已经排好序的子序列中的适当位置,直到全部元素插入完成为止。 设需要排序的数组为a[0…n-1]。 初始时,i = 0,a[0]自成1个有序区,无序区为a[1…n-1]。 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。 i++并重复第二步直到 i == n-1,排序完成。 这里,我 阅读详情

最近研究排列组合,加强数学功底,顺便用stl写了一个生成n个元素全排列的算法。

因为n各元素的集合排列的个数很大(n的阶乘),为了使计算机上有效的运行,算法那每一步的执行必须简单。算法的结果应该是一张表,该表包含n个元素的每一个排列。下面描述的算法具有这些特性,这个算法由Johnson和Trotter独立的发现,并被Gardner在一篇通俗的论文中做了描述。-------摘自《组合数学》

 

算法基于以下的事实:

在n个元素的一个全排列中删除编号为n的元素,得到的必然按是一个n-1个元素的全排列。

因此,在n-1个元素的全排列中添加元素n,必然能得到一个n个元素的一个全排列。

更一般地,n-1个元素全排列的种类是n-1的阶乘,而n种元素的全排列为n的阶乘,即n*(n-1)!,正好又应对了在n-1个元素全排列中添加元素n有n种方法。

所以算法较为通俗的描述如下:

首先,

1

然后在1的前后插入2

1 2

2 1

然后在能插入的地方插空插入3

1 2 3

1 3 2

3 1 2

2 1 3

2 3 1

3 2 1

通过这种规则不断迭代直到生成n个元素的全排列。

用C++实现这个算法的代码如下(使用了STL):

vector<list<int>> genpermutation(int n)
{
	vector<list<int>> result;
	list<int> tlist;
	tlist.insert(tlist.begin(),1);
	result.push_back(tlist);
	for(int i=2;i<=n;i++)
	{
		int size=result.size();
		for(int j=0;j<=size-1;j++)
		{
算法设计与分析之全排列问题 递归算法之全排列问题 问题描述 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列(n!种)。 设R={r1,r2,…,rn}是要进行排列的n个元素, Ri=R-{ri}。 集合X中元素的全排列记为perm(X)。 (ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。 分析 当n=1时, perm®=®,其中r是集合R中唯一的元素; 当n>1时,per... 阅读详情

相关推荐

QGC二次开发实战指南(一):从零构建自定义地面站界面

本文详细介绍了QGC二次开发实战指南,从零开始构建自定义地面站界面。通过QT和QML技术结合MAVLINK协议,开发者可以打造适合特定业务场景的无人机监控系统,提升操作效率与用户体验。文章包含环境搭建、界面设计、数据绑定等完整开发流程,是QGC二次开发的实用教程。

weixin_28693683的博客 496

MaxEnt物种分布预测中的常见误区与优化技巧:如何提高模型准确率

本文深入探讨了MaxEnt物种分布预测模型从基础应用到精准预测的进阶实践。针对模型准确率提升,文章系统分析了环境变量筛选、模型参数调优、结果批判性解读等核心环节的常见误区,并提供了基于生态位模型原理的深度优化技巧,帮助研究者产出更可靠、可解释的预测结果。

weixin_29219539的博客 594

从48V到800V:TI BMS芯片如何应对高压电池管理挑战?

电池管理系统是电动汽车和储能系统的核心,负责监控电池状态、保障安全并优化性能。其核心原理在于通过高精度测量电池电压、电流和温度,结合算法估算电池的荷电状态与健康状态,从而实现精准的能量管理与寿命预测。在技术价值层面,高精度测量能最大化利用电池化学窗口,提升能量密度与续航里程;而符合功能安全标准的设计则是防止热失控等安全事故的基石。随着汽车电气化从48V轻混系统向400V/800V高压平台演进,BMS面临着测量精度、功能安全、高压隔离通信和系统成本等多重挑战。德州仪器的BQ796xx和BQ75614系列芯片,

weixin_27017211的博客 342

Token算力工厂建设方案:从GPU集群到计量计费的全链路设计

在AI应用从“租核”走向“买Token”的范式转换中,算力交付的核心指标已不再是vCPU或GPU实例,而是单位时间内的Token产出量与单Token成本。这一变化推动基础设施从资源租赁向计件生产演进,要求GPU集群、推理引擎、调度系统、计量计费等模块像工厂产线一样协同运转。本文从硬件异构混部、存储网络设计、推理引擎调优、Token网关与配额管理、稳定性治理等维度,系统拆解如何构建一座可量化、可计费、可扩展的Token算力工厂,并给出分三期落地的推进节奏,帮助架构师与技术管理者在AI基础设施建设中实现成本可控

weixin_29095587的博客 264

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5566

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3593

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1222

【深度学习】Progressive Distillation for Fast Sampling of Diffusion Models

这种方法通过迭代地将一个需要较多步骤的模型(称为教师模型)蒸馏成一个需要较少步骤的学生模型,每次迭代都将采样步骤减半,直到达到所需的采样步骤数量。通过渐进式蒸馏,论文将原始需要8192步采样的模型成功蒸馏为只需4步采样就能取得接近的生成质量的新模型,大幅提高了扩散模型的推理效率。这篇论文提出了一种"渐进式蒸馏"(Progressive Distillation)的方法,来大幅降低用于生成对抗网络(GAN)的扩散模型(Diffusion Model)在推理阶段的采样步数,从而提高其推理效率。

q742971636的博客 1788

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: WebGoat第五关:Buffer Overflows
下一篇: Webscarab关键源码分析(1)
ROger__Wong
博客等级 码龄14年 250粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值