|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
一直以来,对此随机整数产生问题都很无力,这个问题源于差分进化算法中的选择过程:
问题的简单描述:
假如有 1到n 范围内的整数 ,
从中随机的选出不重复的三个随机整数构成一个组合,
试产生这样的组合若干个:
如在 1到10 中产生若干这样的组合:
ans =
2 ,4 ,6
7 ,9 ,3
1 ,5 ,2
3 ,6 ,2
8 ,5 ,1
7 ,2 ,4
。。。。。
现在有两个方案,但效果并不好:
方案一:
sq = randperm(n); arrayNeed = sq(1:3);
这种方案时间耗费太大(大概因为randperm的机制是将随机数排序完成选择的),
因为算法运行的次数高达几十万次,严重拖慢速度
方案二: 产生一个数组:
array = 1:n;
产生一个1到n的整数:
rand1 = mod(floor(rand*n),n))+1 ,
从而得到:第一个要求的随机数:
randNumberOne = array(rand1);
然后另 array 数组在rand1 位置的元素为空:
array(rand1) = [];
接着,重复上述过程,选择1到n-1间的随机数 rand2 等等
方案二的效率同样不容乐观 ,因为反复的对数组进行内存的操作,降低了效能,
诚恳地想和大家交流,请大家集思广益,帮我解决这个困扰我依旧的问题。
谢谢大家!
[ 本帖最后由 lilongduzhi 于 2009-11-16 22:17 编辑 ] |
|