一个排列组合的算法

qxksos 2006-02-15 09:56:34
从一个数租 double[m] arrayXp中,选取n个元素相加(n<=m),列出所有结果。
请问那位有好的算法?
...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2006-02-15
  • 打赏
  • 举报
回复
private void mn(int m, int n) {
if(m < n)
throw new IllegalArgumentException("Error m < n");
int[] array = new int[m];
for(int i = 0; i < m; i ++)
array[i] = i + 1;
BitSet bs = new BitSet(m);
for(int i = 0; i < n; i++)
bs.set(i, true);
do {
printAll(array, bs);
}while(moveNext(bs, m));

}
private boolean moveNext(BitSet bs, int m) {
int start = -1;
while(start < m)
if(bs.get(++start))
break;
if(start >= m)
return false;

int end = start;
while(end < m)
if(!bs.get(++end))
break;
if(end >= m)
return false;
for(int i = start; i < end; i++)
bs.set(i, false);
for(int i = 0; i < end - start - 1; i++)
bs.set(i);
bs.set(end);
return true;
}
private void printAll(int[] array, BitSet bs) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < array.length; i++)
if(bs.get(i))
sb.append(array[i]).append(',');
sb.setLength(sb.length() - 1);
System.out.println(sb);
}
public static void main(String[] args) throws Exception {
new TestA().mn(8, 3);
}


这个是组合,排列可以在选取出来后再计算一次这个数列中的所有可能
zijing660 2006-02-15
  • 打赏
  • 举报
回复
没那么简单的吧?选取N个元素如果是随机选取的呢?那就不能用穷举来做了;还要判断下次随机取数不能取到相同位置上的数。。。。。。
qxksos 2006-02-15
  • 打赏
  • 举报
回复
关键是怎么穷举?请给出具体的算法,谢谢
TinyJimmy 2006-02-15
  • 打赏
  • 举报
回复
穷举吧, 最老的方法
jihanzhong 2006-02-15
  • 打赏
  • 举报
回复
都已经是所有结果了,当然是穷举法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