2013-12-12 3 views
0

Я пытаюсь найти синтаксис набора рекурсивно, а затем распечатать результаты, которые я очень застрял на любой помощи, будет очень признателен.Найти результирующий массив набора

public static ArrayList<String> getpowerset(int a[],int n, ArrayList<String> power){ 
    if(n<0) 
    { 
     return null; 
    } 

    if(n==0) 
    { 
     if(power==null) 
      power=new ArrayList<String>(); 
     power.add(" "); 
     return power; 
    } 

    power=getpowerset(a, n-1, power); 
    ArrayList<String> tmp=new ArrayList<String>(); 
    for(String s:power) 
    { 
     if(s.equals(" ")) 
      tmp.add(""+a[n-1]); 
     else 
      tmp.add(s+a[n-1]); 
    } 

    power.addAll(tmp); 
    return power; 
for (int i = 0; i<power.size();i++){ 
    System.out.println(power); 
    } 
+0

Вы должны описать то, что ваш код в настоящее время делает. Включите ожидаемый и фактический вывод, если это применимо. Кроме того, у вас есть код после вашего (безусловного) оператора return, который никогда не действителен в Java (или там что-то еще странное происходит) - пожалуйста, укажите скомпилированный пример кода или, если вы спросите о ошибке компилятора, также включите эта ошибка или, если вы знаете, что код не будет работать, напишите псевдокод или описание высокого уровня вместо или в дополнение к фактическому коду. – Dukeling

ответ

1

Try рекурсивно думать:

  • базовый случай) Powerset пустого множества является пустым множеством
  • прн. случай) Powerset из списка, таких [firstElemnt] + restOfTheList является Powerset из restOfTheList плюс каждый элемент Powerset из restOfTheList прикован с firstElemnt

Пример:

Учитывая список [а, Ь , с]:

  • Powerset из [] -> [[]] (набор с пустым множеством)
  • Powerset из [а] -> [[], [а]] (добавлено a к каждому элементу предыдущего Powerset)
  • Powerset [а, Ь] -> [[], [а], [б], [а, Ь]] (добавлен b к каждому элементу предыдущего силового набора)
  • набор команд [a, b, c] -> [[], [a], [b], [a, b], [c], [a, с], [а, б, в]] (добавлено c к каждому элементу предыдущего Powerset)

АЛГОРИТМ

public static List<List<String>> powerset(final LinkedList<String> originalSet) { 
    final List<List<String>> powerset = new LinkedList<List<String>>(); 
    //Base case: empty set 
    if ((originalSet == null) || (originalSet.size() == 0)) { 
     final List<String> set = new ArrayList<String>(); 
     //System.out.println(set); 
     powerset.add(set); 
    } else { 
     //Recursive case: 
     final String firstElement = originalSet.removeFirst(); 
     final List<List<String>> prevPowerset = powerset(originalSet); 
     powerset.addAll(prevPowerset); 
     //Add firstElement to each of the set of the previuos powerset 
     for (final List<String> prevSet : prevPowerset) { 
      final List<String> newSet = new ArrayList<String>(prevSet); 
      newSet.add(firstElement); 
      //System.out.println(newSet); 
      powerset.add(newSet); 
     } 
    } 
    return powerset; 
} 

TEST

public static void main(final String[] args) { 
    final LinkedList<String> originalSet = new LinkedList<String>(); 
    originalSet.add("a"); 
    originalSet.add("b"); 
    originalSet.add("c"); 
    System.out.println("The powerset of " + originalSet + " is:"); 
    System.out.println(powerset(originalSet)); 
} 

ВЫВОД

The powerset of [a, b, c] is: 
[[], [c], [b], [c, b], [a], [c, a], [b, a], [c, b, a]] 

Обратите внимание, что я импортировал следующие классы:

import java.util.ArrayList; 
import java.util.LinkedList; 
import java.util.List; 
Смежные вопросы