diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/utilities/datastructures')
93 files changed, 746 insertions, 295 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java index d0a2cd20..89cbdc1e 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures; 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/arraylike/ArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java index 2c5eeed1..c1b7a280 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/ArrayDBIDsAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java index da831471..b8123e2d 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/ArrayLikeUtil.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java index f03d39e9..2e8496c6 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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 @@ -63,7 +63,7 @@ public final class ArrayLikeUtil { /** * Use a number vector in the array API. */ - public static final NumberVectorAdapter<?> NUMBERVECTORADAPTER = new NumberVectorAdapter<Double>(); + public static final NumberVectorAdapter NUMBERVECTORADAPTER = new NumberVectorAdapter(); /** * Adapter for matrixes, reinterpreted as flat arrays. @@ -152,9 +152,8 @@ public final class ArrayLikeUtil { * @param prototype Prototype value, for type inference * @return Instance */ - @SuppressWarnings("unchecked") - public static <N extends Number> NumberVectorAdapter<N> numberVectorAdapter(NumberVector<N> prototype) { - return (NumberVectorAdapter<N>) NUMBERVECTORADAPTER; + public static NumberVectorAdapter numberVectorAdapter(NumberVector prototype) { + return NUMBERVECTORADAPTER; } /** @@ -236,7 +235,7 @@ public final class ArrayLikeUtil { * @param obj Object to convert * @return primitive double array */ - public static <N extends Number> double[] toPrimitiveDoubleArray(NumberVector<N> obj) { + public static double[] toPrimitiveDoubleArray(NumberVector obj) { return toPrimitiveDoubleArray(obj, numberVectorAdapter(obj)); } @@ -274,7 +273,7 @@ public final class ArrayLikeUtil { * @param obj Object to convert * @return primitive float array */ - public static <N extends Number> float[] toPrimitiveFloatArray(NumberVector<N> obj) { + public static float[] toPrimitiveFloatArray(NumberVector obj) { return toPrimitiveFloatArray(obj, numberVectorAdapter(obj)); } @@ -309,7 +308,7 @@ public final class ArrayLikeUtil { * @param obj Object to convert * @return primitive double array */ - public static <N extends Number> int[] toPrimitiveIntegerArray(NumberVector<N> obj) { + public static int[] toPrimitiveIntegerArray(NumberVector obj) { return toPrimitiveIntegerArray(obj, numberVectorAdapter(obj)); } } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java index 0e31a61a..462cd763 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java @@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/ExtendedArray.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java index 3af14982..aeeeafea 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/FeatureVectorAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java index deb5aafc..d353812a 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java @@ -6,7 +6,7 @@ import de.lmu.ifi.dbs.elki.data.FeatureVector; 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/arraylike/FlatMatrixAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java index 18fbae5d..175a672d 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/FloatArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java index 831dc929..0ef25d78 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/IdentityArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java index dfde46b7..99a3dd80 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/ListArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java index 729dfab8..ab947111 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java @@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/NumberArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java index 5ebbcb0d..d4911f95 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java @@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/NumberListArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java index a2606347..d1ccd560 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java @@ -6,7 +6,7 @@ import java.util.List; 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/arraylike/NumberVectorAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java index 5e674026..b4f1cca1 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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 @@ -31,10 +31,8 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert - * - * @param <N> Number type */ -public class NumberVectorAdapter<N extends Number> implements NumberArrayAdapter<N, NumberVector<N>> { +public class NumberVectorAdapter implements NumberArrayAdapter<Number, NumberVector> { /** * Constructor. * @@ -45,43 +43,43 @@ public class NumberVectorAdapter<N extends Number> implements NumberArrayAdapter } @Override - public int size(NumberVector<N> array) { + public int size(NumberVector array) { return array.getDimensionality(); } @Override @Deprecated - public N get(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public Number get(NumberVector array, int off) throws IndexOutOfBoundsException { return array.getValue(off + 1); } @Override - public double getDouble(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public double getDouble(NumberVector array, int off) throws IndexOutOfBoundsException { return array.doubleValue(off); } @Override - public float getFloat(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public float getFloat(NumberVector array, int off) throws IndexOutOfBoundsException { return array.floatValue(off); } @Override - public int getInteger(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public int getInteger(NumberVector array, int off) throws IndexOutOfBoundsException { return array.intValue(off); } @Override - public short getShort(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public short getShort(NumberVector array, int off) throws IndexOutOfBoundsException { return array.shortValue(off); } @Override - public long getLong(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public long getLong(NumberVector array, int off) throws IndexOutOfBoundsException { return array.longValue(off); } @Override - public byte getByte(NumberVector<N> array, int off) throws IndexOutOfBoundsException { + public byte getByte(NumberVector array, int off) throws IndexOutOfBoundsException { return array.byteValue(off); } } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java index 941c6245..abf88cbc 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/SubsetArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java index 746647cc..f6b54c9e 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java @@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/SubsetNumberArrayAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java index c394f9b7..9e46a94a 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java @@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/TDoubleListAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/TDoubleListAdapter.java index a52ff15e..e72d23d1 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/TDoubleListAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/TDoubleListAdapter.java @@ -6,7 +6,7 @@ import gnu.trove.list.TDoubleList; 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/arraylike/VectorAdapter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java index 0bb979e9..6d28888d 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; 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/arraylike/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/package-info.java index 33058cf4..489d0316 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/package-info.java @@ -5,7 +5,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 diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java new file mode 100644 index 00000000..851fed11 --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java @@ -0,0 +1,218 @@ +package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2014 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * Class to sort a double and an integer DBID array, using a quicksort with a + * best of 5 heuristic. + * + * @author Erich Schubert + */ +public class DoubleIntegerArrayQuickSort { + /** + * Threshold for using insertion sort. + */ + private static final int INSERTION_THRESHOLD = 22; + + /** + * Sort the full array using the given comparator. + * + * @param keys Keys for sorting + * @param values Values for sorting + * @param len Length to sort. + */ + public static void sort(double[] keys, int[] values, int len) { + sort(keys, values, 0, len); + } + + /** + * Sort the array using the given comparator. + * + * @param keys Keys for sorting + * @param values Values for sorting + * @param start First index + * @param end Last index (exclusive) + */ + public static void sort(double[] keys, int[] values, int start, int end) { + quickSort(keys, values, start, end); + } + + /** + * Actual recursive sort function. + * + * @param keys Keys for sorting + * @param vals Values for sorting + * @param start First index + * @param end Last index (exclusive!) + */ + private static void quickSort(double[] keys, int[] vals, final int start, final int end) { + final int len = end - start; + if(len < INSERTION_THRESHOLD) { + insertionSort(keys, vals, start, end); + return; + } + final int last = end - 1; + + // Choose pivots by looking at five candidates. + final int seventh = (len >> 3) + (len >> 6) + 1; + final int m3 = (start + end) >> 1; // middle + final int m2 = m3 - seventh; + final int m1 = m2 - seventh; + final int m4 = m3 + seventh; + final int m5 = m4 + seventh; + + // Mixture of insertion and merge sort: + sort5(keys, vals, m1, m2, m3, m4, m5); + + // Move pivot to the front. + double pivotkey = keys[m3]; + int pivotval = vals[m3]; + keys[m3] = keys[start]; + vals[m3] = vals[start]; + + // The interval to pivotize + int left = start + 1; // Without pivot + int right = last; // inclusive + + // This is the classic QuickSort loop: + while(true) { + // Move duplicates to right partition, i.e. < here, <= below. + while(left <= right && keys[left] < pivotkey) { + left++; + } + while(left <= right && pivotkey <= keys[right]) { + right--; + } + if(right <= left) { + break; + } + swap(keys, vals, left, right); + left++; + right--; + } + // right now points to the last element smaller than the pivot. + // Move pivot back into the appropriate place + keys[start] = keys[right]; + vals[start] = vals[right]; + keys[right] = pivotkey; + vals[right] = pivotval; + + // Recursion when more than one element only: + if(start + 1 < right) { + quickSort(keys, vals, start, right); + } + int rstart = right + 1; + // Avoid recursing on duplicates of the pivot: + while(rstart < last && keys[rstart] <= keys[right]) { + rstart++; + } + // Recurse when _more_ than 1 element only + if(rstart < last) { + quickSort(keys, vals, rstart, end); + } + } + + /** + * An explicit sort, for the five pivot candidates. + * + * Note that this <em>must</em> only be used with + * {@code m1 < m2 < m3 < m4 < m5}. + * + * @param keys Keys + * @param vals Values + * @param m1 Pivot candidate position + * @param m2 Pivot candidate position + * @param m3 Pivot candidate position + * @param m4 Pivot candidate position + * @param m5 Pivot candidate position + */ + private static void sort5(double[] keys, int[] vals, final int m1, final int m2, final int m3, final int m4, final int m5) { + if(keys[m1] > keys[m2]) { + swap(keys, vals, m1, m2); + } + if(keys[m3] > keys[m4]) { + swap(keys, vals, m3, m4); + } + // Merge 1+2 and 3+4 + if(keys[m2] > keys[m4]) { + swap(keys, vals, m2, m4); + } + if(keys[m1] > keys[m3]) { + swap(keys, vals, m1, m3); + } + if(keys[m2] > keys[m3]) { + swap(keys, vals, m2, m3); + } + // Insertion sort m5: + if(keys[m4] > keys[m5]) { + swap(keys, vals, m4, m5); + if(keys[m3] > keys[m4]) { + swap(keys, vals, m3, m4); + if(keys[m2] > keys[m3]) { + swap(keys, vals, m2, m3); + if(keys[m1] > keys[m1]) { + swap(keys, vals, m1, m2); + } + } + } + } + } + + /** + * Sort via insertion sort. + * + * @param keys Keys + * @param vals Values + * @param start Interval start + * @param end Interval end + */ + private static void insertionSort(double[] keys, int[] vals, final int start, final int end) { + // Classic insertion sort. + for(int i = start + 1; i < end; i++) { + for(int j = i; j > start; j--) { + if(keys[j] >= keys[j - 1]) { + break; + } + swap(keys, vals, j, j - 1); + } + } + } + + /** + * Swap two entries. + * + * @param keys Keys + * @param vals Values + * @param j First index + * @param i Second index + */ + private static void swap(double[] keys, int[] vals, int j, int i) { + double td = keys[j]; + keys[j] = keys[i]; + keys[i] = td; + int ti = vals[j]; + vals[j] = vals[i]; + vals[i] = ti; + } +} diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java index eaf47738..b91d79b1 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; 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 @@ -34,15 +34,17 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * Vladimir Yaroslavskiy * </p> * - * and differs mostly in that we sort different kinds of arrays, - * and allow the use of comparators - useful in particular when - * the array references external objects. + * and differs mostly in that we sort different kinds of arrays, and allow the + * use of comparators - useful in particular when the array references external + * objects. * * @author Erich Schubert * * @apiviz.uses IntegerComparator */ -@Reference(authors = "Vladimir Yaroslavskiy", title = "Dual-Pivot Quicksort", booktitle = "http://iaroslavski.narod.ru/quicksort/", url = "http://iaroslavski.narod.ru/quicksort/") +@Reference(authors = "Vladimir Yaroslavskiy", // +title = "Dual-Pivot Quicksort", booktitle = "http://iaroslavski.narod.ru/quicksort/", // +url = "http://iaroslavski.narod.ru/quicksort/") public class IntegerArrayQuickSort { /** * Threshold for using insertion sort. Value taken from Javas QuickSort, @@ -69,7 +71,7 @@ public class IntegerArrayQuickSort { * @param comp Comparator */ public static void sort(int[] data, int start, int end, IntegerComparator comp) { - quickSort(data, start, end - 1, comp); + quickSort(data, start, end, comp); } /** @@ -77,24 +79,14 @@ public class IntegerArrayQuickSort { * * @param data Data to sort * @param start First index - * @param end Last index (inclusive!) + * @param end Last index (exclusive!) * @param comp Comparator */ private static void quickSort(int[] data, final int start, final int end, IntegerComparator comp) { final int len = end - start; - if (len < INSERTION_THRESHOLD) { - // Classic insertion sort. - for (int i = start + 1; i <= end; i++) { - for (int j = i; j > start; j--) { - if (comp.compare(data[j], data[j - 1]) < 0) { - final int tmp = data[j - 1]; - data[j - 1] = data[j]; - data[j] = tmp; - } else { - break; - } - } - } + final int last = end - 1; + if(len < INSERTION_THRESHOLD) { + insertionSort(data, start, end, comp); return; } @@ -108,51 +100,7 @@ public class IntegerArrayQuickSort { // Explicit (and optimal) sorting network for 5 elements // See Knuth for details. - if (comp.compare(data[m1], data[m2]) > 0) { - final int tmp = data[m2]; - data[m2] = data[m1]; - data[m1] = tmp; - } - if (comp.compare(data[m1], data[m3]) > 0) { - final int tmp = data[m3]; - data[m3] = data[m1]; - data[m1] = tmp; - } - if (comp.compare(data[m2], data[m3]) > 0) { - final int tmp = data[m3]; - data[m3] = data[m2]; - data[m2] = tmp; - } - if (comp.compare(data[m4], data[m5]) > 0) { - final int tmp = data[m5]; - data[m5] = data[m4]; - data[m4] = tmp; - } - if (comp.compare(data[m1], data[m4]) > 0) { - final int tmp = data[m4]; - data[m4] = data[m1]; - data[m1] = tmp; - } - if (comp.compare(data[m3], data[m4]) > 0) { - final int tmp = data[m4]; - data[m4] = data[m3]; - data[m3] = tmp; - } - if (comp.compare(data[m2], data[m5]) > 0) { - final int tmp = data[m5]; - data[m5] = data[m2]; - data[m2] = tmp; - } - if (comp.compare(data[m2], data[m3]) > 0) { - final int tmp = data[m3]; - data[m3] = data[m2]; - data[m2] = tmp; - } - if (comp.compare(data[m4], data[m5]) > 0) { - final int tmp = data[m5]; - data[m5] = data[m4]; - data[m4] = tmp; - } + sort5(data, m1, m2, m3, m4, m5, comp); // Choose the 2 and 4th as pivots, as we want to get three parts // Copy to variables v1 and v3, replace them with the start and end @@ -160,35 +108,38 @@ public class IntegerArrayQuickSort { final int lpivot = data[m2]; final int rpivot = data[m4]; data[m2] = data[start]; - data[m4] = data[end]; + data[m4] = data[last]; // A tie is when the two chosen pivots are the same final boolean tied = comp.compare(lpivot, rpivot) == 0; // Insertion points for pivot areas. int left = start + 1; - int right = end - 1; + int right = last - 1; // Note: we merged the ties and no ties cases. // This likely is marginally slower, but not at a macro level // And you never know with hotspot. - for (int k = left; k <= right; k++) { + for(int k = left; k <= right; k++) { final int tmp = data[k]; final int c = comp.compare(tmp, lpivot); - if (c == 0) { + if(c == 0) { continue; - } else if (c < 0) { + } + else if(c < 0) { // Traditional quicksort data[k] = data[left]; data[left] = tmp; left++; - } else if (tied || comp.compare(tmp, rpivot) > 0) { + } + else if(tied || comp.compare(tmp, rpivot) > 0) { // Now look at the right. First skip correct entries there, too - while (true) { + while(true) { final int tmp2 = data[right]; - if (comp.compare(tmp2, rpivot) > 0 && k < right) { + if(comp.compare(tmp2, rpivot) > 0 && k < right) { right--; - } else { + } + else { break; } } @@ -197,7 +148,7 @@ public class IntegerArrayQuickSort { data[right] = tmp; right--; // Test the element we just inserted: left or center? - if (comp.compare(data[k], lpivot) < 0) { + if(comp.compare(data[k], lpivot) < 0) { final int tmp2 = data[k]; data[k] = data[left]; data[left] = tmp2; @@ -209,17 +160,105 @@ public class IntegerArrayQuickSort { // Remember: we must not modify v1 and v3 above. data[start] = data[left - 1]; data[left - 1] = lpivot; - data[end] = data[right + 1]; + data[last] = data[right + 1]; data[right + 1] = rpivot; // v1 and v3 are now safe to modify again. Perform recursion: - quickSort(data, start, left - 2, comp); + quickSort(data, start, left - 1, comp); // Handle the middle part - if necessary: - if (!tied) { + if(!tied) { // TODO: the original publication had a special tie handling here. // It shouldn't affect correctness, but probably improves situations // with a lot of tied elements. - quickSort(data, left, right, comp); + quickSort(data, left, right + 1, comp); } quickSort(data, right + 2, end, comp); } + + /** + * Insertion sort, for short arrays. + * + * @param data Data to sort + * @param start First index + * @param end Last index (exclusive!) + * @param comp Comparator + */ + private static void insertionSort(int[] data, final int start, final int end, IntegerComparator comp) { + // Classic insertion sort. + for(int i = start + 1; i < end; i++) { + final int cur = data[i]; + int j = i - 1; + while(j >= start) { + final int pre = data[j]; + if(comp.compare(cur, pre) >= 0) { + break; + } + data[j + 1] = pre; + --j; + } + data[j + 1] = cur; + } + } + + /** + * An explicit sort, for the five pivot candidates. + * + * Note that this <em>must</em> only be used with + * {@code m1 < m2 < m3 < m4 < m5}. + * + * @param data Data + * @param m1 Pivot candidate position + * @param m2 Pivot candidate position + * @param m3 Pivot candidate position + * @param m4 Pivot candidate position + * @param m5 Pivot candidate position + * @param comp Comparator + */ + private static void sort5(int[] data, int m1, int m2, int m3, int m4, int m5, IntegerComparator comp) { + // Sort m1, m2 + if(comp.compare(data[m1], data[m2]) > 0) { + final int tmp = data[m2]; + data[m2] = data[m1]; + data[m1] = tmp; + } + // Sort m3, m4 + if(comp.compare(data[m3], data[m4]) > 0) { + final int tmp = data[m4]; + data[m4] = data[m3]; + data[m3] = tmp; + } + // Merge 1+2 and 3+4 + if(comp.compare(data[m2], data[m4]) > 0) { + final int tmp = data[m4]; + data[m4] = data[m2]; + data[m2] = tmp; + } + if(comp.compare(data[m1], data[m3]) > 0) { + final int tmp = data[m3]; + data[m3] = data[m1]; + data[m1] = tmp; + } + if(comp.compare(data[m2], data[m3]) > 0) { + final int tmp = data[m3]; + data[m3] = data[m2]; + data[m2] = tmp; + } + // Insertion sort m5: + final int tmp = data[m5]; + if(comp.compare(data[m4], tmp) > 0) { + data[m5] = data[m4]; + data[m4] = tmp; + if(comp.compare(data[m3], tmp) > 0) { + data[m4] = data[m3]; + data[m3] = tmp; + if(comp.compare(data[m2], tmp) > 0) { + data[m3] = data[m2]; + data[m2] = tmp; + if(comp.compare(data[m1], tmp) > 0) { + data[m2] = data[m1]; + data[m1] = tmp; + } + } + } + } + } } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java index 0ccd47db..47b0ccfd 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; 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 @@ -24,13 +24,13 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; */ /** - * Interface for comparing two integers. + * Interface for comparing two Integer. * * @author Erich Schubert */ public interface IntegerComparator { /** - * Compare two integers. + * Compare two Integer. * * @param x First int * @param y Second int diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/package-info.java index 874a6d44..921de083 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/package-info.java @@ -5,7 +5,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 diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java new file mode 100644 index 00000000..ab149c39 --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java @@ -0,0 +1,132 @@ +package de.lmu.ifi.dbs.elki.utilities.datastructures.hash; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2014 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import gnu.trove.impl.hash.TObjectHash; + +import java.util.Arrays; + +/** + * This hash set is designed to keep only a unique copy of each object (hence + * its name). For this, the method {@link #addOrGet} is the key API, which + * allows retrieving existing values. + * + * @author Erich Schubert + * + * @param <E> + */ +public class Unique<E> extends TObjectHash<E> { + /** + * Serial version number. + */ + static final long serialVersionUID = 1L; + + /** + * Constructor with default size and load factors. + */ + public Unique() { + super(); + } + + /** + * Constructor with desired initial size. + * + * @param initialCapacity desired initial size. + */ + public Unique(int initialCapacity) { + super(initialCapacity); + } + + /** + * Constructor with desired initial size, and with the specified load factor. + * + * @param initialCapacity desired initial size + * @param loadFactor load factor + */ + public Unique(int initialCapacity, float loadFactor) { + super(initialCapacity, loadFactor); + } + + /** + * Inserts a value into the set, unless it is already present. + * + * This function returns the existing value, if present. + * + * @param obj Object to insert or retrieve + * @return Existing object if already present, or the new object. + */ + @SuppressWarnings("unchecked") + public E addOrGet(E obj) { + int index = insertKey(obj); + + if(index < 0) { + obj = (E) _set[-index - 1]; + } + + postInsertHook(consumeFreeSlot); + return obj; + } + + /** + * Removes an existing object from the set. + * + * @param obj Object to remove + * @return true if the object was found and removed. + */ + public boolean remove(Object obj) { + int index = index(obj); + if(index >= 0) { + removeAt(index); + return true; + } + return false; + } + + @Override + public void clear() { + super.clear(); + + Arrays.fill(_set, 0, _set.length, FREE); + } + + @SuppressWarnings("unchecked") + @Override + protected void rehash(int newCapacity) { + final int oldCapacity = _set.length, oldSize = size(); + // Replace data storage: + Object oldSet[] = _set; + _set = new Object[newCapacity]; + Arrays.fill(_set, FREE); + + // Reinsert all objects: + for(int i = oldCapacity; i-- > 0;) { + E o = (E) oldSet[i]; + if(o != FREE && o != REMOVED) { + insertKey(o); + } + } + // Last check: size before and after should be the same + reportPotentialConcurrentMod(size(), oldSize); + } +} diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/package-info.java new file mode 100644 index 00000000..03746389 --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/package-info.java @@ -0,0 +1,30 @@ +/** + * Hashing based data structures. + * + * Note: much of the desired functionality is provided by the very good GNU Trove library. + * + * This package will only contain slight extensions or variations, not provided by Trove already. + */ +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2014 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.lmu.ifi.dbs.elki.utilities.datastructures.hash;
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java index d6937b4d..1433bd4e 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -233,8 +233,9 @@ public class ComparableMaxHeap<K extends Comparable<? super K>> implements Objec } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @SuppressWarnings("unchecked") diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java index 167c6bc7..76104644 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -233,8 +233,9 @@ public class ComparableMinHeap<K extends Comparable<? super K>> implements Objec } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @SuppressWarnings("unchecked") diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java index e5887c73..516177fd 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -242,8 +242,9 @@ public class ComparatorMaxHeap<K> implements ObjectHeap<K> { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @SuppressWarnings("unchecked") diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java index 215a78b6..11518553 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -242,8 +242,9 @@ public class ComparatorMinHeap<K> implements ObjectHeap<K> { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @SuppressWarnings("unchecked") diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java index c82f2a4a..d32a07a9 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/DoubleIntegerHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java index 5d8d31f7..6899e327 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/DoubleIntegerMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java index e903c23d..1a9f8dbe 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -249,8 +249,9 @@ public class DoubleIntegerMaxHeap implements DoubleIntegerHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java index 0e4e2204..11237841 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -249,8 +249,9 @@ public class DoubleIntegerMinHeap implements DoubleIntegerHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java index b93adafa..1b02d3c7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/DoubleLongMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java index b7508a61..7caa7cd4 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -249,8 +249,9 @@ public class DoubleLongMaxHeap implements DoubleLongHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java index 9fbe0300..1e1a5956 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -249,8 +249,9 @@ public class DoubleLongMinHeap implements DoubleLongHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java index 2c74b34b..78743779 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -226,8 +226,9 @@ public class DoubleMaxHeap implements DoubleHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java index afc50296..1c6954b7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -226,8 +226,9 @@ public class DoubleMinHeap implements DoubleHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java index 7323cd8d..ad964c08 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/DoubleObjectMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java index 939c4d7e..3999c218 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -251,8 +251,9 @@ public class DoubleObjectMaxHeap<V> implements DoubleObjectHeap<V> { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java index 01b8e58d..18713455 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -251,8 +251,9 @@ public class DoubleObjectMinHeap<V> implements DoubleObjectHeap<V> { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java index 82453885..d940cd21 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import de.lmu.ifi.dbs.elki.utilities.pairs.PairInterface; /** * Object for a priority queue with integer priority. Can be used in the @@ -35,7 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.PairInterface; * * @param <O> Stored object type. */ -public class DoublePriorityObject<O> implements PairInterface<Double, O>, Comparable<DoublePriorityObject<?>> { +public class DoublePriorityObject<O> implements Comparable<DoublePriorityObject<?>> { /** * Priority. */ @@ -79,17 +78,6 @@ public class DoublePriorityObject<O> implements PairInterface<Double, O>, Compar } @Override - @Deprecated - public Double getFirst() { - return Double.valueOf(priority); - } - - @Override - public O getSecond() { - return object; - } - - @Override public int hashCode() { return ((object == null) ? 0 : object.hashCode()); } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java index 2c278110..dad6f1d7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -442,8 +442,9 @@ public class Heap<E> { } @Override - public void advance() { + public UnorderedIter advance() { pos++; + return this; } /** diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java index 77e5f3e5..80d8882b 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/IntegerMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java index 4f3b1495..b3fc51ca 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -226,8 +226,9 @@ public class IntegerMaxHeap implements IntegerHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java index b02e04db..6632d005 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -226,8 +226,9 @@ public class IntegerMinHeap implements IntegerHeap { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java index e4f577af..f4c7043f 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/IntegerObjectMaxHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java index 036a9520..5a4bd70f 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -251,8 +251,9 @@ public class IntegerObjectMaxHeap<V> implements IntegerObjectHeap<V> { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java index cc816a0e..b6fc9a74 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -251,8 +251,9 @@ public class IntegerObjectMinHeap<V> implements IntegerObjectHeap<V> { } @Override - public void advance() { + public de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter advance() { pos++; + return this; } @Override diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java index f007b9fc..11f8c7d5 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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 @@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import de.lmu.ifi.dbs.elki.utilities.pairs.PairInterface; /** * Object for a priority queue with integer priority. Can be used in the @@ -35,7 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.PairInterface; * * @param <O> Stored object type. */ -public class IntegerPriorityObject<O> implements PairInterface<Integer, O>, Comparable<IntegerPriorityObject<?>> { +public class IntegerPriorityObject<O> implements Comparable<IntegerPriorityObject<?>> { /** * Priority. */ @@ -79,17 +78,6 @@ public class IntegerPriorityObject<O> implements PairInterface<Integer, O>, Comp } @Override - @Deprecated - public Integer getFirst() { - return Integer.valueOf(priority); - } - - @Override - public O getSecond() { - return object; - } - - @Override public int hashCode() { return ((object == null) ? 0 : object.hashCode()); } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java index 2b03740e..3aa1dd7f 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + 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/heap/TiedTopBoundedHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java index 32f57999..14e708c5 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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/heap/TiedTopBoundedUpdatableHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java index 3905030f..4c8c6ddb 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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/heap/TopBoundedHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java index 9adda9f3..29880fd7 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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/heap/TopBoundedUpdatableHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java index 4a591d4c..d80f209f 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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/heap/UpdatableHeap.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java index a585d94d..f3c42e90 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; 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/heap/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/package-info.java index 83be37f4..7062650e 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/package-info.java @@ -5,7 +5,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 diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java index c77a9329..f8bd27a8 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; 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 @@ -353,8 +353,9 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { } @Override - public void advance() { + public Iter<O> advance() { pos++; + return this; } @SuppressWarnings("unchecked") @@ -380,8 +381,9 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { } @Override - public void advance() { + public Iter<O> advance() { pos++; + return this; } @SuppressWarnings("unchecked") @@ -425,7 +427,7 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { } @Override - public void advance() { + public Iter<O> advance() { if (subiter == null) { // Not yet descended assert (childiter.valid()); subiter = iterDescendants(childiter.get()); @@ -433,11 +435,12 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { subiter.advance(); } if (subiter.valid()) { - return; + return this; } // Proceed to next child. childiter.advance(); subiter = null; + return this; } @Override @@ -485,7 +488,7 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { } @Override - public void advance() { + public Iter<O> advance() { if (subiter == null) { // Not yet descended assert (parentiter.valid()); subiter = iterAncestors(parentiter.get()); @@ -493,11 +496,12 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { subiter.advance(); } if (subiter.valid()) { - return; + return this; } // Proceed to next child. parentiter.advance(); subiter = null; + return this; } @Override @@ -544,12 +548,13 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { } @Override - public void advance() { + public Iter<O> advance() { if (iter.hasNext()) { cur = iter.next(); } else { cur = null; } + return this; } @Override @@ -568,7 +573,7 @@ public class HashMapHierarchy<O> implements ModifiableHierarchy<O> { } @Override - public void advance() { + public Iter<Object> advance() { throw new UnsupportedOperationException("Empty iterators must not be advanced."); } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java index fec9c7b4..7d751dc1 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; 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 @@ -113,5 +113,8 @@ public interface Hierarchy<O> { * @return Current object */ O get(); + + @Override + Iter<O> advance(); } } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java index 06001d6b..0b1b0534 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; 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/hierarchy/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/package-info.java index 965b15fc..4ea54ef2 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/package-info.java @@ -5,7 +5,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 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 diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java index 7b2a96ad..fe3c54f0 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; 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 @@ -31,29 +31,36 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * @apiviz.excludeSubtypes */ public interface ArrayIter extends Iter { - /** - * Get current iterator offset. - * - * @return Iterator position - */ - public int getOffset(); + @Override + ArrayIter advance(); /** * Moves the iterator forward or backward by the given offset. * * @param count offset to move forward or backwards + * @return Iterator */ - public void advance(int count); + ArrayIter advance(int count); /** * Moves the iterator backward to the previous entry. + * + * @return Iterator */ - public void retract(); + ArrayIter retract(); /** * Moves the iterator to the given position * * @param off Seek offset + * @return Iterator + */ + ArrayIter seek(int off); + + /** + * Get current iterator offset. + * + * @return Iterator position */ - public void seek(int off); + int getOffset(); } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java index 820217ec..68cd0448 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; 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 @@ -60,12 +60,13 @@ public class ArrayListIter<O> implements ArrayIter { @Override public boolean valid() { - return pos < data.size(); + return pos < data.size() && pos >= 0; } @Override - public void advance() { + public ArrayIter advance() { pos++; + return this; } @Override @@ -74,18 +75,21 @@ public class ArrayListIter<O> implements ArrayIter { } @Override - public void advance(int count) { + public ArrayIter advance(int count) { pos += count; + return this; } @Override - public void retract() { + public ArrayIter retract() { pos--; + return this; } @Override - public void seek(int off) { + public ArrayIter seek(int off) { pos = off; + return this; } /** diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java index 3d111f14..b6ff34ad 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; 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 @@ -62,10 +62,12 @@ public interface Iter { * * @return a <code>boolean</code> value, whether the position is valid. */ - public boolean valid(); + boolean valid(); /** * Moves the iterator forward to the next entry. + * + * @return The iterator itself. */ - public void advance(); + Iter advance(); } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java index 14e5443d..76be972f 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; 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/iterator/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/package-info.java index d241fcc4..17dc7e44 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/package-info.java @@ -19,7 +19,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 diff --git a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/package-info.java b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/package-info.java index a0d894a9..db324217 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/datastructures/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/datastructures/package-info.java @@ -5,7 +5,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 |