读书人

java 关于区间树KD树线段树舒展

发布时间: 2012-11-23 00:03:43 作者: rapoo

java 关于区间树,KD树,线段树,伸展树,后缀树,红黑树的几段代码

区间树

可以统计某个区间对应的重复的区间

private static boolean testIntervalTree() {        {            //Interval tree            if (debug>1) System.out.println("Interval Tree.");            java.util.List<IntervalTree.IntervalData<String>> intervals = new ArrayList<IntervalTree.IntervalData<String>>();            intervals.add((new IntervalTree.IntervalData<String>(2, 6, "RED")));            intervals.add((new IntervalTree.IntervalData<String>(3, 5, "ORANGE")));            intervals.add((new IntervalTree.IntervalData<String>(4, 11, "GREEN")));            intervals.add((new IntervalTree.IntervalData<String>(5, 10, "DARK_GREEN")));            intervals.add((new IntervalTree.IntervalData<String>(8, 12, "BLUE")));            intervals.add((new IntervalTree.IntervalData<String>(9, 14, "PURPLE")));            intervals.add((new IntervalTree.IntervalData<String>(13, 15, "BLACK")));            IntervalTree<String> tree = new IntervalTree<String>(intervals);            if (debug>1) System.out.println(tree);            IntervalTree.IntervalData<String> query = tree.query(2);            if (debug>1) System.out.println("2: "+query);            query = tree.query(4); //Stabbing query            if (debug>1) System.out.println("4: "+query);            query = tree.query(9); //Stabbing query            if (debug>1) System.out.println("9: "+query);            query = tree.query(1, 16); //Range query            if (debug>1) System.out.println("1->16: "+query);            query = tree.query(7, 14); //Range query            if (debug>1) System.out.println("7->14: "+query);            query = tree.query(14, 15); //Range query            if (debug>1) System.out.println("14->15: "+query);            if (debug>1) System.out.println();        }        {            //Lifespan Interval tree            if (debug>1) System.out.println("Lifespan Interval Tree.");            java.util.List<IntervalTree.IntervalData<String>> intervals = new ArrayList<IntervalTree.IntervalData<String>>();            intervals.add((new IntervalTree.IntervalData<String>(1888, 1971, "Stravinsky")));            intervals.add((new IntervalTree.IntervalData<String>(1874, 1951, "Schoenberg")));            intervals.add((new IntervalTree.IntervalData<String>(1843, 1907, "Grieg")));            intervals.add((new IntervalTree.IntervalData<String>(1779, 1828, "Schubert")));            intervals.add((new IntervalTree.IntervalData<String>(1756, 1791, "Mozart")));            intervals.add((new IntervalTree.IntervalData<String>(1585, 1672, "Schuetz")));            IntervalTree<String> tree = new IntervalTree<String>(intervals);            if (debug>1) System.out.println(tree);            IntervalTree.IntervalData<String> query = tree.query(1890);            if (debug>1) System.out.println("1890: "+query);            query = tree.query(1909); //Stabbing query            if (debug>1) System.out.println("1909: "+query);            query = tree.query(1792, 1903); //Range query            if (debug>1) System.out.println("1792->1903: "+query);            query = tree.query(1776, 1799); //Range query            if (debug>1) System.out.println("1776->1799: "+query);            if (debug>1) System.out.println();        }        return true;    }  private static boolean testJavaRedBlackTree() {        {            long count = 0;            long addTime = 0L;            long removeTime = 0L;            long beforeAddTime = 0L;            long afterAddTime = 0L;            long beforeRemoveTime = 0L;            long afterRemoveTime = 0L;            long memory = 0L;            long beforeMemory = 0L;            long afterMemory = 0L;            //Java's Red-Black Tree            if (debug>1) System.out.println("Java's Red-Black Tree");            testNames[testIndex] = "Java's RedBlack Tree";            count++;            if (debugMemory) beforeMemory = DataStructures.getMemoryUse();            if (debugTime) beforeAddTime = System.currentTimeMillis();            java.util.TreeSet<Integer> tree = new java.util.TreeSet<Integer>();            for (int i=0; i<unsorted.length; i++) {                int item = unsorted[i];                tree.add(item);            }            if (debugTime) {                afterAddTime = System.currentTimeMillis();                addTime += afterAddTime-beforeAddTime;                if (debug>0) System.out.println("Java's Red-Black Tree add time = "+addTime/count+" ms");            }            if (debugMemory) {                afterMemory = DataStructures.getMemoryUse();                memory += afterMemory-beforeMemory;                if (debug>0) System.out.println("Java's Red-Black Tree memory use = "+(memory/count)+" bytes");            }            boolean contains = tree.contains(INVALID);            boolean removed = tree.remove(INVALID);            if (contains || removed) {                System.err.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);            if (debug>1) System.out.println(tree.toString());            long lookupTime = 0L;            long beforeLookupTime = 0L;            long afterLookupTime = 0L;            if (debugTime) beforeLookupTime = System.currentTimeMillis();            for (int item : unsorted) {                tree.contains(item);            }            if (debugTime) {                afterLookupTime = System.currentTimeMillis();                lookupTime += afterLookupTime-beforeLookupTime;                if (debug>0) System.out.println("Java's Red-Black lookup time = "+lookupTime/count+" ms");            }            if (debugTime) beforeRemoveTime = System.currentTimeMillis();            for (int i=0; i<unsorted.length; i++) {                int item = unsorted[i];                tree.remove(item);            }            if (debugTime) {                afterRemoveTime = System.currentTimeMillis();                removeTime += afterRemoveTime-beforeRemoveTime;                if (debug>0) System.out.println("Java's Red-Black Tree remove time = "+removeTime/count+" ms");            }            contains = tree.contains(INVALID);            removed = tree.remove(INVALID);            if (contains || removed) {                System.err.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);            count++;            if (debugMemory) beforeMemory = DataStructures.getMemoryUse();            if (debugTime) beforeAddTime = System.currentTimeMillis();            for (int i=unsorted.length-1; i>=0; i--) {                int item = unsorted[i];                tree.add(item);            }            if (debugTime) {                afterAddTime = System.currentTimeMillis();                addTime += afterAddTime-beforeAddTime;                if (debug>0) System.out.println("Java's Red-Black Tree add time = "+addTime/count+" ms");            }            if (debugMemory) {                afterMemory = DataStructures.getMemoryUse();                memory += afterMemory-beforeMemory;                if (debug>0) System.out.println("Java's Red-Black Tree memory use = "+(memory/count)+" bytes");            }            contains = tree.contains(INVALID);            removed = tree.remove(INVALID);            if (contains || removed) {                System.err.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);            if (debug>1) System.out.println(tree.toString());            lookupTime = 0L;            beforeLookupTime = 0L;            afterLookupTime = 0L;            if (debugTime) beforeLookupTime = System.currentTimeMillis();            for (int item : unsorted) {                tree.contains(item);            }            if (debugTime) {                afterLookupTime = System.currentTimeMillis();                lookupTime += afterLookupTime-beforeLookupTime;                if (debug>0) System.out.println("Java's Red-Black Tree lookup time = "+lookupTime/count+" ms");            }            if (debugTime) beforeRemoveTime = System.currentTimeMillis();            for (int i=0; i<unsorted.length; i++) {                int item = unsorted[i];                tree.remove(item);            }            if (debugTime) {                afterRemoveTime = System.currentTimeMillis();                removeTime += afterRemoveTime-beforeRemoveTime;                if (debug>0) System.out.println("Java's Red-Black Tree remove time = "+removeTime/count+" ms");            }            contains = tree.contains(INVALID);            removed = tree.remove(INVALID);            if (contains || removed) {                System.err.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);            //sorted            long addSortedTime = 0L;            long removeSortedTime = 0L;            long beforeAddSortedTime = 0L;            long afterAddSortedTime = 0L;            long beforeRemoveSortedTime = 0L;            long afterRemoveSortedTime = 0L;            if (debugMemory) beforeMemory = DataStructures.getMemoryUse();            if (debugTime) beforeAddSortedTime = System.currentTimeMillis();            for (int i=0; i<sorted.length; i++) {                int item = sorted[i];                tree.add(item);            }            if (debugTime) {                afterAddSortedTime = System.currentTimeMillis();                addSortedTime += afterAddSortedTime-beforeAddSortedTime;                if (debug>0) System.out.println("Java's Red-Black Tree add time = "+addSortedTime+" ms");            }            if (debugMemory) {                afterMemory = DataStructures.getMemoryUse();                memory += afterMemory-beforeMemory;                if (debug>0) System.out.println("Java's Red-Black Tree memory use = "+(memory/(count+1))+" bytes");            }            contains = tree.contains(INVALID);            removed = tree.remove(INVALID);            if (contains || removed) {                System.err.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);            if (debug>1) System.out.println(tree.toString());            lookupTime = 0L;            beforeLookupTime = 0L;            afterLookupTime = 0L;            if (debugTime) beforeLookupTime = System.currentTimeMillis();            for (int item : sorted) {                tree.contains(item);            }            if (debugTime) {                afterLookupTime = System.currentTimeMillis();                lookupTime += afterLookupTime-beforeLookupTime;                if (debug>0) System.out.println("Java's Red-Black Tree lookup time = "+lookupTime/(count+1)+" ms");            }            if (debugTime) beforeRemoveSortedTime = System.currentTimeMillis();            for (int i=sorted.length-1; i>=0; i--) {                int item = sorted[i];                tree.remove(item);            }            if (debugTime) {                afterRemoveSortedTime = System.currentTimeMillis();                removeSortedTime += afterRemoveSortedTime-beforeRemoveSortedTime;                if (debug>0) System.out.println("Java's Red-Black Tree remove time = "+removeSortedTime+" ms");            }            contains = tree.contains(INVALID);            removed = tree.remove(INVALID);            if (contains || removed) {                System.err.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Java's Red-Black Tree invalidity check. contains="+contains+" removed="+removed);            if (testResults[testIndex]==null) testResults[testIndex] = new long[6];            testResults[testIndex][0]+=addTime/count;            testResults[testIndex][1]+=removeTime/count;            testResults[testIndex][2]+=addSortedTime;            testResults[testIndex][3]+=removeSortedTime;            testResults[testIndex][4]+=lookupTime/(count+1);            testResults[testIndex++][5]+=memory/(count+1);            if (debug>1) System.out.println();        }                return true;    }     private static boolean testKdTree() {        {            // K-D TREE            if (debug>1) System.out.println("k-d tree with node.");            java.util.List<KdTree.XYZPoint> points = new ArrayList<KdTree.XYZPoint>();            KdTree.XYZPoint p1 = new KdTree.XYZPoint(2,3);            points.add(p1);            KdTree.XYZPoint p2 = new KdTree.XYZPoint(5,4);            points.add(p2);            KdTree.XYZPoint p3 = new KdTree.XYZPoint(9,6);            points.add(p3);            KdTree.XYZPoint p4 = new KdTree.XYZPoint(4,7);            points.add(p4);            KdTree.XYZPoint p5 = new KdTree.XYZPoint(8,1);            points.add(p5);            KdTree.XYZPoint p6 = new KdTree.XYZPoint(7,2);            points.add(p6);            KdTree<KdTree.XYZPoint> kdTree = new KdTree<KdTree.XYZPoint>(points);            if (debug>1) System.out.println(kdTree.toString());            Collection<KdTree.XYZPoint> result = kdTree.nearestNeighbourSearch(1,p3);            if (debug>1) System.out.println("NNS for "+p3+" result="+result+"\n");            KdTree.XYZPoint search = new KdTree.XYZPoint(1,4);            result = kdTree.nearestNeighbourSearch(4,search);            if (debug>1) System.out.println("NNS for "+search+" result="+result+"\n");            kdTree.remove(p6);            if (debug>1) System.out.println("Removed "+p6+"\n"+kdTree.toString());            kdTree.remove(p4);            if (debug>1) System.out.println("Removed "+p4+"\n"+kdTree.toString());            kdTree.remove(p3);            if (debug>1) System.out.println("Removed "+p3+"\n"+kdTree.toString());            kdTree.remove(p5);            if (debug>1) System.out.println("Removed "+p5+"\n"+kdTree.toString());            kdTree.remove(p1);            if (debug>1) System.out.println("Removed "+p1+"\n"+kdTree.toString());            kdTree.remove(p2);            if (debug>1) System.out.println("Removed "+p2+"\n"+kdTree.toString());            if (debug>1) System.out.println();        }        return true;    } private static boolean testSegmentTree() {        {            //Quadrant Segment tree            if (debug>1) System.out.println("Quadrant Segment Tree.");            java.util.List<SegmentTree.Data.QuadrantData> segments = new ArrayList<SegmentTree.Data.QuadrantData>();            segments.add(new SegmentTree.Data.QuadrantData(0,  1, 0, 0, 0)); //first point in the 0th quadrant            segments.add(new SegmentTree.Data.QuadrantData(1,  0, 1, 0, 0)); //second point in the 1st quadrant            segments.add(new SegmentTree.Data.QuadrantData(2,  0, 0, 1, 0)); //third point in the 2nd quadrant            segments.add(new SegmentTree.Data.QuadrantData(3,  0, 0, 0, 1)); //fourth point in the 3rd quadrant            FlatSegmentTree<SegmentTree.Data.QuadrantData> tree = new FlatSegmentTree<SegmentTree.Data.QuadrantData>(segments);            if (debug>1) System.out.println(tree);            SegmentTree.Data.QuadrantData query = tree.query(0, 3);            if (debug>1) System.out.println("0->3: "+query+"\n");            query = tree.query(2, 3);            if (debug>1) System.out.println("2->3: "+query+"\n");            query = tree.query(0, 2);            if (debug>1) System.out.println("0->2: "+query+"\n");            if (debug>1) System.out.println();        }        {            //Range Maximum Segment tree            if (debug>1) System.out.println("Range Maximum Segment Tree.");            java.util.List<SegmentTree.Data.RangeMaximumData<Integer>> segments = new ArrayList<SegmentTree.Data.RangeMaximumData<Integer>>();            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(0, (Integer)4));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(1, (Integer)2));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(2, (Integer)6));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(3, (Integer)3));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(4, (Integer)1));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(5, (Integer)5));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(6, (Integer)0));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(7, 17, (Integer)7));            segments.add(new SegmentTree.Data.RangeMaximumData<Integer>(21, (Integer)10));            FlatSegmentTree<SegmentTree.Data.RangeMaximumData<Integer>> tree = new FlatSegmentTree<SegmentTree.Data.RangeMaximumData<Integer>>(segments,3);            if (debug>1) System.out.println(tree);            SegmentTree.Data.RangeMaximumData<Integer> query = tree.query(0, 7);            if (debug>1) System.out.println("0->7: "+query+"\n");            query = tree.query(0, 21);            if (debug>1) System.out.println("0->21: "+query+"\n");            query = tree.query(2, 5);            if (debug>1) System.out.println("2->5: "+query+"\n");            query = tree.query(7);            if (debug>1) System.out.println("7: "+query+"\n");            if (debug>1) System.out.println();        }        {            //Range Minimum Segment tree            if (debug>1) System.out.println("Range Minimum Segment Tree.");            java.util.List<SegmentTree.Data.RangeMinimumData<Integer>> segments = new ArrayList<SegmentTree.Data.RangeMinimumData<Integer>>();            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(0, (Integer)4));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(1, (Integer)2));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(2, (Integer)6));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(3, (Integer)3));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(4, (Integer)1));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(5, (Integer)5));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(6, (Integer)0));            segments.add(new SegmentTree.Data.RangeMinimumData<Integer>(17, (Integer)7));            FlatSegmentTree<SegmentTree.Data.RangeMinimumData<Integer>> tree = new FlatSegmentTree<SegmentTree.Data.RangeMinimumData<Integer>>(segments,5);            if (debug>1) System.out.println(tree);            SegmentTree.Data.RangeMinimumData<Integer> query = tree.query(0, 7);            if (debug>1) System.out.println("0->7: "+query+"\n");            query = tree.query(0, 17);            if (debug>1) System.out.println("0->17: "+query+"\n");            query = tree.query(1, 3);            if (debug>1) System.out.println("1->3: "+query+"\n");            query = tree.query(7);            if (debug>1) System.out.println("7: "+query+"\n");            if (debug>1) System.out.println();        }        {            //Range Sum Segment tree            if (debug>1) System.out.println("Range Sum Segment Tree.");            java.util.List<SegmentTree.Data.RangeSumData<Integer>> segments = new ArrayList<SegmentTree.Data.RangeSumData<Integer>>();            segments.add(new SegmentTree.Data.RangeSumData<Integer>(0, (Integer)4));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(1, (Integer)2));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(2, (Integer)6));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(3, (Integer)3));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(4, (Integer)1));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(5, (Integer)5));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(6, (Integer)0));            segments.add(new SegmentTree.Data.RangeSumData<Integer>(17, (Integer)7));            FlatSegmentTree<SegmentTree.Data.RangeSumData<Integer>> tree = new FlatSegmentTree<SegmentTree.Data.RangeSumData<Integer>>(segments,10);            if (debug>1) System.out.println(tree);            SegmentTree.Data.RangeSumData<Integer> query = tree.query(0, 8);            if (debug>1) System.out.println("0->8: "+query+"\n");            query = tree.query(0, 17);            if (debug>1) System.out.println("0->17: "+query+"\n");            query = tree.query(2, 5);            if (debug>1) System.out.println("2->5: "+query+"\n");            query = tree.query(10, 17);            if (debug>1) System.out.println("10->17: "+query+"\n");            query = tree.query(16);            if (debug>1) System.out.println("16: "+query+"\n");            query = tree.query(17);            if (debug>1) System.out.println("17: "+query+"\n");            if (debug>1) System.out.println();        }        {            //Interval Segment tree            if (debug>1) System.out.println("Interval Segment Tree.");            java.util.List<SegmentTree.Data.IntervalData<String>> segments = new ArrayList<SegmentTree.Data.IntervalData<String>>();            segments.add((new SegmentTree.Data.IntervalData<String>(2, 6, "RED")));            segments.add((new SegmentTree.Data.IntervalData<String>(3, 5, "ORANGE")));            segments.add((new SegmentTree.Data.IntervalData<String>(4, 11, "GREEN")));            segments.add((new SegmentTree.Data.IntervalData<String>(5, 10, "DARK_GREEN")));            segments.add((new SegmentTree.Data.IntervalData<String>(8, 12, "BLUE")));            segments.add((new SegmentTree.Data.IntervalData<String>(9, 14, "PURPLE")));            segments.add((new SegmentTree.Data.IntervalData<String>(13, 15, "BLACK")));            DynamicSegmentTree<SegmentTree.Data.IntervalData<String>> tree = new DynamicSegmentTree<SegmentTree.Data.IntervalData<String>>(segments);            if (debug>1) System.out.println(tree);            SegmentTree.Data.IntervalData<String> query = tree.query(2);            if (debug>1) System.out.println("2: "+query);            query = tree.query(4); //Stabbing query            if (debug>1) System.out.println("4: "+query);            query = tree.query(9); //Stabbing query            if (debug>1) System.out.println("9: "+query);            query = tree.query(1, 16); //Range query            if (debug>1) System.out.println("1->16: "+query);            query = tree.query(7, 14); //Range query            if (debug>1) System.out.println("7->14: "+query);            query = tree.query(14, 15); //Range query            if (debug>1) System.out.println("14->15: "+query);            if (debug>1) System.out.println();        }        {            //Lifespan Interval Segment tree            if (debug>1) System.out.println("Lifespan Interval Segment Tree.");            java.util.List<SegmentTree.Data.IntervalData<String>> segments = new ArrayList<SegmentTree.Data.IntervalData<String>>();            segments.add((new SegmentTree.Data.IntervalData<String>(1888, 1971, "Stravinsky")));            segments.add((new SegmentTree.Data.IntervalData<String>(1874, 1951, "Schoenberg")));            segments.add((new SegmentTree.Data.IntervalData<String>(1843, 1907, "Grieg")));            segments.add((new SegmentTree.Data.IntervalData<String>(1779, 1828, "Schubert")));            segments.add((new SegmentTree.Data.IntervalData<String>(1756, 1791, "Mozart")));            segments.add((new SegmentTree.Data.IntervalData<String>(1585, 1672, "Schuetz")));            DynamicSegmentTree<SegmentTree.Data.IntervalData<String>> tree = new DynamicSegmentTree<SegmentTree.Data.IntervalData<String>>(segments,25);            if (debug>1) System.out.println(tree);            SegmentTree.Data.IntervalData<String> query = tree.query(1890);            if (debug>1) System.out.println("1890: "+query);            query = tree.query(1909); //Stabbing query            if (debug>1) System.out.println("1909: "+query);            query = tree.query(1792, 1903); //Range query            if (debug>1) System.out.println("1792->1903: "+query);            query = tree.query(1776, 1799); //Range query            if (debug>1) System.out.println("1776->1799: "+query);            if (debug>1) System.out.println();        }        return true;    } private static boolean testSplayTree() {        {            long count = 0;            long addTime = 0L;            long removeTime = 0L;            long beforeAddTime = 0L;            long afterAddTime = 0L;            long beforeRemoveTime = 0L;            long afterRemoveTime = 0L;            long memory = 0L;            long beforeMemory = 0L;            long afterMemory = 0L;            //Splay Tree            if (debug>1) System.out.println("Splay Tree.");            testNames[testIndex] = "Splay Tree";            count++;            if (debugMemory) beforeMemory = DataStructures.getMemoryUse();            if (debugTime) beforeAddTime = System.currentTimeMillis();            SplayTree<Integer> splay = new SplayTree<Integer>();            for (int i=0; i<unsorted.length; i++) {                int item = unsorted[i];                splay.add(item);                if (validateStructure && !(splay.size()==(i+1))) {                    System.err.println("YIKES!! "+item+" caused a size mismatch.");                    handleError(splay);                    return false;                }                if (validateContents && !splay.contains(item)) {                    System.err.println("YIKES!! "+item+" doesn't exists.");                    handleError(splay);                    return false;                }            }            if (debugTime) {                afterAddTime = System.currentTimeMillis();                addTime += afterAddTime-beforeAddTime;                if (debug>0) System.out.println("Splay Tree add time = "+addTime/count+" ms");            }            if (debugMemory) {                afterMemory = DataStructures.getMemoryUse();                memory += afterMemory-beforeMemory;                if (debug>0) System.out.println("Splay Tree memory use = "+(memory/count)+" bytes");            }            boolean contains = splay.contains(INVALID);            boolean removed = splay.remove(INVALID);            if (contains || removed) {                System.err.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);            if (debug>1) System.out.println(splay.toString());            long lookupTime = 0L;            long beforeLookupTime = 0L;            long afterLookupTime = 0L;            if (debugTime) beforeLookupTime = System.currentTimeMillis();            for (int item : unsorted) {                splay.contains(item);            }            if (debugTime) {                afterLookupTime = System.currentTimeMillis();                lookupTime += afterLookupTime-beforeLookupTime;                if (debug>0) System.out.println("Splay Tree lookup time = "+lookupTime/count+" ms");            }            if (debugTime) beforeRemoveTime = System.currentTimeMillis();            for (int i=0; i<unsorted.length; i++) {                int item = unsorted[i];                splay.remove(item);                if (validateStructure && !(splay.size()==((unsorted.length-1)-i))) {                    System.err.println("YIKES!! "+item+" caused a size mismatch.");                    handleError(splay);                    return false;                }                if (validateContents && splay.contains(item)) {                    System.err.println("YIKES!! "+item+" still exists.");                    handleError(splay);                    return false;                }            }            if (debugTime) {                afterRemoveTime = System.currentTimeMillis();                removeTime += afterRemoveTime-beforeRemoveTime;                if (debug>0) System.out.println("Splay Tree remove time = "+removeTime/count+" ms");            }            contains = splay.contains(INVALID);            removed = splay.remove(INVALID);            if (contains || removed) {                System.err.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);            count++;            if (debugMemory) beforeMemory = DataStructures.getMemoryUse();            if (debugTime) beforeAddTime = System.currentTimeMillis();            for (int i=unsorted.length-1; i>=0; i--) {                int item = unsorted[i];                splay.add(item);                if (validateStructure && !(splay.size()==(unsorted.length-i))) {                    System.err.println("YIKES!! "+item+" caused a size mismatch.");                    handleError(splay);                    return false;                }                if (validateContents && !splay.contains(item)) {                    System.err.println("YIKES!! "+item+" doesn't exists.");                    handleError(splay);                    return false;                }            }            if (debugTime) {                afterAddTime = System.currentTimeMillis();                addTime += afterAddTime-beforeAddTime;                if (debug>0) System.out.println("Splay Tree add time = "+addTime/count+" ms");            }            if (debugMemory) {                afterMemory = DataStructures.getMemoryUse();                memory += afterMemory-beforeMemory;                if (debug>0) System.out.println("Splay Tree memory use = "+(memory/count)+" bytes");            }            contains = splay.contains(INVALID);            removed = splay.remove(INVALID);            if (contains || removed) {                System.err.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);            if (debug>1) System.out.println(splay.toString());            lookupTime = 0L;            beforeLookupTime = 0L;            afterLookupTime = 0L;            if (debugTime) beforeLookupTime = System.currentTimeMillis();            for (int item : unsorted) {                splay.contains(item);            }            if (debugTime) {                afterLookupTime = System.currentTimeMillis();                lookupTime += afterLookupTime-beforeLookupTime;                if (debug>0) System.out.println("Splay Tree lookup time = "+lookupTime/count+" ms");            }            if (debugTime) beforeRemoveTime = System.currentTimeMillis();            for (int i=0; i<unsorted.length; i++) {                int item = unsorted[i];                splay.remove(item);                if (validateStructure && !(splay.size()==((unsorted.length-1)-i))) {                    System.err.println("YIKES!! "+item+" caused a size mismatch.");                    handleError(splay);                    return false;                }                if (validateContents && splay.contains(item)) {                    System.err.println("YIKES!! "+item+" still exists.");                    handleError(splay);                    return false;                }            }            if (debugTime) {                afterRemoveTime = System.currentTimeMillis();                removeTime += afterRemoveTime-beforeRemoveTime;                if (debug>0) System.out.println("Splay Tree remove time = "+removeTime/count+" ms");            }            contains = splay.contains(INVALID);            removed = splay.remove(INVALID);            if (contains || removed) {                System.err.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);            //sorted            long addSortedTime = 0L;            long removeSortedTime = 0L;            long beforeAddSortedTime = 0L;            long afterAddSortedTime = 0L;            long beforeRemoveSortedTime = 0L;            long afterRemoveSortedTime = 0L;            if (debugMemory) beforeMemory = DataStructures.getMemoryUse();            if (debugTime) beforeAddSortedTime = System.currentTimeMillis();            for (int i=0; i<sorted.length; i++) {                int item = sorted[i];                splay.add(item);                if (validateStructure && !(splay.size()==(i+1))) {                    System.err.println("YIKES!! "+item+" caused a size mismatch.");                    handleError(splay);                    return false;                }                if (validateContents && !splay.contains(item)) {                    System.err.println("YIKES!! "+item+" doesn't exist.");                    handleError(splay);                    return false;                }            }            if (debugTime) {                afterAddSortedTime = System.currentTimeMillis();                addSortedTime += afterAddSortedTime-beforeAddSortedTime;                if (debug>0) System.out.println("Splay Tree add time = "+addSortedTime+" ms");            }            if (debugMemory) {                afterMemory = DataStructures.getMemoryUse();                memory += afterMemory-beforeMemory;                if (debug>0) System.out.println("Splay Tree memory use = "+(memory/(count+1))+" bytes");            }            contains = splay.contains(INVALID);            removed = splay.remove(INVALID);            if (contains || removed) {                System.err.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);            if (debug>1) System.out.println(splay.toString());            lookupTime = 0L;            beforeLookupTime = 0L;            afterLookupTime = 0L;            if (debugTime) beforeLookupTime = System.currentTimeMillis();            for (int item : sorted) {                splay.contains(item);            }            if (debugTime) {                afterLookupTime = System.currentTimeMillis();                lookupTime += afterLookupTime-beforeLookupTime;                if (debug>0) System.out.println("Splay Tree lookup time = "+lookupTime/(count+1)+" ms");            }            if (debugTime) beforeRemoveSortedTime = System.currentTimeMillis();            for (int i=sorted.length-1; i>=0; i--) {                int item = sorted[i];                splay.remove(item);                if (validateStructure && !(splay.size()==i)) {                    System.err.println("YIKES!! "+item+" caused a size mismatch.");                    handleError(splay);                    return false;                }                if (validateContents && splay.contains(item)) {                    System.err.println("YIKES!! "+item+" still exists.");                    handleError(splay);                    return false;                }            }            if (debugTime) {                afterRemoveSortedTime = System.currentTimeMillis();                removeSortedTime += afterRemoveSortedTime-beforeRemoveSortedTime;                if (debug>0) System.out.println("Splay Tree remove time = "+removeSortedTime+" ms");            }            contains = splay.contains(INVALID);            removed = splay.remove(INVALID);            if (contains || removed) {                System.err.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);                return false;            } else System.out.println("Splay Tree invalidity check. contains="+contains+" removed="+removed);            if (testResults[testIndex]==null) testResults[testIndex] = new long[6];            testResults[testIndex][0]+=addTime/count;            testResults[testIndex][1]+=removeTime/count;            testResults[testIndex][2]+=addSortedTime;            testResults[testIndex][3]+=removeSortedTime;            testResults[testIndex][4]+=lookupTime/(count+1);            testResults[testIndex++][5]+=memory/(count+1);            if (debug>1) System.out.println();        }                return true;    }private static boolean testSuffixTree() {        {            //Suffix Tree            if (debug>1) System.out.println("Suffix Tree.");            String bookkeeper = "bookkeeper";            SuffixTree<String> tree = new SuffixTree<String>(bookkeeper);            if (debug>1) System.out.println(tree.toString());            if (debug>1) System.out.println(tree.getSuffixes());            boolean exists = tree.doesSubStringExist(bookkeeper);            if (!exists) {                System.err.println("YIKES!! "+bookkeeper+" doesn't exists.");                handleError(tree);                return false;                            }                        String failed = "booker";            exists = tree.doesSubStringExist(failed);            if (exists) {                System.err.println("YIKES!! "+failed+" exists.");                handleError(tree);                return false;                            }            String pass = "kkee";            exists = tree.doesSubStringExist(pass);            if (!exists) {                System.err.println("YIKES!! "+pass+" doesn't exists.");                handleError(tree);                return false;                            }            if (debug>1) System.out.println();        }                return true;    }


读书人网 >编程

热点推荐