diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2014-11-20 18:39:54 +0100 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2014-11-20 18:39:54 +0100 |
| commit | 0229c16365e5d849857b30ef6bd6634f89913a4b (patch) | |
| tree | bb5ed390167373a7aa34d4b45eccbc7de146cac1 /src/de/fhswf/in/inf/java1 | |
| parent | 242dc8ea6486a9d0b664f0a0dfe39596846a0456 (diff) | |
| download | Java1-0229c16365e5d849857b30ef6bd6634f89913a4b.tar.gz Java1-0229c16365e5d849857b30ef6bd6634f89913a4b.zip | |
Assignment No.8 implemented non recursive FaB
Diffstat (limited to 'src/de/fhswf/in/inf/java1')
| -rw-r--r-- | src/de/fhswf/in/inf/java1/aufgabe8/FloydAndBentley.java | 218 | ||||
| -rw-r--r-- | src/de/fhswf/in/inf/java1/aufgabe8/LottoZiehungMain.java (renamed from src/de/fhswf/in/inf/java1/aufgabe8/LottoZiehung.java) | 107 |
2 files changed, 181 insertions, 144 deletions
diff --git a/src/de/fhswf/in/inf/java1/aufgabe8/FloydAndBentley.java b/src/de/fhswf/in/inf/java1/aufgabe8/FloydAndBentley.java index 8ec8464..54dd863 100644 --- a/src/de/fhswf/in/inf/java1/aufgabe8/FloydAndBentley.java +++ b/src/de/fhswf/in/inf/java1/aufgabe8/FloydAndBentley.java @@ -1,88 +1,130 @@ -/**
- *
- */
-package de.fhswf.in.inf.java1.aufgabe8;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-/**
- * TODO Add comment here
- *
- * @author $Author: $
- * @version $Revision: $, $Date: $ UTC
- */
-public final class FloydAndBentley
-{
-
- private static Random rnd = new Random();
-
- /**
- * TODO Add constructor comment here
- *
- */
- private FloydAndBentley()
- {
- // TODO Auto-generated constructor stub
- }
-
- /**
- * A function which chooses a sample from a List with the Floyd and Bentley
- * algorithm.
- *
- *
- * @param <T>
- * Type of the Lists.
- * @param s
- * The set from which the sample is chosen.
- * @param k
- * The number of items to be chosen.
- * @return Return the ordered sample.
- */
- public static <T> List<T> sample(List<T> s, int k)
- {
- if (s.isEmpty())
- {
- throw new IllegalArgumentException("Set is empty");
- }
- if (k > s.size())
- {
- throw new IllegalArgumentException("k is bigger than the Set");
- }
-
- List<T> ret = new ArrayList<>(k);
- sampleRec(s, k, ret);
-
- return ret;
-
- }
-
- /**
- * TODO Add method comment here
- *
- * @param <T>
- * @param s
- * @param k
- * @param ret
- */
- private static <T> void sampleRec(List<T> s, int k, List<T> ret)
- {
- if (ret.size() >= k)
- {
- return;
- }
-
- T val = s.get(rnd.nextInt(s.size() - ((k - ret.size()) - 1)));
-
- if (ret.contains(val))
- {
- val = s.get(s.size() - ((k - ret.size()) - 1));
- }
-
- ret.add(val);
-
- sampleRec(s, k, ret);
-
- }
-}
+/** + * + */ +package de.fhswf.in.inf.java1.aufgabe8; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * Utility class for the Floyd and Bentley algorithm. + * + * @author $Author: $ + * @version $Revision: $, $Date: $ UTC + */ +public final class FloydAndBentley +{ + + private static Random rnd = new Random(); + + /** + * Private constructor for utility class. + * + */ + private FloydAndBentley() + { + } + + /** + * A function which chooses a sample from a List with the Floyd and Bentley + * algorithm. (Recursive algorithm) + * + * @param <T> + * Type of the Lists. + * @param s + * The set from which the sample is chosen. + * @param k + * The number of items to be chosen. + * @return Return the sample. + */ + public static <T> List<T> sample(List<T> s, int k) + { + if (s.isEmpty()) + { + throw new IllegalArgumentException("Set is empty"); + } + if (k > s.size()) + { + throw new IllegalArgumentException("k is bigger than the Set"); + } + + List<T> ret = new ArrayList<>(k); + sampleRec(s, k, ret); + + return ret; + + } + + /** + * The recursive implementation of the Floyd and Bentley algorithm. + * + * @param <T> + * Type of the Lists. + * @param s + * The set from which the sample is chosen. + * @param k + * The number of items to be chosen. + * @param ret + * Return the sample. + */ + private static <T> void sampleRec(List<T> s, int k, List<T> ret) + { + if (ret.size() >= k) + { + return; + } + + T val = s.get(rnd.nextInt(s.size() - (k - ret.size()))); + + if (ret.contains(val)) + { + val = s.get(s.size() - (k - ret.size())); + } + + ret.add(val); + + sampleRec(s, k, ret); + + } + + /** + * A function which chooses a sample from a List with the Floyd and Bentley + * algorithm. (Non recursive algorithm) + * + * @param <T> + * Type of the Lists. + * @param s + * The set from which the sample is chosen. + * @param k + * The number of items to be chosen. + * @return Return the sample. + */ + public static <T> List<T> sample2(List<T> s, int k) + { + if (s.isEmpty()) + { + throw new IllegalArgumentException("Set is empty"); + } + if (k > s.size()) + { + throw new IllegalArgumentException("k is bigger than the Set"); + } + + List<T> ret = new ArrayList<>(k); + + for (int i = 0; i < k; i++) + { + T val = s.get(rnd.nextInt(s.size() - (k - ret.size()))); + + if (ret.contains(val)) + { + val = s.get(s.size() - (k - ret.size())); + } + + ret.add(val); + } + + return ret; + } +} diff --git a/src/de/fhswf/in/inf/java1/aufgabe8/LottoZiehung.java b/src/de/fhswf/in/inf/java1/aufgabe8/LottoZiehungMain.java index 279345d..6524a29 100644 --- a/src/de/fhswf/in/inf/java1/aufgabe8/LottoZiehung.java +++ b/src/de/fhswf/in/inf/java1/aufgabe8/LottoZiehungMain.java @@ -1,56 +1,51 @@ -/**
- *
- */
-package de.fhswf.in.inf.java1.aufgabe8;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * TODO Add comment here
- *
- * @author $Author: $
- * @version $Revision: $, $Date: $ UTC
- */
-public final class LottoZiehung
-{
-
- /**
- * TODO Add constructor comment here
- *
- */
- private LottoZiehung()
- {
- // TODO Auto-generated constructor stub
- }
-
- /**
- * TODO Add method comment here
- *
- * @param args
- * Command line arguments.
- */
- public static void main(String[] args)
- {
- // TODO Auto-generated method stub
-
- List<Integer> lottoZahlen = new ArrayList<>(49);
-
- for (int i = 1; i <= 49; i++)
- {
- lottoZahlen.add(i);
- }
-
- List<Integer> ziehung = FloydAndBentley.sample(lottoZahlen, 7);
-
- Integer Sonderzahl = ziehung.get(6);
-
- ziehung.remove(6);
-
- ziehung.sort(null);
-
- System.out.println(ziehung + " SonderZahl: " + Sonderzahl);
-
- }
-
-}
+/** + * + */ +package de.fhswf.in.inf.java1.aufgabe8; + +import java.util.ArrayList; +import java.util.List; + +/** + * Main class for the LottoZiehung. + * + * @author $Author: $ + * @version $Revision: $, $Date: $ UTC + */ +public final class LottoZiehungMain +{ + + /** + * Private constructor for utility class. + * + */ + private LottoZiehungMain() + { + } + + /** + * Main function of the package. + * + * @param args + * Command line arguments. + */ + public static void main(String[] args) + { + List<Integer> lottoZahlen = new ArrayList<>(49); + + for (int i = 1; i <= 49; i++) + { + lottoZahlen.add(i); + } + + List<Integer> ziehung = FloydAndBentley.sample(lottoZahlen, 7); + + Integer Sonderzahl = ziehung.get(6); + + ziehung.remove(6); + + ziehung.sort(null); + + System.out.println(ziehung + " SonderZahl: " + Sonderzahl); + } +} |
