网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  遍历m取n的所有组合     
  文章作者:未知  文章来源:未知  
  查看:188次  录入:管理员--2007-03-25  
     /**

  * <pre>

  * 求mn的所有组合。

  * m
个数分别为0,1,2...m-1.

  *
算法简述:

  *  
二个组合,若仅有元素顺序不同,视其为同一个组合。

  *  
左位系低位,右位系高位。

  *  
按自然的取法取第一个组合(各数位分别是:0,1,2...n-1),以后的所有组合都经上一个组合变化而来:

  *  
从右至左,找到有增量空间的位,将其加1,使高于该位的所有位,均比其左邻位大1,从而形成新的组合。

  *  
若所有位均无增量空间,说明所有组合均已被遍历。

  *  
使用该方法所生成的组合数中:对任意组合int[] c,下标小的数必定小于下标大的数.

  * </pre>

  */

public class Combination {

  int n, m;

  int[] pre;//previous combination.
  public Combination(int n, int m) {
this.n = n;
this.m = m;
}
  /**
*
取下一个组合。可避免一次性返回所有的组合(数量巨大,浪费资源)
* if return null,
所有组合均已取完。
*/
public int[] next() {
if (pre == null) {//
取第一个组合,以后的所有组合都经上一个组合变化而来。
pre = new int[n];
for (int i = 0; i < pre.length; i++) {
pre[i] = i;
}
int[] ret = new int[n];
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
int ni = n - 1, maxNi = m - 1;
while (pre[ni] + 1 > maxNi) {//
从右至左,找到有增量空间的位。
ni--;
maxNi--;
if (ni < 0)
return null;//
若未找到,说明了所有的组合均已取完。
}
pre[ni]++;
while (++ni < n) {
pre[ni] = pre[ni - 1] + 1;
}
int[] ret = new int[n];
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
 }
 
 
上一篇: BeanShell桌面---Java应用程序脚本引擎    下一篇: Java游戏编程读书笔记
  相关文档
用solsticeenterprisemanager建立java网络管理应用程序 11-17
j2me网络应用程序在几款机器下性能比较 11-17
java语言会因为 ror 的流行而过时吗? 11-16
动态扩展java应用 11-16
中间件--rfid中间件的研究现状与展望 01-24
java琐碎笔记 11-17
java小知识 11-17
进入harmony 世界,类库开发最佳实践 11-17
请关注j2me wtk2.2 的新特性 11-17
如何运行一个外部程序并捕获输出 11-17
使用j2me中的page进行编码转化 11-17
java?渗入各个领域的技术 11-17
netbeans 5.0 rc1 发布 11-17
.net事务处理并发性处理的意义 11-17
调用java编译器api编译java 11-17
设计模式之flyweight 11-17
java嵌入式开发之j2me--三 11-17
apache 1.3.14主要变化 11-17
开发技巧:spring总结实例之消息与事件 11-16
驯服j2se1.5之从 xml 中装载属性 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息