diff options
author | 2012-05-14 19:11:06 -0700 | |
---|---|---|
committer | 2012-05-14 19:11:06 -0700 | |
commit | f5ac6c725a0e12c1ed796de9f255103b957e1724 (patch) | |
tree | e0ae7f815fb9b28ca9b35715fdf911d898d250ca /java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java | |
parent | f184e73dd77464c53cbfe2815916e826cd32f318 (diff) | |
parent | 3b1b72ac4d8975d24a3176dd1b5a39b5fead71a8 (diff) | |
download | latinime-f5ac6c725a0e12c1ed796de9f255103b957e1724.tar.gz latinime-f5ac6c725a0e12c1ed796de9f255103b957e1724.tar.xz latinime-f5ac6c725a0e12c1ed796de9f255103b957e1724.zip |
Merge "More optimizations" into jb-dev
Diffstat (limited to 'java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java index 3c818cc56..bb1042324 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java @@ -489,10 +489,17 @@ public class BinaryDictInputOutput { // Merging tails can only be done if there are no attributes. Searching for attributes // in LatinIME code depends on a total breadth-first ordering, which merging tails // breaks. If there are no attributes, it should be fine (and reduce the file size) - // to merge tails, and the following step would be necessary. - // If eventually the code runs on Android, searching through the whole array each time - // may be a performance concern. - list.remove(node); + // to merge tails, and removing the node from the list would be necessary. However, + // we don't merge tails because breaking the breadth-first ordering would result in + // extreme overhead at bigram lookup time (it would make the search function O(n) instead + // of the current O(log(n)), where n=number of nodes in the dictionary which is pretty + // high). + // If no nodes are ever merged, we can't have the same node twice in the list, hence + // searching for duplicates in unnecessary. It is also very performance consuming, + // since `list' is an ArrayList so it's an O(n) operation that runs on all nodes, making + // this simple list.remove operation O(n*n) overall. On Android this overhead is very + // high. + // For future reference, the code to remove duplicate is a simple : list.remove(node); list.add(node); final ArrayList<CharGroup> branches = node.mData; final int nodeSize = branches.size(); |