diff --git a/src/main/java/Model/Point.java b/src/main/java/Model/Point.java index f762caa..8ad0ef1 100644 --- a/src/main/java/Model/Point.java +++ b/src/main/java/Model/Point.java @@ -11,12 +11,19 @@ public class Point implements Comparable { private Double x; private Double y; + private String id; public Point(Double x, Double y) { this.x = x; this.y = y; } + public Point(Double x, Double y, String id) { + this.x = x; + this.y = y; + this.id = id; + } + public Double getX() { return x; } @@ -47,4 +54,12 @@ public class Point implements Comparable { return 1; } } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } } diff --git a/src/main/java/Presenter/Algorithms/InversionCounter.java b/src/main/java/Presenter/Algorithms/InversionCounter.java index 6ad2474..a10f9e1 100644 --- a/src/main/java/Presenter/Algorithms/InversionCounter.java +++ b/src/main/java/Presenter/Algorithms/InversionCounter.java @@ -1,5 +1,7 @@ package Presenter.Algorithms; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -7,6 +9,27 @@ import java.util.List; */ public class InversionCounter { + public static int run(List a, List b){ + + HashMap indexesA = new HashMap<>(); + ArrayList substituted = new ArrayList<>(); + ArrayList temp = new ArrayList<>(); + + temp.addAll(a); + + for (int i=0;i a, int start, int end, List aux) { + public static int countInversions(List a, int start, int end, List aux) { if (start >= end) { return 0; } int invCount = 0; int mid = start + (end - start) / 2; - int invCountLeft = run(a, start, mid, aux); // divide and conquer - int invCountRight = run(a, mid + 1, end, aux); // divide and conquer + int invCountLeft = countInversions(a, start, mid, aux); // divide and conquer + int invCountRight = countInversions(a, mid + 1, end, aux); // divide and conquer invCount += (invCountLeft + invCountRight); for (int i = start; i <= end; i++) { aux.set(i, a.get(i)); diff --git a/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java b/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java index f389da6..91b06a6 100644 --- a/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java +++ b/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java @@ -146,16 +146,43 @@ public class LeastMedianOfSquaresEstimator extends Observable implements Algorit int numberOfInversions = 0; - ArrayList umin = new ArrayList<>(); - ArrayList umax = new ArrayList<>(); ArrayList randomIntersection = new ArrayList<>(); + ArrayList umin = new ArrayList<>(); + ArrayList umax = new ArrayList<>(); + HashMap secondaryIndex = new HashMap<>(); + ArrayList listA = new ArrayList<>(); + ArrayList listB = new ArrayList<>(); + + + + int counter = 0; for (Line p : set) { - umin.add((slab.getLower() * p.getM()) + p.getB()); - umax.add((slab.getUpper() * p.getM()) + p.getB()); + umin.add(new Point(p.getM(), slab.getLower() * p.getM() + p.getB(),counter+"")); + umax.add(new Point(p.getM(), slab.getUpper() * p.getM() + p.getB(),counter+"")); + counter++; } - numberOfInversions = InversionCounter.run(umin, 0, umin.size() - 1, umax); + Collections.sort(umin); + Collections.sort(umax); + + for (int i=0; i a = new ArrayList<>(); - ArrayList b = new ArrayList<>(); - + double[] umin = {6,3,4,1,2,5}; + double[] umax = {3,5,2,6,1,4}; +// double[] umin = {3,1,4,2}; +// double[] umax = {1,4,2,3}; + ArrayList a = new ArrayList<>(); + ArrayList b = new ArrayList<>(); for (double d :umin) { - a.add(d); + a.add((int) d); } for (double d :umax) { - b.add(d); + b.add((int) d); } -/ - int ret = InversionCounter.run(a,0,a.size()-1,b); - - assertEquals(2, ret); + int ret = InversionCounter.run(a, b); + assertEquals(9d, ret, 0.001); }