[转载]STL算法:prev_permutation和next_permutation的使用

Bioinformatics2021 | FraGAT+:基于分子原始片段的多尺度图注意力机制的分子性质预测模型 Bioinformatics2021 | FraGAT:基于分子原始片段的多尺度图注意力机制的分子性质预测模型 阅读详情

在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组数据的全排列.但是怎么用,原理如何,我做了简单的剖析.

首先查看stl中相关信息.
函数原型:


两个重载函数,第二个带谓词参数_Comp,其中只带两个参数的版本,默认谓词函数为"小于".

返回值:bool类型

分析next_permutation函数执行过程:

假设数列 d1,d2,d3,d4……

范围由[first,last)标记,调用next_permutation使数列逐次增大,这个递增过程按照字典序。例如,在字母表中,abcd 的下一单词排列为abdc,但是,有一关键点,如何确定这个下一排列为字典序中的next,而不是next->next->next……

若当前调用排列到达最大字典序,比如dcba,就返回false,同时重新设置该排列为最小字典序。

返回为true表示生成下一排列成功。下面着重分析此过程:

根据标记从后往前比较相邻两数据,若前者小于(默认为小于)后者,标志前者为X1(位置PX)表示将被替换,再次重后往前搜索第一个不小于X1的数据,标记为X2。交换X1,X2,然后把[PX+1,last)标记范围置逆。完成。

要点:为什么这样就可以保证得到的为最小递增。

从位置first开始原数列与新数列不同的数据位置是PX,并且新数据为X2。[PX+1,last)总是递减的,[first,PX)没有改变, 因为X2>X1,所以不管X2后面怎样排列都比原数列大,反转[PX+1,last)使此子数列(递增)为最小。从而保证的新数列为原数列的字典序 排列next。

明白了这个原理后,看下面例子:

输出:312/321         因为原数列不是从最小字典排列开始。

所以要想得到所有全排列

 int a[] = {3,1,2};   change to  int a[] = {1,2,3};

另外,库中另一函数prev_permutation与next_permutation相反,由原排列得到字典序中上一次最近排列。

所以

才能得到123的所有排列。

 

文章转自:http://blog.youkuaiyun.com/aipb2008/archive/2008/03/29/2227490.aspx

VC中sqlite的使用 在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示 立即下载

相关推荐

LTspice introduction - 2 LTspice的界面

LTspice的界面主要有两个:Schematic Capture和Waveform Viewer Schematic Capture 它主要是用来画电路图的,画完电路图之后,添加一些dot 命令同时选择一些仿真的参数,点击执行(Run)Waveform Viewer 如果你的仿真不是op point的话,一个都会打开它,在它里面你可以画图相应的图形。 有两种方式可以在Viewer

贾亮的专栏 3220

stl算法:next_permutation剖析

在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组数据的全排列.但是怎么用,原理如何,我做了简单的剖析.首先查看stl中相关信息.函数原型:template   bool next_permutation(      BidirectionalIterator _First,       BidirectionalIterator _Last  

aipb技术地带 1万+

保姆级教程:用GlobleLand30数据+GTB3.3软件,一步步搞定MSPA景观格局分析

本文提供GlobleLand30数据结合GTB3.3软件进行MSPA景观格局分析的保姆级教程,涵盖数据预处理、软件操作、结果解读全流程,特别针对零基础用户常见问题提供解决方案,助力研究者高效完成景观生态学分析。

weixin_26757925的博客 450

c++入门必学库函数 next_permutation

一、next_permutation的介绍 next_permutation的意思是下一个排列,与其相对的是prev_permutation,即上一个排列。我们需要使用全排列的时候就可以直接使用这两个函数,方便又快捷 二、next_permutation的基本用法 由于prev_permutation和next_permutation的用法是一样的,下面就值讲解next_permutation的基本用法 next_permutation只能获得上一个排列,如果要获得全排列,那么就需要先对数组进行升序排序

weixin_52115456的博客 3万+

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 220

基于FPGA的以太网设计(1)----大白话解释什么是以太网

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

孤独的单刀 3869

next_permutation(a,a+n)

早就听说了了next_permutation 产生全排列的强大,一直到昨晚遇到一个对字符串产生全排列的问题才知道这个函数的强大,我们队是按照dfs去搞全排列,然后在进行字符串的匹配,结果写的很长,过程中还各种debug。。。于是决定今天学一下… next_permutation函数 组合数学中经常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),和...

如梦山河的博客 3万+

【ESP32接入国产大模型之Deepseek】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之Deepseek。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘鸣谢B站UP星汇极客ESP32对接DeepSeek API,实现AI大模型交互功能。

vor234的博客 1万+

下一个排列(next_permutation)

而关键是。

qq_73643549的博客 4015

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2293

共享单车数据抓取与分析:使用Python爬虫抓取共享单车使用数据与地图信息

通过本篇博客,我们展示了如何使用Python爬虫抓取共享单车的使用数据和地图信息,并通过简单的数据分析得出有价值的见解。在实际应用中,数据的收集与分析不仅能帮助城市管理者更好地规划单车站点,还能为用户提供更精准的单车使用体验。未来,我们可以将此分析与机器学习模型相结合,进一步预测单车的使用趋势,优化调度算法,实现更加智能的共享单车管理。

2201_76125261的博客 2204

解析 C++ STL 中的 next_permutation 和 prev_permutation 函数

