java列表代码,用于排列数字列表的Java代码

我编写了一个程序来查找给定项目列表的所有可能的排列.这恰恰意味着我的程序打印r = 0到n的所有可能的P(n,r)值

以下是代码:

package com.algorithm;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Collection;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class Permutations {

public static void main(String args[]) {

Permutations obj = new Permutations();

Collection input = new ArrayList();

input.add(1);

input.add(2);

input.add(3);

Collection> output = obj.permute(input);

int k = 0;

Set> pnr = null;

for (int i = 0; i <= input.size(); i++) {

pnr = new HashSet>();

for(List integers : output){

pnr.add(integers.subList(i, integers.size()));

}

k = input.size()- i;

System.out.println("P("+input.size()+","+k+") :"+

"Count ("+pnr.size()+") :- "+pnr);

}

}

public Collection> permute(Collection input) {

Collection> output = new ArrayList>();

if (input.isEmpty()) {

output.add(new ArrayList());

return output;

}

List list = new ArrayList(input);

T head = list.get(0);

List rest = list.subList(1, list.size());

for (List permutations : permute(rest)) {

List> subLists = new ArrayList>();

for (int i = 0; i <= permutations.size(); i++) {

List subList = new ArrayList();

subList.addAll(permutations);

subList.add(i, head);

subLists.add(subList);

}

output.addAll(subLists);

}

return output;

}

}

产量

P(3,3) : Count (6) :- [[1, 2, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2], [2, 1, 3], [1, 3, 2]]

P(3,2) : Count (6) :- [[3, 1], [2, 1], [3, 2], [1, 3], [2, 3], [1, 2]]

P(3,1) : Count (3) :- [[3], [1], [2]]

P(3,0) : Count (1) :- [[]]

我的问题是,随着我增加输入列表中的数字.运行时间增加,输入列表中的11个数字后,程序几乎死亡.需要大约2 GB内存才能运行.

我在具有8GB RAM和i5处理器的机器上运行它,因此速度和空间不是问题.

如果有人能帮我写一个更有效的代码,我将不胜感激.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值