Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从链接列表中查找电源集_Java_Powerset - Fatal编程技术网

Java 从链接列表中查找电源集

Java 从链接列表中查找电源集,java,powerset,Java,Powerset,我正在寻找Java编程作业方面的帮助。使用链表,我需要打印出它的电源组。例如,集合{1,2,3}应该打印出来 {{},{1}{1,2}{1,3}{1,2,3}{2}{2,3}{3}}. 幂集中的元素数为2^n。 这需要通过打电话来完成 HeadNode.printpowset() 其中HeadNode是链接列表中的第一个元素。 我试过一些方法,但没有一种效果这么好。我认为最好的方法是递归调用该方法,直到到达终点哨兵,然后向后工作,添加剩下的元素。很抱歉,我不能发布更多的代码或想法,因为我尝试过

我正在寻找Java编程作业方面的帮助。使用链表,我需要打印出它的电源组。例如,集合{1,2,3}应该打印出来 {{},{1}{1,2}{1,3}{1,2,3}{2}{2,3}{3}}. 幂集中的元素数为2^n。 这需要通过打电话来完成 HeadNode.printpowset()
其中HeadNode是链接列表中的第一个元素。 我试过一些方法,但没有一种效果这么好。我认为最好的方法是递归调用该方法,直到到达终点哨兵,然后向后工作,添加剩下的元素。很抱歉,我不能发布更多的代码或想法,因为我尝试过的东西都没有那么好的效果。提前谢谢

编辑: 这是非工作代码。它返回集合{1,2,3}{2,3}{3}

public RSet powerSet() 
{
    if (this == EMPTY_SET)
        return EMPTY_SET;

    RSet q = new RSet();
    if (q != EMPTY_SET)
        q.next = next.powerSet();
    q = new RSet(this, n, q.next);

    return q;
}

空集是终点哨兵。我试过用手把它写出来。这有帮助,但我还是弄不懂。另外,这个类RSet本质上只是一个链表节点。

只需迭代从0到2^n-1的所有数字。每个定义了电源组的一个元素:

该列表定义了集合上的固定索引。为每个数字创建一个新集合。考虑到二进制格式的数字,如果索引i处的位为1,则将索引i处原始集合中的项添加到集合中,否则不要添加

然后,对于每个数字,您将有一个集,它是幂集的一个元素

int n = list.size();

Set<Set<T>> powerSet = new HashSet<Set<T>>();

for( long i = 0; i < (1 << n - 1); i++) {
    Set<T> element = new HashSet<T>();
    for( int j = 0; j < n; j++ )
        if( (i >> j) % 2 == 1 ) element.add(list.get(j));
    powerSet.add(element); 
}

return powerSet;
int n=list.size();
Set powerSet=new HashSet();
对于(长i=0;i<(1>j)%2==1)元素,添加(list.get(j));
添加(元素);
}
返回动力装置;

发布非工作代码。它是否使用
设置
。我想您可以很容易地将其修改为使用
LinkedList
提示:在列表中插入一个空元素..这样您将拥有
n+1
元素。然后生成一个递归函数,遍历列表中的所有元素(包括空元素),并找到所有三个可能的组合。例如:{Empty,Empty,1}将是{1}..在尝试编写代码之前,手工解决问题,并尝试编写清晰的人类可读指令。接下来,将这些指令转换为代码注释。最后,填写代码。这将思考如何解决问题与处理不熟悉的语言问题分开。此集合可以包含字符串或任意随机数。我只是举了一个简单的例子。是的,我所描述的算法适用于任何类型的对象。我非常欣赏它,但对于这个赋值,我们不允许使用Set或HashSet。它必须通过这个类递归完成。你在问题中根本没有提到这一点。我们不知道RSet应该是什么。你说得对,我道歉。我还不太熟悉Java,也不知道Set是Java类。我想,既然我的课程叫RSet,它会更明显一点,但我想我错了。很抱歉这样假设。