h
This commit is contained in:
@@ -2,7 +2,6 @@ package huffman_coding;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import tester.Tester;
|
import tester.Tester;
|
||||||
|
|
||||||
class Examples {
|
class Examples {
|
||||||
@@ -13,8 +12,12 @@ class Examples {
|
|||||||
ITree d;
|
ITree d;
|
||||||
ITree e;
|
ITree e;
|
||||||
ITree f;
|
ITree f;
|
||||||
|
ITree g, h, i, j;
|
||||||
|
|
||||||
ArrayList<ITree> trees;
|
ArrayList<ITree> trees;
|
||||||
|
ArrayList<ITree> treesSomeSorted;
|
||||||
|
ArrayList<ITree> treesFirstTwoSorted;
|
||||||
|
ArrayList<ITree> treesSame;
|
||||||
ArrayList<ITree> treesSorted;
|
ArrayList<ITree> treesSorted;
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
@@ -24,21 +27,64 @@ class Examples {
|
|||||||
d = new Leaf(13, "d");
|
d = new Leaf(13, "d");
|
||||||
e = new Leaf(9, "e");
|
e = new Leaf(9, "e");
|
||||||
f = new Leaf(16, "f");
|
f = new Leaf(16, "f");
|
||||||
|
g = new Leaf(928373743, "f");
|
||||||
|
h = new Leaf(1, "h");
|
||||||
|
i = new Leaf(1, "i");
|
||||||
|
j = new Leaf(1, "j");
|
||||||
|
|
||||||
trees = new ArrayList<ITree>(Arrays.asList(a, b, c, d, e, f));
|
trees = new ArrayList<ITree>(Arrays.asList(a, b, c, d, e, f));
|
||||||
|
treesSomeSorted = new ArrayList<ITree>(Arrays.asList(e, d, f));
|
||||||
|
treesFirstTwoSorted = new ArrayList<ITree>(Arrays.asList(c, e, b, f));
|
||||||
|
treesSame = new ArrayList<ITree>(Arrays.asList(h, i));
|
||||||
treesSorted = new ArrayList<ITree>(Arrays.asList(c, e, a, d, f, b));
|
treesSorted = new ArrayList<ITree>(Arrays.asList(c, e, a, d, f, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
void testITreeSort(Tester t) {
|
void testUtilInsertIntoSorted(Tester t) {
|
||||||
init();
|
init();
|
||||||
t.checkExpect(Util.sort(trees), treesSorted);
|
Util.insertIntoSorted(c, treesSomeSorted);
|
||||||
|
t.checkExpect(
|
||||||
|
treesSomeSorted,
|
||||||
|
new ArrayList<ITree>(Arrays.asList(c, e, d, f)));
|
||||||
|
Util.insertIntoSorted(a, treesSomeSorted);
|
||||||
|
t.checkExpect(
|
||||||
|
treesSomeSorted,
|
||||||
|
new ArrayList<ITree>(Arrays.asList(c, e, a, d, f)));
|
||||||
|
Util.insertIntoSorted(b, treesSomeSorted);
|
||||||
|
t.checkExpect(
|
||||||
|
treesSomeSorted,
|
||||||
|
new ArrayList<ITree>(Arrays.asList(c, e, a, d, f, b)));
|
||||||
|
Util.insertIntoSorted(j, treesSame);
|
||||||
|
t.checkExpect(treesSame, new ArrayList<ITree>(Arrays.asList(h, i, j)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void testUtilInsert(Tester t) {
|
||||||
|
init();
|
||||||
|
Util.insert(a, treesFirstTwoSorted, 2);
|
||||||
|
t.checkExpect(
|
||||||
|
treesFirstTwoSorted,
|
||||||
|
new ArrayList<ITree>(Arrays.asList(c, e, a, b, f)));
|
||||||
|
Util.insert(g, treesFirstTwoSorted, 3);
|
||||||
|
t.checkExpect(
|
||||||
|
treesFirstTwoSorted,
|
||||||
|
new ArrayList<ITree>(Arrays.asList(c, e, a, g, b, f)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void testUtilSort(Tester t) {
|
||||||
|
init();
|
||||||
|
ArrayList<ITree> treesSortedCp = treesSorted;
|
||||||
|
|
||||||
|
Util.sort(treesSortedCp);
|
||||||
|
t.checkExpect(treesSortedCp, treesSorted);
|
||||||
|
|
||||||
|
Util.sort(trees);
|
||||||
|
t.checkExpect(trees, treesSorted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Huffman {
|
class Huffman {
|
||||||
|
|
||||||
ArrayList<String> charset; // Character set.
|
ArrayList<String> charset; // Character set.
|
||||||
ArrayList<Integer> freqs; // Frequencies of characters.
|
ArrayList<Integer> freqs; // Frequencies of characters in charset.
|
||||||
|
|
||||||
Huffman(ArrayList<String> charset, ArrayList<Integer> freqs) {
|
Huffman(ArrayList<String> charset, ArrayList<Integer> freqs) {
|
||||||
if (charset.size() != freqs.size())
|
if (charset.size() != freqs.size())
|
||||||
@@ -52,6 +98,18 @@ class Huffman {
|
|||||||
this.charset = charset;
|
this.charset = charset;
|
||||||
this.freqs = freqs;
|
this.freqs = freqs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* // Encode a message.
|
||||||
|
* ArrayList<Boolean> encode(String s) {
|
||||||
|
* for
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Decode a message.
|
||||||
|
* String decode(ArrayList<Boolean> c) {
|
||||||
|
*
|
||||||
|
* }
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// Binary tree.
|
// Binary tree.
|
||||||
@@ -105,50 +163,40 @@ class Leaf extends ATree {
|
|||||||
class Util {
|
class Util {
|
||||||
|
|
||||||
// Sort a list of trees from least to most frequent.
|
// Sort a list of trees from least to most frequent.
|
||||||
static ArrayList<ITree> sort(ArrayList<ITree> trees) {
|
static void sort(ArrayList<ITree> trees) {
|
||||||
System.out.println("Sorting.");
|
// Our work here is done.
|
||||||
// The sorted list starts out as just the first element.
|
if (trees.size() < 2)
|
||||||
ArrayList<ITree> sorted = new ArrayList<ITree>(Arrays.asList(trees.getFirst())); // Why must this be so fucking
|
return;
|
||||||
// verbose.
|
|
||||||
|
|
||||||
if (trees.size() == 1)
|
for (int i = 1; i < trees.size(); i++) {
|
||||||
return sorted;
|
// Copy out the tree to insert.
|
||||||
|
ITree tree = trees.get(i);
|
||||||
for (int i = 1; i < trees.size() - 1; i++) {
|
trees.remove(tree);
|
||||||
Util.insert(trees.get(i), sorted, i);
|
// Insert it.
|
||||||
|
insert(tree, trees, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return sorted;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert a Tree into an ArrayList of trees already sorted in [0, i), where
|
// Insert a Tree into an ArrayList of trees already sorted in [0, i), where
|
||||||
// 0 <= i <= trees.size(), such that it is sorted through [0, i].
|
// 0 <= i <= trees.size(), such that it is sorted through [0, i].
|
||||||
static void insert(ITree tree, ArrayList<ITree> trees, int i) {
|
static void insert(ITree tree, ArrayList<ITree> trees, int i) {
|
||||||
<<<<<<< Updated upstream
|
// Extract sorted.
|
||||||
System.out.println("Set j = 0. While j < " + (i + 1) + ", j++.");
|
ArrayList<ITree> sorted = new ArrayList<>(trees.subList(0, i));
|
||||||
for (int j = 0; j < (i + 1); j++) {
|
// Insert tree.
|
||||||
=======
|
insertIntoSorted(tree, sorted);
|
||||||
for (int j = 0; j < i + 1; j++) {
|
// Overwrite original trees with sorted ones.
|
||||||
System.out.println("it's here it's fucking here");
|
for (int j = 0; j < i; trees.set(j, sorted.get(j++)))
|
||||||
>>>>>>> Stashed changes
|
;
|
||||||
if (trees.get(j).lessThan(tree)) {
|
trees.add(i, sorted.getLast());
|
||||||
trees.add(j, tree);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
trees.add(i, tree);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert a Tree in an already fully sorted ArrayList of Trees.
|
// Insert a Tree in an already fully sorted ArrayList of Trees.
|
||||||
static void insert(ITree tree, ArrayList<ITree> sortedTrees) {
|
static void insertIntoSorted(ITree tree, ArrayList<ITree> sortedTrees) {
|
||||||
for (int i = 0; i < sortedTrees.size(); i++) {
|
for (int i = 0; i < sortedTrees.size(); i++)
|
||||||
System.out.println("h");
|
|
||||||
if (sortedTrees.get(i).lessThan(tree)) {
|
if (sortedTrees.get(i).lessThan(tree)) {
|
||||||
sortedTrees.add(i, tree);
|
sortedTrees.add(i, tree);//
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
sortedTrees.addLast(tree); // This tree is bigger than all the others.
|
sortedTrees.addLast(tree); // This tree is bigger than all the others.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user