From fc44445264646f83b5f40b0d2f2459ec8997d1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev> Date: Wed, 21 Apr 2021 17:22:31 +0200 Subject: [PATCH] ADD: an incremental version is now done by building the hull on hull objects --- src/mhtree/LeafNode.java | 7 +----- src/mhtree/Node.java | 46 +++++++++++++++++----------------------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java index 1415df4..ff267de 100644 --- a/src/mhtree/LeafNode.java +++ b/src/mhtree/LeafNode.java @@ -39,13 +39,8 @@ public class LeafNode extends Node implements Serializable { * @throws BucketStorageException addition of object into bucket exception */ protected void addObject(LocalAbstractObject object) throws BucketStorageException { - addObject(object, null); - } - - protected void addObject(LocalAbstractObject object, PrecomputedDistances distances) throws BucketStorageException { bucket.addObject(object); - - addObjectIntoHull(object, distances); + addObjectIntoHull(object); } /** diff --git a/src/mhtree/Node.java b/src/mhtree/Node.java index 600e80f..95cf35c 100644 --- a/src/mhtree/Node.java +++ b/src/mhtree/Node.java @@ -6,7 +6,6 @@ import messif.buckets.BucketStorageException; import messif.objects.LocalAbstractObject; import java.io.Serializable; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -94,18 +93,18 @@ public abstract class Node implements Serializable { } protected void addObjectIntoHull(LocalAbstractObject object) { - addObjectIntoHull(object, null); - } - - protected void addObjectIntoHull(LocalAbstractObject object, PrecomputedDistances distances) { - if (isCovered(object, distances)) return; - - if (insertType == InsertType.INCREMENTAL) { - hull.addHullObject(object); - return; + if (isCovered(object)) return; + + switch (insertType) { + case GREEDY: + insertGreedy(object); + break; + case INCREMENTAL: + insertIncremental(object); + break; + default: + throw new IllegalStateException("Unexpected value: " + insertType); } - - rebuildHull(object, distances); } protected abstract void addObject(LocalAbstractObject object) throws BucketStorageException; @@ -118,24 +117,19 @@ public abstract class Node implements Serializable { protected abstract void gatherLeafNodes(List<LeafNode> leafNodes); - private void rebuildHull(LocalAbstractObject object, PrecomputedDistances distances) { - List<LocalAbstractObject> objects = new ArrayList<>(getObjects()); - objects.add(object); - - if (distances == null) { - hull = new HullOptimizedRepresentationV3(objects); - } else { - hull = new HullOptimizedRepresentationV3(distances.getSubset(objects)); - } + private void insertGreedy(LocalAbstractObject object) { + List<LocalAbstractObject> objectsFromLeafNodes = getObjects(); + objectsFromLeafNodes.add(object); + hull = new HullOptimizedRepresentationV3(objectsFromLeafNodes); hull.build(); } - private boolean isCovered(LocalAbstractObject object, PrecomputedDistances distances) { - if (distances == null) { - return hull.isExternalCovered(object); - } + private void insertIncremental(LocalAbstractObject object) { + List<LocalAbstractObject> hullObjects = hull.getHull(); + hullObjects.add(object); - return hull.isExternalCovered(object, distances); + hull = new HullOptimizedRepresentationV3(hullObjects); + hull.build(); } } -- GitLab