项目管理者联盟 | 中国工程管理网 | 中国研发管理网   会员中心 资料库 博客 圈子

PMI-ACP®认证

适合敏捷开发项目
敏捷项目管理最佳实践

网络课程

PMI-PBA®认证

重视项目商业分析
商业价值与需求分析能力

网络课程

NPDP®认证

产品管理国际认证
全球产品管理最佳实践

网络课

PMP®认证

单项目管理经典指南
年轻项目经理首选

北京 | 直播 | 录播

PgMP®认证

大型复杂项目全球标准
定位高级项目管理层

网络班

PfMP®认证

链接战略与项目
实现组织资源投资回报

全球直播

软考项目管理

信息系统项目管理师
系统集成项目管理工程师

计划 | 报名 | 经验

论坛
价值源于交流与分享
会员区:
登陆ID 密  码
功能区: 公告建议 | 帖子搜索 | 管理团队 | 荣誉版主 | 帮助手册






 项目型组织  项目管理  工程项目  科技项目  项目化管理  管理软件  资格认证  职业休闲
EPM体系与流程 综合集成管理 总承包管理 IT软件开发 项目型制造 P3E/P6 PMP | PgMP 职业发展探讨
组织与人力资源 进度,范围,成本 国际工程 生物制药 专业服务 微软PROJECT IPMP | PRINCE2 管理学堂
项目管理信息化 团队建设与沟通 房地产 汽车设计开发 生活项目 PowerOn专版 软考项目管理 英语角|读书版
多项目与大项目 质量与风险 监理与咨询 手机数码 文体娱乐 注册建造师 房车吃游
PMO建设与管理 采购与合同 工程设计 项目管理硕士 闲聊版|商务版
俱乐部北京 | 大连 | 福州 | 广州 | 杭州 | 南京 | 山东 | 上海 | 深圳 | 四川 | 天津 | 武汉 | 西安 | 郑州 | 申请成立 TOP榜精华 | 最新 | 最热 | 会员

版面信息

说明:失败的IT项目比比皆是,进度延迟,预算超支,客户需求多变,成员加班抱怨...IT项目(软件开发.,信息系统实施等)寻求新生

本版版主

camer
登录:2013/7/2
次数:867
注册:2003/3/3
发帖:2745
dorothy
登录:2016/12/15
次数:804
注册:2004/9/6
发帖:993
steveli2008
登录:2009/5/26
次数:464
注册:2003/5/12
发帖:1026
zhf_karen
登录:2015/6/2
次数:346
注册:2005/6/13
发帖:469

俱乐部导航

北京大连福州广州杭州
南京山东上海深圳四川
天津武汉西安郑州 

联盟·近期活动

社区热点

华师大CTO学院:科创生态建设与创.
宏发电声江玫瑰谈PgMP:“下好一盘.
PgMP:交付能力与创造未来的项目管.
开放讲座|《项目组合管理与PfMP认证
开放讲座|项目组合管理与PfMP认证
开放讲座|PgMP:项目管理思维与方法
开放讲座|《项目组合管理与PfMP认证
网络讲座|《项目组合管理与个人职业
开放讲座|《项目组合管理与PfMP认证
网络直播|产品经理的四大核心技能提

精彩专题

如何做好项目沟通计划

软件项目质量管理

国际工程索赔与反索赔

更多:

推荐信息

·项目经理沙龙俱乐部
·推荐项目管理公开课程
·联盟VIP会员服务
·联盟99元大课堂
·建造师课程辅导免费试听

社区圈子

生态系统体系下.
圈主:ETPPM
行业:综合应用

集团企业生态体.
圈主:ETPPM
行业:综合应用

西安IT项目管理
圈主:muzud
行业:IT软件

房地产项目管理
圈主:13935823
行业:房地产

企业项目管理体.
圈主:zhenjm
行业:综合应用

联系社区管理员

咨询电话 010-82273401/11
斑竹申请 admin@mypm.net


版权所有 © 2003-2004
京ICP证070584号 
BBS业务许可2007第353号 
最佳显示模式:1024*768像素
项目管理与PMP认证
如何得到有重复元素的不重复全排列? [发表于 2006/10/9]
状态 开放帖 精华贴 浏览量 3891   
M个元素中含有相同的元素,如何得到他们的全排列(不重复排列)?

元素表述: a1,a1,...a1, a2,a2,...a2,.......,an,an,...an
其中,a1的个数为N1, a2的个数为N2,以此类推,总个数为M。

则可以证明不重复的排列种类的数目: M!/(N1!*N2!*...*Nn!)

例如: 1,2,2,3,3 的全排列:

12233
12323
12332
13223
13232
13322
21233
21323
21332
22133
22313
22331
23123
23132
23213
23231
23312
23321
31223
31232
31322
32123
32132
32213
32231
32312
32321
33122
33212
33221

共有 5!/1!/2!/2!=30种。

寻求得到该排列的较优算法。即不从 M! 个排列中筛选不重复项。

--------------------------------------------------------------------------------------------------------
PMP认证,项目经理最佳选择!
>>> 由论坛统一发布的广告:
楼主 帅哥约,不在线,有人找我吗?domo


职务 无
军衔 上尉
来自 北京市
发帖 363篇
注册 2005/1/7
PM币 4082
经验 1295点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/9]
就是将N个数字做全排列。不过对于某些数字不能选择而已。
这里只要限制将要选择的数字必须大于原来已经选择的数字就可以达到目标。
下面是递归算法

