Skip to content
Snippets Groups Projects
Verified Commit fc444452 authored by David Procházka's avatar David Procházka
Browse files

ADD: an incremental version is now done by building the hull on hull objects

parent a7fed238
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
/**
......
......@@ -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();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment