BuK/IIm12/Studenten/siclsche/Thema3/wordAmount
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
Quellcode zu WordAmount.java
<code id="516bcc61cd5ee">
public class WordAmountStream {
private Alphabet alpha;
int upperWordBorder = 100;//Anzahl der ersten Element einer Menge M die ausgegeben werden
public WordAmountStream(ArrayList<String> alphabet){
this.alpha = new Alphabet(alphabet);
}
/**
* Berechnet die Potenzmenge einer Menge M.
* @return Potenzmenge
*/
public ArrayList<ArrayList<String>> getPotency(){
ArrayList<ArrayList<String>> potencyAmount = new ArrayList<ArrayList<String>>();
countPotency(alpha.getAlphabet(),potencyAmount);
ArrayList<String> emptyAmount = new ArrayList<String>();
emptyAmount.add(0, " ");
potencyAmount.add(0, emptyAmount);
return potencyAmount;
}
private void countPotency(ArrayList<String> alphabet,ArrayList<ArrayList<String>> potencyAmount){
MyStack<ArrayList<String>> stack = new MyStack<ArrayList<String>>();
if(alphabet.isEmpty()){
return;
}
// fülle den Stack
for(String letter : alphabet){
ArrayList<String> tempAmount = new ArrayList<String>();
tempAmount.add(letter);
stack.add(tempAmount);
}
//trage die erste Teilmenge ein
potencyAmount.add(stack.getElementAt(0));
while (!stack.isEmpty()){
//hole die erste nicht leere Menge aus dem Stack und füge diese der Potenzmenge hinzu
ArrayList<String> firstAmount = stack.pop();
//potencyAmount.add(firstAmount);
ArrayList<String> nextSubsetToPush = new ArrayList<String>();
for(int i = 0;i < stack.getSize();i++){
//kombiniere alle Restmengen mit der ersten Menge
ArrayList <String> tmpSubset = new ArrayList<String>(firstAmount);
tmpSubset.add(stack.getElementAt(i).get(0));
if(i == 0){
nextSubsetToPush = new ArrayList<String>(tmpSubset);
}
potencyAmount.add(tmpSubset);
}
//ersetze das nächste Element mit der ersten Kombination
stack.pop();
if(!stack.isEmpty()){
stack.push(nextSubsetToPush);
}
}
//lösche das erste zeichen aus dem Alphabet und rufe erneut die Funktion auf
if(stack.isEmpty()){
alphabet.remove(0);
countPotency(alphabet,potencyAmount);
}
}
/**
* Gibt alle Wörter aus A* über dem Alphabet A, bis zur upperBorder, zurück.
* Bemerkung: eingegebene Menge A muss geordnet sein
* @return Liste der ersten n Elemente
*/
public ArrayList<String> getWordAmount(int upperBorder){
ArrayList<String> amount = new ArrayList<String>();
amount.add(" ");
int count = 0;
for (int i = 0; i < alpha.getAlphabet().size(); i++){
String currentLetter = alpha.getLetter(i);
amount.add(currentLetter);
count++;
}
for (int i = 1; i < amount.size(); i++){
for (int j = 0; j < alpha.getAlphabet().size(); j++){
String currentLetter = amount.get(i) + alpha.getLetter(j);
amount.add(currentLetter);
count++;
}
if(count >= upperWordBorder){
break;
}
}
return amount;
}
private class Alphabet{
private ArrayList <String> alpha;
public Alphabet (ArrayList <String> alpha){
this.alpha = new ArrayList<String>(alpha);
}
public String getLetter(int index){
if( index < alpha.size() ){
return alpha.get(index);
}
return null;
}
public ArrayList<String> getAlphabet(){
return alpha;
}
}
}
</code>
[[BuK/IIm12/Studenten/siclsche/Thema3/MyStack|MyStack.java]]