#include<stdio.h>
#define N 5


void arrange(int rec[],int used[],int depth);
void write(int rec[], int maxdepth);
int a[N]={1,2,2,3,3};
int count=0;

int main()
{int rec[N+1]={0},used[N+1]={0};

arrange(rec,used,1);
printf("\ncount=%d",count);
getchar();
return 0;
}

void write(int rec[])
{ int i;
for(i=1;i<=N;i++)
printf("%4d",a[rec[i]]);
printf("\n");
count++;
}

void arrange(int rec[],int used[],int depth)
{
int i;
if (depth>N) write(rec); //找到了一个可行解,输出
else
{ for(i=0;i<N;i++) // 搜索该结点的孩子结点
{//如果该下标在前面还没有使用过,且该下标所指示的数字比
//原先所放置的数字要大,则是一个部分解
if(used[i]==0 && (i==0 || a[i]>a[rec[depth]]) )
{ rec[depth]=i; //记录下该结点放置的下标
used[i]=1; // 标记该下标已经被使用
arrange(rec,used,depth+1); // 扩展,进入孩子结点继续搜索
used[i]=0; //退回来后要清除本结点所记录下标的使用记录
if (depth<N) rec[depth+1]=0; //要把孩子结点的使用记录清除
}
}
}
}

1楼 美女约,不在线,有人找我吗?cmag


职务 无
军衔 少校
来自 北京
发帖 291篇
注册 2006/9/8
PM币 3160
经验 1547点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/9]
楼上的算法有问题, 用的算法算 1, 1, 2, 3, 3 就不对了
--------------------------------------------------------------------------------------------------------
我就是我
2楼 美女约,不在线,有人找我吗?zfm12


职务 无
军衔 上校
来自 北京市
发帖 485篇
注册 2006/4/5
PM币 8651
经验 2666点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/9]
我这儿有一种方法, 不见得是最优的, 但能满足楼主"即不从 M! 个排列中筛选不重复项"的条件
那就是转化为组合问题:
例如: 对于以上的例子, a, b, b, c, c

一开始五个位置为空
对于a, 其可以在5个位置中造1个位置放入a, 其情况有5种,
对于上一步每种情况, 在剩下的4个位置选2个放入b, 则有6种, 共有5*6=30种
对于上一步每种情况, 在剩下的2个位置选2个放入b, 则有1种, 共有30*1=30种
按以上思路解决即可

3楼 美女约,不在线,有人找我吗?XO


职务 无
军衔 少将
来自 上海
发帖 436篇
注册 2005/1/7
PM币 10955
经验 3093点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/9]
M个元素中含有相同的元素,如何得到他们的全排列(不重复排列)?

元素表述: a1,a1,...a1, a2,a2,...a2,.......,an,an,...an
其中,a1的个数为N1, a2的个数为N2,以此类推,总个数为M。
-------------------------------------------------------------
如果老盛的方法不见得是最优的
我的这个办法可能就是很笨的了
供参考

1.取a1,自成一个满足条件的全排列
2.再取第二个放在最前面{a1,a1},第一个元素依次与后面的各元素交换(在交换之前判断是否元素相等,相等则不交换)与{a1,a1}构成一个满足条件的全排列
3.再取第3个,按照2的方式构造3个元素时满足条件的全排列
……

4楼 美女约,不在线,有人找我吗?杜娟


职务 无
军衔 上将
来自 河北省
发帖 1129篇
注册 2006/4/30
PM币 16060
经验 5363点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/9]
装错信封问题,组合数可以有递推公式计算,也有通项公式,
附件是我google到的相应文件,你可以看一下
--------------------------------------------------------------------------------------------------------
msn: chen39yi@hotmail.com
blog:http://chenyi.blogsome.com
Surely You're Joking, Mr. Feynman!
5楼 帅哥约,不在线,有人找我吗?chen39yi


职务 无
军衔 中士
来自 福建
发帖 235篇
注册 2006/5/9
PM币 1647
经验 395点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/20]
抽屉
--------------------------------------------------------------------------------------------------------
我爱我自由,我欲我拼搏
6楼 帅哥约,不在线,有人找我吗?acooling


职务 无
军衔 中尉
来自 辽宁省
发帖 434篇
注册 2004/8/15
PM币 2251
经验 817点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/22]
lihai
7楼 帅哥约,不在线,有人找我吗?whhm456


职务 无
军衔 三等兵
来自 山东
发帖 26篇
注册 2006/10/17
PM币 0
经验 34点

Re:如何得到有重复元素的不重复全排列? [回复于 2006/10/23]
项目管理师要用这样的算法那太牛X了.
8楼 帅哥约,不在线,有人找我吗?renly2008


职务 无
军衔 中士
来自 北京
发帖 51篇
注册 2006/10/22
PM币 690
经验 400点

共2页  97 [ 第1页 第2页 ] 8:
  
!  您尚未登录,不能回复主题。    现在 登录  注册
关于联盟 | VIP会员 | 培训服务 | PMP认证 | PgMP认证 | 刊物出版 | 沙龙会议 | 人才服务 | 广告投放 | 联系我们 | 友情链接
建设运营:共创时网络
版权所有 京ICP证070584号 BBS业务许可2007第353号