SkipList Implementierung

SpaceToon

Mitglied
Guten Tag,
ich besuche zur Zeit einen Java Grundlagenkurs und habe die Aufgabe bekommen, eine SkipList in Java zu implementieren. Ich weiß nun was eine SkipList ist und wozu sie gut ist, allerdings verstehe ich nicht, wie diese Funktioniert bzw. wie ich bei der Implementierung herangehen sol.
Die Aufgabe ist im Anhang. Dazu haben wir folgenden Code bekommen:

Java:
package de.tuberlin.ise.prog1;

import java.util.Collection;
import java.util.Iterator;

public class SkipList implements Collection<Integer> {

   
    /**
     * Returns the value at the specified position
     *
     * @param index
     * @return
     */
    public Integer get(int index) {
        return null;
    }
   

    /**
     * Inserts a value into the SkipList.
     *
     * @param value
     * @return
     */
    @Override
    public boolean add(Integer e) {
        // TODO Auto-generated method stub
        return false;
    }
   
    /**
     * Checks, whether a number is contained in the list.
     * @param value
     * @return boolean value whether number is contained in list
     */
    public boolean contains(int value) {
        return false;
    }
   
    /**
     * removes all elements form the list
     */
    @Override
    public void clear() {
        // TODO Auto-generated method stub
       
    }
   
    /**
     * @return the size of the list
     */
    @Override
    public int size() {
        // TODO Auto-generated method stub
        return 0;
    }
   
   

    //do not change the following methods
   
    @Override
    public boolean isEmpty() {
        return size() <= 0;
    }
   
    @Override
    public boolean contains(Object o) {
        try {
            Integer casted = (Integer) o;
            return contains(casted) ;
        } catch (ClassCastException e) {
            return false;
        }
    }
   
   
    @Override
    @Deprecated
    public boolean remove(Object o) {
        return false;
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        for(Object o : c) {
            if(!contains(o)) {
                return false;
            }
        }
        return true;
    }

    @Override
    public boolean addAll(Collection<? extends Integer> c) {
        for(Integer t:c) {
            add(t);
        }
        return true;
    }

    @Override
    @Deprecated
    public boolean removeAll(Collection<?> c) {
        return false;
    }

    @Override
    @Deprecated
    public boolean retainAll(Collection<?> c) {
        return false;
    }

    @Override
    public Iterator<Integer> iterator() {
        //really slow way to implement this but should be some what understandable
        return new Iterator<Integer>() {
            int index = 0;
            @Override
            public boolean hasNext() {
                // TODO Auto-generated method stub
                return index < size();
            }

            @Override
            public Integer next() {
                return get(index++);
            }
        };
    }

    @Override
    public Object[] toArray() {
        Object[] obj = new Object[size()];
        for (int i = 0; i < size(); i++) {
            obj[i] = get(i);
        }
        return obj;
    }

    @SuppressWarnings("unchecked")
    @Override
    public <X> X[] toArray(X[] a) {
        for (int i = 0; i < size(); i++) {
            a[i] = (X) get(i);
        }
        return a;
    }


}

Java:
package de.tuberlin.ise.prog1;

import java.util.Arrays;
import java.util.List;

public class Main {
   
    public static void main(String[] args) {
       
        List<Integer> daten = Arrays.asList(1,3,6,7,12,14,21,34,36,37);
       
        SkipList list = new SkipList();
       
        list.addAll(daten);
       
        System.out.printf("test get(5) should be:14 is:%d\n",list.get(5));
       
        System.out.printf("test contains(7) should be:true is:%b\n",list.contains(7));
        System.out.printf("test contains(37) should be:true is:%b\n",list.contains(37));
        System.out.printf("test contains(-1) should be:false is:%b\n",list.contains(-1));
       
        System.out.printf("test toString() should be:\n"
                + "head -> 1 -> 7 -> 21 -> 36 -> null\r\n" +
                "head -> 1 -> 3 -> 6 -> 7 -> 12 -> 14 -> 21 -> 34 -> 36 -> 37 -> null\r\n" +
                "\nis:\n%s\n",list);   
       
    }

   
}

Meine Frage nun:
- Was bedeutet der Satz "Die Indexliste soll hierbei eine fixe Größe von vier Einträgen haben. Der in diesen Feldern gehaltene Index soll sich gleichmäßig über die Anzahl der Einträge in der Primärliste verteilen (d.h. Anzahl der nicht indexierten Elemente in den durch die sekundäre Liste definierten Intervallen weicht nie um mehr als 1 ab)." ?
- Wie würde die SkipListe genau arbeiten wenn ich z.B. anfange, die Zahlen einzufügen? Ich kann mir das gar nicht vorstellen, wie ich das unterscheiden kann, dass die Zahlen in die BaseList oder in die IndexList eingefügt werden. Also ich bin völlig planlos, wie ich an diese Aufgabe herangehen soll. Ich habe viel im Internet recherchiert, aber nichts nützliches gefunden.

Vielen Dank für Ansätze!
 

Anhänge

  • Aufgabe 8.pdf
    553,8 KB · Aufrufe: 14

Baelact

