Hallo,
ich befasse mich erst seit ein paar Wochen mit Java und stehe gerade vor einem Problem:
Ich habe den Code für meine Übungsaufgabe schon fast fertig, es fehlt nur noch ein Bruchteil, bei dem ich aber nicht weiterkomme. Es geht im Prinzip darum verschiedene Datensätz durch eine sequentielle Suche bei unsortierter Reihenfolge, eine sequentielle Suche bei sortierter Reihenfolge und eine binäre Suche zu jagen und dann anschließend die Mittelwerte aller Suchoperationen zu vergleichen.
Ich poste erstemal den Code, meine Fragen stehen dann unten!
Mein Problem ist jetzt folgendes, die Ausgabe auf der Konsole soll wie folgt aussehen:
Ich komme nur immer mit diesen drei for-Schleifen in der Main-Methode durcheinander. Die Hilfsmethoden sollten alle stimmen. Wie schaffe ich es, dass genau das ausgegeben wird, was ich möchte. Also an welcher Stelle muss ich den Mittelwert der Suchoperationen berechnen. Brauche ich da noch eine weitere Variable?
Ich hoffe Ihr versteht, was mein Problem ist und könnt mit dem Code was anfangen, kommentiert ist er ja!
Wäre echt cool, wenn mir da jemand weiterhelfen könnte!
Vielen Dank!
Mauritio
ich befasse mich erst seit ein paar Wochen mit Java und stehe gerade vor einem Problem:
Ich habe den Code für meine Übungsaufgabe schon fast fertig, es fehlt nur noch ein Bruchteil, bei dem ich aber nicht weiterkomme. Es geht im Prinzip darum verschiedene Datensätz durch eine sequentielle Suche bei unsortierter Reihenfolge, eine sequentielle Suche bei sortierter Reihenfolge und eine binäre Suche zu jagen und dann anschließend die Mittelwerte aller Suchoperationen zu vergleichen.
Ich poste erstemal den Code, meine Fragen stehen dann unten!
Java:
package algorithms;
import java.util.Arrays;
public class Searching {
// erzeugung zweier Klassenvariablen, die die Durchläufe der jeweiligen Suche zählen, bis sie
// erfolgreich ist.
public static int binZaehler = 0;
public static int seqZaehler = 0;
// Beginn der Main-Methode
public static void main(String[] args) {
// Erste for-Schleife, sie beschreibt die Anzahl der Durchläufe, in
// diesem Fall sind es beim ersten Mal 10 Durchläufe und beim zweiten Mal 1000 Durchläufe
for (int durchlaeufe = 10; durchlaeufe <= 1000; durchlaeufe = durchlaeufe + 990) {
// Zweite for-Schleife, sie beschreibt für die Größe der Datensätze
// (in diesem Fall sind es die Datensätze 10,100,1000,10000,100000),
for (int datensatz = 10; datensatz <= 100000; datensatz = datensatz * 10) {
System.out.println("Ausgabe der 3 Mittelwerte für " + durchlaeufe + " Durchläufe und einem Datensatz von " + datensatz + ":\n");
// Dritte for-Schleife: Sie führt einmal die Sequentielle Suche
// nach dem key (S) am unsortierten Array (A) aus, dann die Sequentielle
// Suche am geordneten Array(Array wird sortiert durch "Arrays.sort(A)"
// und abschließend noch die Binäre Suche am sortierten Array.
for (int k = 0; k < datensatz; k++) {
int[] A = generateNumbersUnique(datensatz);
int S = (int) Math.random() * (datensatz);
sequentialSearch(A, S);
Arrays.sort(A);
sequentialSearch(A, S);
binarySearch(A, S);
}
}
}
}
//Ende Main-Methode
// Beginn Hilfs-Methoden (Sequentielle Suche, Binäre Suche,
// generateNumbersUnique, generateNumbers)
// Methode sucht den Suchschlüssel key mithilfe der sequenziellen Suche in
// der Zahlenfolge numbers und gibt im Erfolgsfall den Index der Fundstelle
// zurück.
// Wird nichts gefunden, gibt die Methode -1 zurück.
public static int sequentialSearch(int[] numbers, int key) {
seqZaehler = 0;
for (int i = 0; i < numbers.length; i++) {
seqZaehler++;
if (numbers[i] == key) {
return i;
}
}
return -1;
}
// Methode sucht den Suchschlüssel key mithilfe einer binären Suche in der
// Zahlenfolge numbers und gibt bei Erfolg den Index der Fundstelle zurück.
// Wird nichts gefunden, gibt die Methode -1 zurück.
public static int binarySearch(int[] numbers, int key) {
int u = 0;
int o = numbers.length;
binZaehler = 0;
while (u <= 0) {
binZaehler++;
int m = (u + o) / 2;
if (numbers[m] == key) {
return m;
}
binZaehler++;
if (numbers[m] > key) {
o = m - 1;
}
else {
u = m + 1;
}
}
return -1;
}
// Die Methode generateNumbersUnique erzeugt ein int-Array, das mit
// zufälligen und gleichzeitig einzigartigen Werten gefüllt wird.
public static int[] generateNumbersUnique(int size) {
int[] numbers = new int[size - 1];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i;
}
for (int j = 0; j < numbers.length; j++) {
int a = (int) Math.random() * (size - 1);
int speicher = numbers[a];
numbers[a] = numbers[j];
numbers[j] = speicher;
}
return numbers;
}
// Die Methode generateNumbers erzeugt ein int-Array, das mit zufälligen
// Werten gefüllt wird.
public static int[] generateNumbers(int size) {
int[] gNumbers = new int[size];
for (int i = 0; i < gNumbers.length; i++) {
gNumbers[i] = (int) Math.random() * (size - 1);
}
return gNumbers;
}
}
Mein Problem ist jetzt folgendes, die Ausgabe auf der Konsole soll wie folgt aussehen:
Ausgabe für 10 Durchläufe und einem Datensatz von 10 Elementen:
Mittelwert Suchoperationen sequentielle Suche (ohne Sortieren): MW (hier soll der Zahlenwert stehen)
Mittelwert Suchoperationen sequentielle Suche (mit Sortieren): MW
Mittelwert Suchoperationen binäre Suche (mit Sortieren): MW
Ausgabe für 10 Durchläufe und einem Datensatz von 100 Elementen:
Mittelwert.....
Mittelwert.....
Mittelwert.....
....
Ich komme nur immer mit diesen drei for-Schleifen in der Main-Methode durcheinander. Die Hilfsmethoden sollten alle stimmen. Wie schaffe ich es, dass genau das ausgegeben wird, was ich möchte. Also an welcher Stelle muss ich den Mittelwert der Suchoperationen berechnen. Brauche ich da noch eine weitere Variable?
Ich hoffe Ihr versteht, was mein Problem ist und könnt mit dem Code was anfangen, kommentiert ist er ja!
Wäre echt cool, wenn mir da jemand weiterhelfen könnte!
Vielen Dank!
Mauritio