用于生成当前序列“下一个”字典序排列的函数。如果当前序列已经是字典序中的最大排列,则返回false,否则返回true并修改原序列以生成下一个排列。:与类似,但它是用于生成当前序列“前一个”字典序排列的函数。如果当前序列已经是字典序中的最小排列,则返回false,否则返回true并修改原序列以生成前一个排列。函数原型参数start:序列的起始迭代器。end:序列的结束迭代器(不包含)。返回值:如果存在下一个或前一个排列,返回true,并更新序列。如果当前排列已经是字典序的最大或最小排列,返回false。

do better. 1841

跨越边界:用MessagePipe实现无缝的进程间通信

MessagePipe是一个用于.NET平台的消息传递库,它专注于简化异步消息处理和进程间通信。通过提供一系列易于使用的API,开发者可以快速搭建起稳定可靠的通信管道,支持多种传输协议(如TCP、Unix域套接字等),并内置了序列化/反序列化功能,使得跨语言和跨平台的数据交换变得轻而易举。为了方便序列化和反序列化操作,我们需要为每种消息定义对应的类或结构体,并标记属性。这样可以确保消息在发送方和接收方之间正确无误地传递。[Key0set;[Key1set;

墨夶的博客 816

C++STL中函数next_permutation的使用

next_permutation函数: 组合数学中经常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,严格来讲,就是对...

麦琪家的小麦 1904

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ STL next_permutation的实现原理

next_permutation得到下一个排列,如对序列 a, b, c,每一个元素都比后面的小,它的下一个序列即为a, c, b next_permutation的函数原型如下: template bool next_permutation(       BidirectionalIterator _First,        BidirectionalIterator _

hongchangfirst 6034

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

标准库——STL里面的全排列:next_permutation()

标准库——STL里面的全排列:next_permutation() 在标准库算法中 , next_permutation() 应用在数列操作上比较广泛。这个函数可以计算一组数据的全排列。但是怎么用,原理如何,我做了简单的剖析。 一、stl中相关信息. 1、函数原型: template bool next_permutation( BidirectionalIterato

蛤蛤~ 1489

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

STL next_permutation和prev_permutation函数

利用next_permutation实现全排列升序输出,从尾到头找到第一个可以交换的位置, 直接求到第一个不按升序排列的序列。 1 #include <iostream> 2 #include <algorithm> /// next_permutation, sort 3 #define MAX 100 4 using namespa...

109

next_permutation / prev_permutation

next_permutation / prev_permutation 好东西啊 可以看出是否有字典序的前一个或者后一个 (虽然可能用的题比较好吧) 属于stl中的一种 以后如果再次碰到 好好研究研究 总感觉在csdn博客中搜到的不太行 附题:P2525 Uim的情人节礼物·其之壱 代码: #include #include using namespace std; int main() { int n; cin>>n; int a[10]; for(int i=0;i<n;i++) ci

weixin_46437248的博客 84

【STL源码剖析读书笔记】【第6章】算法之next_permutation和prev_permutation算法

1、next_permutation()会取得[first, last)所标示序列的下一个排列组合,如果没有下一个排列组合,返回false,否则返回true。 2、next_permutation()函数算法原理:从最尾端开始寻找两个相邻的元素,令第一个元素是*i,第二个元素是*ii,且满足*i < *ii,找到这样一组元素后,再从尾端开始往前找出第一个大于*i的元素*j,将i、j...

weixin_30642869的博客 113

全排列生成算法:next_permutation

转载自 作者:王雨濛;新浪微博:@吉祥村码农;来源:《程序控》博客 – http://www.cnblogs.com/devymex/ 概念 全排列的生成算法有很多种,有递归遍例,也有循环移位法等等。C++/STL中定义的next_permutation和prev_permutation函数则是非常灵活且高效的一种方法,它被广泛的应用于为指定序列生成不同的排列。本文将详细的介绍prev_permu...

计算机科学与技术专业学生的成长之路 800

next_permutation(全排列算法)

**STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation。首先我们必须了解什么是“下一个”排列组合,什么是“前一个”排列组合。 next_permutation()会取得[first,last)所标示之序列的下一个排列组合,如果没有下一个排列组合,便返回false;否则返回true。这个算法有两个版本。版本一使用元素型别所提供的le...

weixin_30482181的博客 159

全排列 next_permutation 简单用法

next_permutation 转载出处:传送门 (有删改) next_permutation的函数声明:#include  bool next_permutation( iterator start, iterator end); next_permutation函数的返回值是布尔类型 在STL中还有perv_permutation()函数

什么样的小孩 的博客 636

STL algorithm算法next_permutation,prev_permutation(39)

next_permutation原型: std::next_permutation default (1) template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);

roaylchen的博客 1510

排列函数 prev_permutation和next_permutation的使用

STL算法:prev_permutation和next_permutation的使用 (2012-04-06 22:07:08) 转载▼ 标签: stl next permutation prev 教育 分类: 程序设计 首先查看stl中相关信息. 函数原型: view plaincopy to clipboardprint?

u012679087的专栏 520

next_permutation()

STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation。首先我们必须了解什么是“下一个”排列组合,什么是“前一个”排列组合。考虑三个字符所组成的序列{a,b,c}。 这个序列有六个可能的排列组合:abc,acb,bac,bca,cab,cba。这些排列组合根据less-than操作符做字典顺序(lexicogra...

aizongsai2251的博客 128

next_permutation函数(全排列)

以下为转载内容,转自:http://leonard1853.iteye.com/blog/1450085 1、碰到next_permutation(permutation:序列的意思) 今天在TC上碰到一道简单题(SRM531 - Division Two - Level One),是求给定数组不按升序排列的最小字典序列(Sequence of numbers A is lexicographi

xy的博客 1271
上一篇: [转载]GNU Emacs 常用快捷键
下一篇: [转载]程序员的credit
lambert_s
博客等级 码龄17年 31粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值