From 202673272c6cf735a619657769c44c128b939d67 Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Mon, 19 Jun 2017 12:41:50 +0200 Subject: [PATCH] InversionCounter um die ausgabe der inversionspaare erweitert --- .../Algorithms/InversionCounter.java | 80 +++++++++++++++++-- .../LeastMedianOfSquaresEstimator.java | 27 ++++--- src/main/java/View/MainFrame.java | 1 + src/main/java/View/PlotDialog.java | 1 - .../LeastMedianOfSquaresEstimatorTest.java | 14 ++-- 5 files changed, 97 insertions(+), 26 deletions(-) diff --git a/src/main/java/Presenter/Algorithms/InversionCounter.java b/src/main/java/Presenter/Algorithms/InversionCounter.java index a10f9e1..2e648c3 100644 --- a/src/main/java/Presenter/Algorithms/InversionCounter.java +++ b/src/main/java/Presenter/Algorithms/InversionCounter.java @@ -5,29 +5,74 @@ import java.util.HashMap; import java.util.List; /** - * Created by armin on 18.06.17. + * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. + * + * @Author: Armin Wolf + * @Email: a_wolf28@uni-muenster.de + * @Date: 18.06.2017. */ public class InversionCounter { - public static int run(List a, List b){ + private HashMap dictionaryTO; + private HashMap dictionaryBACK; + private ArrayList substituted; + private ArrayList inversions; + + private class Pair{ + private Integer p1; + private Integer p2; + public Pair(Integer p1, Integer p2) { + this.p1 = p1; + this.p2 = p2; + } + + public Integer getP1() { + return p1; + } + + public void setP1(Integer p1) { + this.p1 = p1; + } + + public Integer getP2() { + return p2; + } + + public void setP2(Integer p2) { + this.p2 = p2; + } + } + + public int run(List a, List b){ + + dictionaryTO = new HashMap<>(); + dictionaryBACK = new HashMap<>(); + substituted = new ArrayList<>(); + inversions = new ArrayList<>(); - 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 int countInversions(List a, int start, int end, List aux) { if (start >= end) { return 0; } @@ -60,6 +105,11 @@ public class InversionCounter { if (aux.get(left) < aux.get(right)) { a.set(index++, aux.get(left++)); } else { + + for (int i=left; i<=mid;i++){ + // System.out.println(aux.get(i)+" -- "+ aux.get(right)); + inversions.add(new Pair(aux.get(i), aux.get(right))); + } a.set(index++, aux.get(right++)); invCount += mid - left + 1; // number of inversions for aux[right] } @@ -71,4 +121,18 @@ public class InversionCounter { return invCount; } + + public void getInversionPairs(){ + ArrayList result = new ArrayList<>(); + + for (int i=0;i " + p.getP2()); + //} + + } + } diff --git a/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java b/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java index 91b06a6..e5cb46f 100644 --- a/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java +++ b/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java @@ -22,6 +22,7 @@ public class LeastMedianOfSquaresEstimator extends Observable implements Algorit private LinkedList set = new LinkedList<>(); private LinkedList intersections = new LinkedList<>(); + private InversionCounter invCounter = new InversionCounter(); private int n; private double quantileError; private int kPlus; @@ -150,7 +151,7 @@ public class LeastMedianOfSquaresEstimator extends Observable implements Algorit ArrayList umin = new ArrayList<>(); ArrayList umax = new ArrayList<>(); - HashMap secondaryIndex = new HashMap<>(); + HashMap secondaryIndex = new HashMap<>(); ArrayList listA = new ArrayList<>(); ArrayList listB = new ArrayList<>(); @@ -158,20 +159,20 @@ public class LeastMedianOfSquaresEstimator extends Observable implements Algorit int counter = 0; for (Line p : set) { - 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+"")); + //vertauscht das Point standardmäßig die x lexikografische Ordnung betrachtet + umin.add(new Point(slab.getLower() * p.getM() + p.getB(),p.getM(), counter+"")); + umax.add(new Point(slab.getUpper() * p.getM() + p.getB(),p.getM() ,counter+"")); counter++; } + for (int i=0; i points) { diff --git a/src/test/java/Presenter/Algorithms/LeastMedianOfSquaresEstimatorTest.java b/src/test/java/Presenter/Algorithms/LeastMedianOfSquaresEstimatorTest.java index 0bd5cd0..cb37d38 100644 --- a/src/test/java/Presenter/Algorithms/LeastMedianOfSquaresEstimatorTest.java +++ b/src/test/java/Presenter/Algorithms/LeastMedianOfSquaresEstimatorTest.java @@ -49,10 +49,10 @@ public class LeastMedianOfSquaresEstimatorTest { @Test public void mergeSort() throws Exception { - 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}; +// double[] umin = {6,3,4,1,2,5}; +// double[] umax = {3,5,2,6,1,4}; + double[] umin = {1,2,3,4}; + double[] umax = {2,3,4,1}; ArrayList a = new ArrayList<>(); ArrayList b = new ArrayList<>(); @@ -63,9 +63,9 @@ public class LeastMedianOfSquaresEstimatorTest { for (double d :umax) { b.add((int) d); } - - int ret = InversionCounter.run(a, b); - assertEquals(9d, ret, 0.001); + InversionCounter invCounter = new InversionCounter(); + int ret = invCounter.run(a, b); + assertEquals(3d, ret, 0.001); }