diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram')
25 files changed, 86 insertions, 65 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java index 165c2c8b..d3d3f006 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -74,12 +74,12 @@ public abstract class AbstractObjDynamicHistogram<T> extends AbstractObjStaticHi @SuppressWarnings("unchecked") void materialize() { // already materialized? - if (cachefill <= 0) { + if(cachefill <= 0) { return; } // Compute minimum and maximum double min = Double.MAX_VALUE, max = Double.MIN_VALUE; - for (int i = 0; i < cachefill; i++) { + for(int i = 0; i < cachefill; i++) { min = Math.min(min, cacheposs[i]); max = Math.max(max, cacheposs[i]); } @@ -93,14 +93,14 @@ public abstract class AbstractObjDynamicHistogram<T> extends AbstractObjStaticHi this.binsize = (max - min) / this.destsize; // initialize array this.data = new Object[this.destsize << 1]; - for (int i = 0; i < this.destsize; i++) { + for(int i = 0; i < this.destsize; i++) { this.data[i] = makeObject(); } size = destsize; // re-insert data we have final int end = cachefill; cachefill = -1; // So reinsert works! - for (int i = 0; i < end; i++) { + for(int i = 0; i < end; i++) { putData(cacheposs[i], (T) cachevals[i]); } // delete cache, signal that we're initialized @@ -125,21 +125,24 @@ public abstract class AbstractObjDynamicHistogram<T> extends AbstractObjStaticHi @Override public void putData(double coord, T value) { // Store in cache - if (cachefill >= 0) { - if (cachefill < cacheposs.length) { + if(cachefill >= 0) { + if(cachefill < cacheposs.length) { cacheposs[cachefill] = coord; cachevals[cachefill] = cloneForCache(value); ++cachefill; return; } } - if (coord == Double.NEGATIVE_INFINITY) { + if(coord == Double.NEGATIVE_INFINITY) { aggregateSpecial(value, 0); - } else if (coord == Double.POSITIVE_INFINITY) { + } + else if(coord == Double.POSITIVE_INFINITY) { aggregateSpecial(value, 1); - } else if (Double.isNaN(coord)) { + } + else if(Double.isNaN(coord)) { aggregateSpecial(value, 2); - } else { + } + else { // super class will handle histogram resizing / shifting T exist = get(coord); data[getBinNr(coord)] = aggregate(exist, value); @@ -167,17 +170,19 @@ public abstract class AbstractObjDynamicHistogram<T> extends AbstractObjStaticHi private void testResample(double coord) { final int bin = getBinNr(coord); final int sizereq, off; - if (bin < 0) { + if(bin < 0) { sizereq = size - bin; off = -bin; - } else if (bin >= data.length) { + } + else if(bin >= data.length) { sizereq = bin + 1; off = 0; - } else { + } + else { // Within the designated size - nothing to do. return; } - if (sizereq < data.length) { + if(sizereq < data.length) { // Accomodate by shifting. Let super do the job in {@link #get} return; } @@ -186,31 +191,33 @@ public abstract class AbstractObjDynamicHistogram<T> extends AbstractObjStaticHi assert (levels > 0) : "No resampling required?!?"; final int step = 1 << levels; + // We want to map [i ... i+step[ -> (i+off)/step + // Fix point: i = (i+off)/step; i*(step-1)=off; i=off/(step-1) final int fixpoint = off / (step - 1); { // Start positions for in-place bottom-up downsampling. - int oup = fixpoint; + int oup = (fixpoint >= 0) ? fixpoint : 0; int inp = (oup << levels) - off; assert (-step < inp && inp <= oup && oup < inp + step) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); - for (; inp < size; inp += step, oup++) { + for(; inp < size; inp += step, oup++) { assert (oup < inp + step && oup < data.length); data[oup] = downsample(data, Math.max(0, inp), Math.min(size, inp + step), step); } // Clean upwards - for (; oup < data.length; oup++) { + for(; oup < data.length; oup++) { data[oup] = null; } } - if (off >= step) { + if(off >= step) { // Start positions for in-place downsampling top-down: - int oup = fixpoint - 1; + int oup = (fixpoint - 1 < size) ? fixpoint - 1 : size - 1; int inp = (oup << levels) - off; assert (oup > inp) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); - for (; inp > -step; inp -= step, oup--) { + for(; inp > -step; inp -= step, oup--) { assert (oup >= inp && oup >= 0); data[oup] = downsample(data, Math.max(0, inp), Math.min(size, inp + step), step); } - for (; oup >= 0; oup--) { + for(; oup >= 0; oup--) { data[oup] = makeObject(); } } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java index 4a1649af..cbfb29c0 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java index 3363e61e..798e1d80 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -193,8 +193,9 @@ public abstract class AbstractStaticHistogram implements Histogram { } @Override - public void advance() { + public Iter advance() { bin++; + return this; } @Override @@ -203,18 +204,21 @@ public abstract class AbstractStaticHistogram implements Histogram { } @Override - public void advance(int count) { + public Iter advance(int count) { bin += count; + return this; } @Override - public void retract() { + public Iter retract() { bin--; + return this; } @Override - public void seek(int off) { + public Iter seek(int off) { bin = off; + return this; } } } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java index 86b53d03..192abceb 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures -Copyright (C) 2013 +Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java index 84f97dfe..1c0f5f33 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -162,10 +162,12 @@ public class DoubleDynamicHistogram extends DoubleStaticHistogram { assert (levels > 0) : "No resampling required?!? sizereq=" + sizereq + " destsize=" + destsize + " array=" + data.length; final int step = 1 << levels; + // We want to map [i ... i+step[ -> (i+off)/step + // Fix point: i = (i+off)/step; i*(step-1)=off; i=off/(step-1) final int fixpoint = off / (step - 1); { // Start positions for in-place bottom-up downsampling. - int oup = fixpoint; + int oup = (fixpoint >= 0) ? fixpoint : 0; int inp = (oup << levels) - off; assert (-step < inp && inp <= oup && oup < inp + step) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp < size; inp += step, oup++) { @@ -177,9 +179,9 @@ public class DoubleDynamicHistogram extends DoubleStaticHistogram { data[oup] = 0; } } - if (off > 0) { + if(off >= step) { // Start positions for in-place downsampling top-down: - int oup = fixpoint - 1; + int oup = (fixpoint - 1 < size) ? fixpoint - 1 : size - 1; int inp = (oup << levels) - off; assert (oup > inp) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp > -step; inp -= step, oup--) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java index e4a24c95..1d8ae54d 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java index 5a634cf2..7475e00c 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java index 9829eaf8..1d816e2d 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -162,10 +162,12 @@ public class FloatDynamicHistogram extends FloatStaticHistogram { assert (levels > 0) : "No resampling required?!? sizereq=" + sizereq + " destsize=" + destsize + " array=" + data.length; final int step = 1 << levels; + // We want to map [i ... i+step[ -> (i+off)/step + // Fix point: i = (i+off)/step; i*(step-1)=off; i=off/(step-1) final int fixpoint = off / (step - 1); { // Start positions for in-place bottom-up downsampling. - int oup = fixpoint; + int oup = (fixpoint >= 0) ? fixpoint : 0; int inp = (oup << levels) - off; assert (-step < inp && inp <= oup && oup < inp + step) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp < size; inp += step, oup++) { @@ -177,9 +179,9 @@ public class FloatDynamicHistogram extends FloatStaticHistogram { data[oup] = 0; } } - if (off > 0) { + if(off >= step) { // Start positions for in-place downsampling top-down: - int oup = fixpoint - 1; + int oup = (fixpoint - 1 < size) ? fixpoint - 1 : size - 1; int inp = (oup << levels) - off; assert (oup > inp) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp > -step; inp -= step, oup--) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java index 7f034152..a7cb7153 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java index 063bd80a..c42c0bec 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java index 8c8d9a87..7e94d522 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java index ff9a82aa..784fe86b 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures -Copyright (C) 2013 +Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java index b131af7d..f241b036 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -162,10 +162,12 @@ public class IntDynamicHistogram extends IntStaticHistogram { assert (levels > 0) : "No resampling required?!? sizereq=" + sizereq + " destsize=" + destsize + " array=" + data.length; final int step = 1 << levels; + // We want to map [i ... i+step[ -> (i+off)/step + // Fix point: i = (i+off)/step; i*(step-1)=off; i=off/(step-1) final int fixpoint = off / (step - 1); { // Start positions for in-place bottom-up downsampling. - int oup = fixpoint; + int oup = (fixpoint >= 0) ? fixpoint : 0; int inp = (oup << levels) - off; assert (-step < inp && inp <= oup && oup < inp + step) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp < size; inp += step, oup++) { @@ -177,9 +179,9 @@ public class IntDynamicHistogram extends IntStaticHistogram { data[oup] = 0; } } - if (off > 0) { + if (off >= step) { // Start positions for in-place downsampling top-down: - int oup = fixpoint - 1; + int oup = (fixpoint - 1 < size) ? fixpoint - 1 : size - 1; int inp = (oup << levels) - off; assert (oup > inp) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp > -step; inp -= step, oup--) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java index 9bfae100..94cf6b34 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java index 84b55cd1..96f57399 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java index e3580792..8447d3ba 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java index 93c4eee5..d1f8d8fd 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -162,10 +162,12 @@ public class LongDynamicHistogram extends LongStaticHistogram { assert (levels > 0) : "No resampling required?!? sizereq=" + sizereq + " destsize=" + destsize + " array=" + data.length; final int step = 1 << levels; + // We want to map [i ... i+step[ -> (i+off)/step + // Fix point: i = (i+off)/step; i*(step-1)=off; i=off/(step-1) final int fixpoint = off / (step - 1); { // Start positions for in-place bottom-up downsampling. - int oup = fixpoint; + int oup = (fixpoint >= 0) ? fixpoint : 0; int inp = (oup << levels) - off; assert (-step < inp && inp <= oup && oup < inp + step) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp < size; inp += step, oup++) { @@ -177,9 +179,9 @@ public class LongDynamicHistogram extends LongStaticHistogram { data[oup] = 0; } } - if (off > 0) { + if(off >= step) { // Start positions for in-place downsampling top-down: - int oup = fixpoint - 1; + int oup = (fixpoint - 1 < size) ? fixpoint - 1 : size - 1; int inp = (oup << levels) - off; assert (oup > inp) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp > -step; inp -= step, oup--) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java index 16577c38..c55f7705 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java index b270908d..6d8b8cf7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java index 0f1ea0a3..7b9c648c 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java index bad4eec1..9546efee 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java index a49810ee..4a6a3de7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -162,10 +162,12 @@ public class ShortDynamicHistogram extends ShortStaticHistogram { assert (levels > 0) : "No resampling required?!? sizereq=" + sizereq + " destsize=" + destsize + " array=" + data.length; final int step = 1 << levels; + // We want to map [i ... i+step[ -> (i+off)/step + // Fix point: i = (i+off)/step; i*(step-1)=off; i=off/(step-1) final int fixpoint = off / (step - 1); { // Start positions for in-place bottom-up downsampling. - int oup = fixpoint; + int oup = (fixpoint >= 0) ? fixpoint : 0; int inp = (oup << levels) - off; assert (-step < inp && inp <= oup && oup < inp + step) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp < size; inp += step, oup++) { @@ -177,9 +179,9 @@ public class ShortDynamicHistogram extends ShortStaticHistogram { data[oup] = 0; } } - if (off > 0) { + if(off >= step) { // Start positions for in-place downsampling top-down: - int oup = fixpoint - 1; + int oup = (fixpoint - 1 < size) ? fixpoint - 1 : size - 1; int inp = (oup << levels) - off; assert (oup > inp) : (inp + " -> " + oup + " s=" + step + " o=" + off + " l=" + levels); for (; inp > -step; inp -= step, oup--) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java index 0b83bc4c..4e65e3a7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java index 2819d966..375e5945 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/package-info.java index cee1836b..702bd0a5 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/package-info.java @@ -13,7 +13,7 @@ This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team |