算法基础:使用STL实现全排列
发布日期:2021-06-30 20:20:24
浏览次数:2
分类:技术文章
本文共 1008 字,大约阅读时间需要 3 分钟。
STL是标准模版库的缩写,是泛化编程的实现,基本观念是将数据和操作进行分离,数据使用容器进行管理,操作由算法进行实现,迭代器在两者之间进行沟通,使得任何算法和任何容器都有可能进行交互运作。这篇文章以一个简单的例子进行介绍STL使用上的便利之处。目录
临位对换实现全排列
比如通过临位对换方式实现的全排列,代码可能如下:
#includeusing namespace std;void swap(int* x, int* y) { int tmp = *x; *x = *y; *y = tmp;}void permutation(int *list, int k, int n) { if (k == n-1) { for (int i=0; i
STL的next_permutation
而使用STL的next_permutation,则非常简单,比如如下即可:
while (next_permutation(list,list+n)){ for (int i=0; i
唯一需要注意的是next_permutation默认输出的是按照字典序排序的下一个排列,比如1 2 3的输入,next_permutation的结果为1 3 2,上述代码的执行结果为,因为第一个1 2 3就是输入本身
1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
这种情况下把while循环倒过来写,用do-while的方式就可以了(注意next_permutation本身是获取下一个,这种写法只能将本身也输出了而已)
do { for (int i = 0; i < n; i++) cout << list[i] << " "; cout << endl; } while (next_permutation(list,list+n));
总结
所以看到实现相同的功能,只需要调用即可,另外除此之外,还提供了pre_permutation提供上一个排序的方式,当然还有很多其他的功能。另外对于不同类型,比如char或者其他类型,pre_permutation无需在重复实现permutation和交换函数,这也是使用STL的优势所在,集中力量关注算法本身,对于常见的一些功能直接调用即可。
转载地址:https://liumiaocn.blog.csdn.net/article/details/109269500 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月29日 19时26分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
攻防世界web进阶区ics-04详解
2019-04-30
攻防世界web进阶区Cat详解
2019-04-30
攻防世界web进阶区bug详解
2019-04-30
攻防世界web进阶区ics-07详解
2019-04-30
攻防世界web进阶区unfinish详解
2019-04-30
攻防世界web进阶区i-got-id-200超详解
2019-04-30
sql注入总结学习
2019-04-30
leetcode46 全排列
2019-04-30
leetcode121 买卖股票的最佳时机
2019-04-30
leetcode 122 买卖股票的最佳时机II
2019-04-30
leetcode 309 最佳买卖股票含冷冻期
2019-04-30
leetcode 714 买卖股票的最佳时机含手续费
2019-04-30
leetcode3 无重复字符的最长子串
2019-04-30
leetcode 76 最小覆盖子串
2019-04-30
leetcode 1143. 最长公共子序列
2019-04-30
leetcode 83. 删除排序链表中的重复元素
2019-04-30
智能体 Intelligent Agent
2019-04-30
Network Compression网络压缩(一)
2019-04-30
GAN系列(零)—— GAN的发展(两条路线)
2019-04-30
Conditional GAN (CGAN) 条件生成网络
2019-04-30