/*
* Copyright 2014 Takao Nakaguchi
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.trie4j.louds;
import org.trie4j.AbstractWikipediaTest;
import org.trie4j.Node;
import org.trie4j.Trie;
import org.trie4j.bv.LongsConstantTimeSelect0SuccinctBitVector;
import org.trie4j.louds.TailLOUDSTrie.NodeListener;
import org.trie4j.louds.bvtree.LOUDSBvTree;
import org.trie4j.tail.SuffixTrieTailArray;
import org.trie4j.test.MonitoredSuccinctBitVector;
import org.trie4j.test.TrieMemoryUsage;
public class TailLOUDSTrieWithSuffixTrieTailArrayWikipediaMonitoredSBVTest extends AbstractWikipediaTest{
@Override
protected Trie buildSecondTrie(Trie first) {
bv.resetCounts();
TailLOUDSTrie t = new TailLOUDSTrie(
first,
new LOUDSBvTree(bv),
new SuffixTrieTailArray(first.size()),
new NodeListener() {
@Override
public void listen(Node node, int id) {
}
});
t.trimToSize();
return t;
}
@Override
protected void afterVerification(Trie trie) throws Exception{
System.out.println(String.format(
"select0 time(ms): %.3f, min(ns): %d, max(ns): %d, count: %d",
bv.getSelect0Time() / 1000000.0,
bv.getSelect0MinTime(), bv.getSelect0MaxTime(),
bv.getSelect0Count()
));
System.out.println(String.format(
"next0 time(ms): %.3f, count: %d", bv.getNext0Time() / 1000000.0, bv.getNext0Count()
));
System.out.println(String.format(
"rank1 time(ms): %.3f, count: %d", bv.getRank1Time() / 1000000.0, bv.getRank1Count()
));
new TrieMemoryUsage().print(trie);
// System.out.println("select0Times:");
/* int c = 0;
for(long l : bv.getSelect0Times()){
System.out.print(l + " ");
if(++c % 100 == 0) System.out.println();
*/
/*
for(Map.Entry<Long, Integer> entry : bv.getSelect0TimesMap().entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
*/
/*
TailLOUDSTrie t = (TailLOUDSTrie)trie;
final Map<Integer, List<Integer>> childrenCounts = new TreeMap<Integer, List<Integer>>(
new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
Algorithms.traverseByBreadth(t.getRoot(), new NodeVisitor() {
@Override
public boolean visit(Node node, int nest) {
int n = node.getChildren().length;
List<Integer> nodes = childrenCounts.get(n);
if(nodes == null){
nodes = new ArrayList<Integer>();
childrenCounts.put(n, nodes);
}
nodes.add(c++);
return c < 6189;
}
int c = 0;
});
for(Map.Entry<Integer, List<Integer>> entry : childrenCounts.entrySet()){
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Thread.sleep(10000);
//*/
}
private MonitoredSuccinctBitVector bv = new MonitoredSuccinctBitVector(
// new BytesSuccinctBitVector(65536)
// new BytesConstantTimeSelect0SuccinctBitVector(65536)
// new LongsSuccinctBitVector(65536)
new LongsConstantTimeSelect0SuccinctBitVector(65536)
);
}