Implemented Algorithm Only.
This commit is contained in:
parent
7fa5f88499
commit
da90939e5e
@ -72,12 +72,85 @@ public class Partition {
|
|||||||
private int[] set;
|
private int[] set;
|
||||||
private List<List<Integer>> subsets;
|
private List<List<Integer>> subsets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates through all the possible subsets generated by this.generateSubsets
|
||||||
|
* and if a subset is found that is exactly half the size it sets the firstset
|
||||||
|
* to those values and the second subset to the missing values.
|
||||||
|
*
|
||||||
|
* @precondition set.length != 0
|
||||||
|
* @postcondition the resulting sets are printed.
|
||||||
|
*/
|
||||||
public void performAlgorithm() {
|
public void performAlgorithm() {
|
||||||
|
|
||||||
int totalSum = 0;
|
int totalSum = 0;
|
||||||
for (int i = 0; i < this.set.length; i++) {
|
for (int i = 0; i < this.set.length; i++) {
|
||||||
totalSum += this.set[i];
|
totalSum += this.set[i];
|
||||||
}
|
}
|
||||||
|
List<Integer> firstSubset = null;
|
||||||
|
List<Integer> secondSubset = null;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks through every subset that was generated,
|
||||||
|
* if a subset is found it sets the firstSubset to the found subset.
|
||||||
|
*/
|
||||||
|
for (List<Integer> subset : subsets) {
|
||||||
|
int subsetTotal = 0;
|
||||||
|
for (int value : subset) {
|
||||||
|
subsetTotal += value;
|
||||||
|
}
|
||||||
|
if (totalSum / 2 == subsetTotal) {
|
||||||
|
firstSubset = subset;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Checks if a list was found, if so creates second sublist. */
|
||||||
|
if (firstSubset != null) {
|
||||||
|
secondSubset = new ArrayList<>();
|
||||||
|
for (int secondValue : this.set) {
|
||||||
|
if (!firstSubset.contains(secondValue)) {
|
||||||
|
secondSubset.add(secondValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printResults(firstSubset, secondSubset);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints the results of the algorithm based on the two subsets. Prints the setsize, the original set.
|
||||||
|
* If the subsets were null (No match found) print output associated, else print the both lists.
|
||||||
|
*
|
||||||
|
* @precondition none
|
||||||
|
* @postcondition the output is displayed.
|
||||||
|
*
|
||||||
|
* @param firstSubset the first subset.
|
||||||
|
* @param secondSubset the second subset.
|
||||||
|
*/
|
||||||
|
private void printResults(List<Integer> firstSubset, List<Integer> secondSubset) {
|
||||||
|
int setSize = this.set.length;
|
||||||
|
String original = "";
|
||||||
|
for (int values : this.set) {
|
||||||
|
original += values + " ";
|
||||||
|
}
|
||||||
|
String first = "{";
|
||||||
|
String second = "{";
|
||||||
|
if (firstSubset != null) {
|
||||||
|
for (int fvalues : firstSubset) {
|
||||||
|
first += fvalues + ",";
|
||||||
|
}
|
||||||
|
first = first.substring(0, first.length()-1) + "}";
|
||||||
|
for (int svalues : secondSubset) {
|
||||||
|
second += svalues + ",";
|
||||||
|
}
|
||||||
|
second = second.substring(0, second.length()-1) + "}";
|
||||||
|
} else {
|
||||||
|
first = "No disjoint subsets with the same sum";
|
||||||
|
second = "of their elements found";
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Set size: " + setSize);
|
||||||
|
System.out.println("Integer values: " + original);
|
||||||
|
System.out.println("Disjoint subsets with same sum: " + first);
|
||||||
|
System.out.println(" " + second);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user