Mitglied
Hallo,
wie ich verstanden habe - mit der Zeichen der dritte Seite - sollte sich deine Liste so entwickeln: sieh unter. In der Implementation (zumindest der Erwartung des Main Methods zufolge) soll die Indexliste bei dem "Teil" dicht werden.
Mögliche Antworten auf deine Frage:
1) Wenn die Liste nicht leer ist, soll der erste Zeiger immer auf das erste Element zeigen. Ansonsten könnte man das erste Element nie finden. Wohin der zweite, dritte und vierte Zeiger aber zeigen sollen ist von die Vorschrift der "gleichmäßigen Verteilung" spezifiziert. Also wenn die Liste z.B. 10 Elemente beinhaltet, dann soll der zweite Zeiger an das vierte Element, der dritte auf das siebte und der letzte auf das neunte Element zeigen. Dieses weg werden die Zeiger für soviel wie möglich an einen gleichen Anzahl von Elemente "verantwortlich".
2) Ein Element soll immer zu der Primärliste gefügt. Und dann soll man die Indexliste aktualisieren


Also die Liste, wie ich die Aufgabe verstanden habe:

0. die Liste ist leer: Indexliste sowie Primärliste sind leer. Das heißt: Indexliste beinhaltet vier Nullzeigers

1. Zugeben vom ersten Element (1):
- Primärliste beinhaltet ein einziges Element (1)
- Indexliste wird aktualisiert, indem alle vier Zeiger zeigen an das einzigen Element (der Vorschrift von gleichmäßige Verteilung der indexe über die Primärliste entsprechend :))
skiplist1.PNG

2. das zweite Element (3) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt
- Indexliste wird aktualisiert. Also die erste zwei Zeiger zeigt auf das erste Element wie zuvor, die nächste drei Zeiger aber auf das zweite Element
skiplist2.PNG

3. das dritte Element (6) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt
- Indexliste wird aktualisiert: Die erste drei Zeiger zeigen an die erste drei Elemente und der letzte Zeiger zeigt auch an das letzte Element:
skiplist3.PNG
4. das vierte Element (7) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt
- Indexliste wird aktualisiert: alle Zeiger zeigen an verschiedene Elemente
skiplist4.PNG

5. das fünfte Element (12) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt
- Indexliste wird aktualisiert: letzte drei Zeiger zeigen an die letzte drei Elemente und der erste (wie immer) an das erste
skiplist5.PNG


6. das sechste Element (14) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt, Indexliste wird aktualisiert:
skiplist6.PNG

7. das siebte Element (21) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt, Indexliste wird aktualisiert:
skiplist7.PNG

8. das achte Element (34) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt
- die Indexliste muss aber nicht aktualisiert werden:
skiplist8.PNG

9. das neunte Element (36) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt, Indexliste wird aktualisiert:
skiplist9.PNG

10. das zehnte Element (37) ist zugegeben:
- das neue Element wird zu der Primärliste gefügt, Indexliste wird aktualisiert:
skiplist10.PNG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Frage zu SkipList Java Basics - Anfänger-Themen 4
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
I Erste Schritte Implementierung der API Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
G Implementierung eines Kontos Java Basics - Anfänger-Themen 11
M Quicksort implementierung Java Basics - Anfänger-Themen 23
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
K Kleiner Fehler bei Methoden Implementierung Java Basics - Anfänger-Themen 6
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
S OOP Implementierung Komposition, Aggregation, Assoziation und Generalisierung Java Basics - Anfänger-Themen 2
C Klassenhirarchien zur Implementierung von Fahrzegen Java Basics - Anfänger-Themen 26
BinaryLogic Datentypen Statistik Interface - untersch. Implementierung Java Basics - Anfänger-Themen 5
E Performante Implementierung eines "Hintergrundprogramms" Java Basics - Anfänger-Themen 10
S Saubere Implementierung Java Basics - Anfänger-Themen 2
K Dijkstra implementierung 2.0 Java Basics - Anfänger-Themen 19
K dijskral implementierung Java Basics - Anfänger-Themen 14
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
B OOP Problem bei Implementierung von Interface Java Basics - Anfänger-Themen 6
J HashSet Implementierung Java Basics - Anfänger-Themen 16
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
D Datentypen Implementierung eines Binärbaumes Java Basics - Anfänger-Themen 7
B Implementierung Java Basics - Anfänger-Themen 2
N Implementierung Tic tac toc Java Basics - Anfänger-Themen 25
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
Y Implementierung einer Potenzturm Funktion Java Basics - Anfänger-Themen 4
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
U Implementierung Constructor Java Basics - Anfänger-Themen 7
T Problem mit Implementierung von einer HashMap aufgabe Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
I Zugriff auf Implementierung verhindern Java Basics - Anfänger-Themen 8
D Implementierung nach MVC Java Basics - Anfänger-Themen 6
B Theoretische Frage zum Programmbau (nun zur Implementierung) Java Basics - Anfänger-Themen 8
H Implementierung von Interfaces Java Basics - Anfänger-Themen 4
G Implementierung von Bäumen Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
B Wie funktioniert die implementierung von c code in Java? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben