以前求序列的排列时,最常用的方法就是递归回溯,现在发现其实像这样有特定算法的重复性工作是可以在STL标准库中找到答案的。
在STL的变序性算法中,有两个用于排列元素的算法分别如下:
bool next_permutation(Iterator beg,Iterator end)
bool prev_permutation(Iterator beg,Iterator end)
这...
分类:
其他好文 时间:
2014-08-13 13:07:06
阅读次数:
261
基于字典序的组合生成算法2010-12-02 01:22:52|分类: 离散数学 |标签:离散数学排列组合 |举报 |字号大中小订阅 一、 问题描述给定非空集合A,按字典序的方法生成集合A的所有组合。关于字典序的概念,这里不做严格定义,只是做一简单解释。字典序是字符串比较的一种方法。例如两个字符串 ...
分类:
其他好文 时间:
2014-08-12 18:34:44
阅读次数:
228
一.全排列无重复字符#include#includechar buf[1024];void func(int index);void swap(int index1,int index2);int main(){ memset(buf,0,sizeof(buf)); sprintf(bu...
分类:
其他好文 时间:
2014-08-09 13:14:27
阅读次数:
270
排列组合是高中是学到的 知识,理论上很清楚,但如何使用代码实现,却一直没有尝试过,近段时间由于项目需要,写一个组合的算法,想不到却花费了不少时间。
需求很简单,就是典型的组合应用。
例如输入:C0,C1,C2,C3,C4,输出C0,C1,C2,C3,C4的所有组合。
由于输入数据的个数不确定,自然不能使用一般的循环,只能使用递归加循环。
经过不断的实验的和测试,发现有两...
分类:
其他好文 时间:
2014-08-07 13:09:10
阅读次数:
265
给定一个数X,他的兄弟数Y定义为:是由X中的数字组合而成,并且Y是大于X的数中最小的。例如,38276的兄弟数字为38627。给定X,求Y。
分析:这个题目当然有暴力的方法,列出所有的排列组合,然后然后找到大于X中,最小的Y。即,找到兄弟数字。
那有没有更好的方法呢?不想对所有情况进行穷举,就要想办法,尽可能缩小要处理的范围,一般的思路,从右边开始,两两交换,查看是否可以找到Y,最开始...
分类:
其他好文 时间:
2014-07-30 14:48:13
阅读次数:
174
不容易系列之(4)——考新郎
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21384 Accepted Submission(s): 7874
Problem Description
国庆期间,省城HZ刚刚举行了...
分类:
其他好文 时间:
2014-07-29 17:57:42
阅读次数:
162