diff options
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures')
93 files changed, 574 insertions, 7 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java index 070876ca..1d852688 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java @@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList; * Charles Antony Richard Hoare * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.uses ArrayModifiableDBIDs * @apiviz.uses List diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java index 5a2a1056..fd8624de 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Adapter for array-like things. For example, arrays and lists. * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Item type * @param <A> Array object type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java index a6881e43..640d5c70 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID; * Use a DBID array in a generic array-like context. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.uses ArrayDBIDs */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java index dc4f3b1c..386243f6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; * reorganizing the objects into a real array. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.landmark * @apiviz.composedOf ArrayAdapter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java index 2f827bb3..ca225b41 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java @@ -27,12 +27,28 @@ import java.util.Arrays; /** * Array of double values. * - * TODO: add remove, sort etc. - * * @author Erich Schubert + * @since 0.7.0 */ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { /** + * Maximum array size permitted by Java. + * + * This is JVM dependent, but 2^31 - 5 is the usual OpenJDK8 value. + */ + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 5; + + /** + * Last value where we can grow by 50%. + */ + private static final int LAST_GROW_SIZE = 0x5555_5551; + + // Assert that these values match. + static { + assert (LAST_GROW_SIZE + (LAST_GROW_SIZE >>> 1) + 1 <= MAX_ARRAY_SIZE); + } + + /** * (Reused) store for numerical attributes. */ public double[] data; @@ -55,6 +71,12 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { * @param initialsize Initial size. */ public DoubleArray(int initialsize) { + if(initialsize < 0) { + initialsize = 11; + } + else if(initialsize > MAX_ARRAY_SIZE) { + initialsize = MAX_ARRAY_SIZE; + } this.data = new double[initialsize]; this.size = 0; } @@ -80,18 +102,31 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { } /** - * Add a numeric attribute value. + * Append a value. * * @param attribute Attribute value. */ public void add(double attribute) { if(data.length == size) { - data = Arrays.copyOf(data, size << 1); + grow(); } data[size++] = attribute; } /** + * Grow the current array. + * + * @throws OutOfMemoryError + */ + private void grow() throws OutOfMemoryError { + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + data = Arrays.copyOf(data, newsize); + } + + /** * Get the value at this position. * * @param pos Position @@ -144,8 +179,12 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { */ public void insert(int pos, double val) { if(size == data.length) { - double[] oldd = data; - data = new double[size << 1]; + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + final double[] oldd = data; + data = new double[newsize]; System.arraycopy(oldd, 0, data, 0, pos); System.arraycopy(oldd, pos, data, pos + 1, size - pos); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java index 719aea8a..221335e9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Use a double array as, well, double array in the ArrayAdapter API. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.exclude */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java index 4dfd1ecb..047e5f06 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Class to extend an array with a single element virtually. * * @author Erich Schubert + * @since 0.5.0 * * @param <T> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java index 59df30ad..338358f1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.FeatureVector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.4.0 * * @param <F> Feature type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java index 487f2d84..1c33872d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; * Use a matrix as array, by flattening it into a sequence. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.exclude */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java index fd82178a..6f4bfa78 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Use a double array as, well, double array in the ArrayAdapter API. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.exclude */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java index 3766492d..d81d68f3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Item type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java new file mode 100644 index 00000000..15393114 --- /dev/null +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java @@ -0,0 +1,264 @@ +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) 2015 + 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 java.util.Arrays; + +/** + * Array of int values. + * + * @author Erich Schubert + * @since 0.7.0 + */ +public class IntegerArray implements NumberArrayAdapter<Integer, IntegerArray> { + /** + * Maximum array size permitted by Java. + * + * This is JVM dependent, but 2^31 - 5 is the usual OpenJDK8 value. + */ + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 5; + + /** + * Last value where we can grow by 50%. + */ + private static final int LAST_GROW_SIZE = 0x5555_5551; + + // Assert that these values match. + static { + assert (LAST_GROW_SIZE + (LAST_GROW_SIZE >>> 1) + 1 <= MAX_ARRAY_SIZE); + } + + /** + * (Reused) store for numerical attributes. + */ + public int[] data; + + /** + * Number of numerical attributes. + */ + public int size; + + /** + * Constructor. + */ + public IntegerArray() { + this(11); + } + + /** + * Constructor. + * + * @param initialsize Initial size. + */ + public IntegerArray(int initialsize) { + if(initialsize < 0) { + initialsize = 11; + } + else if(initialsize > MAX_ARRAY_SIZE) { + initialsize = MAX_ARRAY_SIZE; + } + this.data = new int[initialsize]; + this.size = 0; + } + + /** + * Constructor from an existing array. + * + * The new array will be allocated as small as possible, so modifications will + * cause a resize! + * + * @param existing Existing array + */ + public IntegerArray(IntegerArray existing) { + this.data = Arrays.copyOf(existing.data, existing.size); + this.size = existing.size; + } + + /** + * Reset the numeric attribute counter. + */ + public void clear() { + size = 0; + } + + /** + * Append a value. + * + * @param attribute Attribute value. + */ + public void add(int attribute) { + if(data.length == size) { + grow(); + } + data[size++] = attribute; + } + + /** + * Grow the current array. + * + * @throws OutOfMemoryError + */ + private void grow() throws OutOfMemoryError { + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + data = Arrays.copyOf(data, newsize); + } + + /** + * Get the value at this position. + * + * @param pos Position + * @return Value + */ + public int get(int pos) { + if(pos < 0 || pos >= size) { + throw new ArrayIndexOutOfBoundsException(pos); + } + return data[pos]; + } + + /** + * Set the value at this position. + * + * @param pos Position + * @param value Value + */ + public void set(int pos, int value) { + if(pos < 0 || pos > size) { + throw new ArrayIndexOutOfBoundsException(pos); + } + if(pos == size) { + add(value); + return; + } + data[pos] = value; + } + + /** + * Remove a range from the array. + * + * @param start Start + * @param len Length + */ + public void remove(int start, int len) { + final int end = start + len; + if(end > size) { + throw new ArrayIndexOutOfBoundsException(size); + } + System.arraycopy(data, end, data, start, size - end); + size -= len; + } + + /** + * Insert a value at the given position. + * + * @param pos Insert position + * @param val Value to insert + */ + public void insert(int pos, int val) { + if(size == data.length) { + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + final int[] oldd = data; + data = new int[newsize]; + System.arraycopy(oldd, 0, data, 0, pos); + System.arraycopy(oldd, pos, data, pos + 1, size - pos); + } + else { + System.arraycopy(data, pos, data, pos + 1, size - pos); + } + data[pos] = val; + size++; + } + + /** + * Get the size of the array. + * + * @return Size + */ + public int size() { + return size; + } + + /** + * Sort the contents. + */ + public void sort() { + Arrays.sort(data, 0, size); + } + + // NumberArrayAdapter: + + @Override + public int size(IntegerArray array) { + return array.size; + } + + @Override + public Integer get(IntegerArray array, int off) throws IndexOutOfBoundsException { + return array.data[off]; + } + + @Override + public double getDouble(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (double) array.data[off]; + } + + @Override + public float getFloat(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (float) array.data[off]; + } + + @Override + public int getInteger(IntegerArray array, int off) throws IndexOutOfBoundsException { + return array.data[off]; + } + + @Override + public short getShort(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (short) array.data[off]; + } + + @Override + public long getLong(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (long) array.data[off]; + } + + @Override + public byte getByte(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (byte) array.data[off]; + } + + /** + * Return a copy of the contents as array. + * + * @return Copy of the contents. + */ + public int[] toArray() { + return Arrays.copyOf(data, size); + } +}
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java index 242caa48..7e92978a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java @@ -30,6 +30,7 @@ import java.util.List; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Data object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java index 532862cc..c0777fbd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Adapter for arrays of numbers, to avoid boxing. * * @author Erich Schubert + * @since 0.5.0 * * @param <N> Number type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java index e712ac9a..4c0fec71 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java @@ -32,6 +32,7 @@ import java.util.List; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.5.0 * * @param <T> Data object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java index 8192f3b8..bb66c33e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.5.0 */ public class NumberVectorAdapter implements NumberArrayAdapter<Number, NumberVector> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java index 3d8e8c3e..cd905948 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Single-item subset adapter * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Entry type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java index 077a0e8d..1299d178 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Subset array adapter (allows reordering and projection). * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Entry type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java index 8a1a064b..7d1d1890 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Subset array adapter (allows reordering and projection) * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Entry type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java index 26da061a..48705ece 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.5.0 */ public class VectorAdapter implements NumberArrayAdapter<Double, Vector> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java index a48a175b..47bc1281 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; * best of 5 heuristic. * * @author Erich Schubert + * @since 0.5.5 */ public class DoubleIntegerArrayQuickSort { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java index ece63ea6..c1b64097 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * objects. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.uses IntegerComparator */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java index 11f79e45..2cb8e755 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; * Interface for comparing two Integer. * * @author Erich Schubert + * @since 0.4.0 */ public interface IntegerComparator { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java index 5e991156..294d7220 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java @@ -33,6 +33,7 @@ import java.util.Arrays; * allows retrieving existing values. * * @author Erich Schubert + * @since 0.7.0 * * @param <E> */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java index 968251d6..54f6821b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java index 8cd4ef0a..4a1cc8a9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java index f3cc6d56..78c00bc5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java index 12a15d46..466c3e7b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java index ba853032..76927fc3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap for double values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java index 2adc17fd..96ca70c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for double keys and int values. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java index b0e62c30..ae40da63 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java index d94b63c1..bfc21240 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java index 551c4131..f4011bcd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for double keys and long values. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java index b0f0af50..88a7ee7c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java index fcc3526d..7fc2a5dd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java index d1a6ed0f..92a1ba9c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java index f4c53260..3c8eda0b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java index 77a380bf..a822cb64 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for double keys and V values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java index 96b03a67..6e8e5c02 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java index c04fb7cb..b87e6281 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java index 342c064d..cd8ef1cb 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; * the priority. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Stored object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java index 5f6b27c2..fe8aaa53 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java @@ -36,6 +36,7 @@ import java.util.Comparator; * O(n log n). This is implemented via a simple validTo counter. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Element type. Should be {@link java.lang.Comparable} or a * {@link java.util.Comparator} needs to be given. diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java index c7e897d8..4a1a7ca7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap for int values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java index a4e54147..54af796b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java index 0e56e2e1..17ece116 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java index defacf83..08eecf02 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for int keys and V values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java index ce3d7809..7f62c277 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java index c087d7d2..b46dadaa 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java index c809e113..4e7c21c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; * the priority. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Stored object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java index 8b00dbbe..20ee0547 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap for K values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java index f9628f1a..ea1a356a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java @@ -33,6 +33,7 @@ import java.util.List; * elements. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java index 88036e00..83261ef5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; * elements. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java index 9fd95a1b..b884c58a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java @@ -30,6 +30,7 @@ import java.util.Comparator; * {@code k} Elements only. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Element type. Should be {@link Comparable} or a {@link Comparator} * needs to be given. diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java index 80b5768a..ff0dd369 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java @@ -30,6 +30,7 @@ import java.util.Comparator; * {@code k} Elements only. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Element type. Should be {@link Comparable} or a {@link Comparator} * needs to be given. diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java index be089725..4af70021 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java @@ -32,6 +32,7 @@ import java.util.Comparator; * A heap as used in OPTICS that allows updating entries. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java index 67876387..aac710e8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * Filtered iterator. * * @author Erich Schubert + * @since 0.7.0 * * @apiviz.composedOf Hierarchy.Iter * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java index 59ec00f0..2f478866 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java @@ -29,6 +29,7 @@ import java.util.HashMap; * Centralized hierarchy implementation, using a HashMap of Lists. * * @author Erich Schubert + * @since 0.6.0 * * @param <O> Object type (arbitrary!) */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java index 6c932451..04d1cd5b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * object, i.e. {@code hierarchy.iterChildren(object);}. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has Iter * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java index 3496e41c..4b3af7c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * Modifiable Hierarchy. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java index 52ecc0e3..93aa71b7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * Filtered iterator. * * @author Erich Schubert + * @since 0.7.0 * * @apiviz.composedOf Hierarchy * @apiviz.composedOf Hierarchy.Iter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java index 9c2f3a60..d07e078b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * into the histogram. * * @author Erich Schubert + * @since 0.5.5 * * @param <T> Data type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java index 709f7ceb..743bb179 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * left and right. * * @author Erich Schubert + * @since 0.5.5 * * @param <T> Data type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java index b0728ddb..a1a81174 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * adapted for multiple use cases. * * @author Erich Schubert + * @since 0.5.5 */ public abstract class AbstractStaticHistogram implements Histogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java index 7ea5b623..4e0081d5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java @@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * primitive in Java. * * @author Erich Schubert + * @since 0.5.5 */ public final class DoubleArrayStaticHistogram extends AbstractObjStaticHistogram<double[]> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java index 2f2e6a02..88a70ad9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class DoubleDynamicHistogram extends DoubleStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java index 9a26c264..84f06713 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing double values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java index 63ba3e21..6d4dc22b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class DoubleStaticHistogram extends AbstractStaticHistogram implements DoubleHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java index 261c7a7f..007ef6e6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class FloatDynamicHistogram extends FloatStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java index 81edb88c..18e992b8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing float values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java index 6e4d78f5..079e8e0e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class FloatStaticHistogram extends AbstractStaticHistogram implements FloatHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java index a8fd60c0..1632fc45 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayIter; * to be shared for primitive types, too! * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java index d3d278ee..8e838b4e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java @@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * primitive in Java. * * @author Erich Schubert + * @since 0.5.5 */ public final class IntArrayStaticHistogram extends AbstractObjStaticHistogram<int[]> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java index 4d3a5045..13ab7b35 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class IntDynamicHistogram extends IntStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java index d448c852..ce2b39aa 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing int values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java index bd367837..3cbe83bc 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class IntStaticHistogram extends AbstractStaticHistogram implements IntHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java index 907fa7ca..a922935a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * primitive in Java. * * @author Erich Schubert + * @since 0.5.5 */ public final class LongArrayStaticHistogram extends AbstractObjStaticHistogram<long[]> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java index 78385a30..cc5b5dc6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class LongDynamicHistogram extends LongStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java index ec1ba994..893e0f47 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing long values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java index ae37dbcc..9cc201ae 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class LongStaticHistogram extends AbstractStaticHistogram implements LongHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java index f3d054cd..5adcc9bd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.MeanVariance; * left and right. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf MeanVariance */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java index e1d75b76..2ce2926f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Basic interface for object based histograms (static and flexible). * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java index 8fd1ffbd..d0a932a1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class ShortDynamicHistogram extends ShortStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java index 706d43e8..14e1ec55 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing short values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java index 4c49f595..ebfc6365 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class ShortStaticHistogram extends AbstractStaticHistogram implements ShortHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java index d3deb054..3f26f417 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * Array iterators can also go backwards and seek. * * @author Erich Schubert + * @since 0.2 * * @apiviz.excludeSubtypes */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java index 175ccfb2..441eaee4 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java @@ -32,6 +32,7 @@ import java.util.List; * access and seeking (i.e. ArrayLists, but not Linked Lists!) * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.excludeSubtypes * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java index d362ff37..23cf34fe 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java @@ -52,6 +52,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * </pre> * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.landmark * @apiviz.excludeSubtypes diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java index b7b69cc7..557870de 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java @@ -40,6 +40,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * </pre> * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.excludeSubtypes */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java index bbba1c8e..55b0b561 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java @@ -27,9 +27,10 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; /** - * Union-find implementations in ELKI + * Union-find implementations in ELKI, for DBID objects. * * @author Erich Schubert + * @since 0.7.0 */ public interface UnionFind { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java index ee403a66..38ec2559 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.StaticDBIDs; * Union-find algorithm factory, to choose the best implementation. * * @author Erich Schubert + * @since 0.7.0 */ public class UnionFindUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java new file mode 100644 index 00000000..b7fc8478 --- /dev/null +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java @@ -0,0 +1,174 @@ +package de.lmu.ifi.dbs.elki.utilities.datastructures.unionfind; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2016 + 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 java.util.Arrays; + +import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; +import gnu.trove.list.TIntList; +import gnu.trove.list.array.TIntArrayList; + +/** + * Union-find algorithm for primitive integers, with optimizations. + * + * This is the weighted quick union approach, weighted by count and using + * path-halving for optimization. + * + * Reference: + * <p> + * R. Sedgewick<br /> + * 1.3 Union-Find Algorithms<br /> + * Algorithms in C, Parts 1-4 + * </p> + * + * @author Erich Schubert + * @since 0.7.0 + */ +@Reference(authors = "R. Sedgewick", // +title = "1.3 Union-Find Algorithms", // +booktitle = "Algorithms in C, Parts 1-4") +public class WeightedQuickUnionInteger { + /** + * Number of used indexes. + */ + private int used; + + /** + * Parent element + */ + private int[] parent; + + /** + * Weight, for optimization. + */ + private int[] weight; + + /** + * Initial size. + */ + private static final int INITIAL_SIZE = 51; + + /** + * Constructor. + */ + public WeightedQuickUnionInteger() { + weight = new int[INITIAL_SIZE]; + parent = new int[INITIAL_SIZE]; + } + + /** + * Occupy the next unused index. + * + * @param weight Initial weight. + * @return Next unused index. + */ + public int nextIndex(int weight) { + if(used == parent.length) { + int nsize = used + (used >> 1); + this.weight = Arrays.copyOf(this.weight, nsize); + this.parent = Arrays.copyOf(this.parent, nsize); + } + this.weight[used] = weight; + this.parent[used] = used; + return used++; + } + + /** + * Find the parent of an object. + * + * @param cur Current entry + * @return Parent entry + */ + public int find(int cur) { + assert (cur >= 0 && cur < parent.length); + int p = parent[cur], tmp; + while(cur != p) { + tmp = p; + p = parent[cur] = parent[p]; // Perform simple path compression. + cur = tmp; + } + return cur; + } + + /** + * Join the components of elements p and q. + * + * @param first First element + * @param second Second element + * @return Component id. + */ + public int union(int first, int second) { + int firstComponent = find(first), secondComponent = find(second); + if(firstComponent == secondComponent) { + return firstComponent; + } + final int w1 = weight[firstComponent], w2 = weight[secondComponent]; + if(w1 > w2) { + parent[secondComponent] = firstComponent; + weight[firstComponent] += w2; + return firstComponent; + } + else { + parent[firstComponent] = secondComponent; + weight[secondComponent] += w1; + return secondComponent; + } + } + + /** + * Test if two components are connected. + * + * @param first First element + * @param second Second element + * @return {@code true} if they are in the same component. + */ + public boolean isConnected(int first, int second) { + return find(first) == find(second); + } + + /** + * Collect all component root elements. + * + * @return Root elements + */ + public TIntList getRoots() { + TIntList roots = new TIntArrayList(); + for(int i = 0; i < used; i++) { + // roots or one element in component + if(parent[i] == i) { + roots.add(i); + } + } + return roots; + } + + /** + * Number of allocated indexes. + * + * @return Index number. + */ + public int size() { + return used; + } +} diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java index 60c719e2..5440e2b5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java @@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * * @author Evgeniy Faerman * @author Erich Schubert + * @since 0.7.0 */ @Reference(authors = "R. Sedgewick", // title = "1.3 Union-Find Algorithms", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java index 0e4dd24b..9ed8d618 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java @@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * * @author Evgeniy Faerman * @author Erich Schubert + * @since 0.7.0 */ @Reference(authors = "R. Sedgewick", // title = "1.3 Union-Find Algorithms", // |