Skip Listen

Louis12

Aktives Mitglied
Hallo,

Leider komme ich nicht weiter und kann mir garnicht vorstellen, wie ich vorzugehen habe oder was ich als erstes tuhen muss. Ich freue mich wirklich auf jede Antwort und vielen Dank im vorraus.

FRAGESTELLUNG

Implementieren Sie die SkipList-Datenstruktur für Integer-Daten. Die Indexliste soll hierbei ebenfalls eine fixe Größe von vier Feldern 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; die Indexliste muss sich dynamisch anpassen). Weiter soll die Skiplist folgende Methoden anbieten: • add(value) – Fügt ein int in die Skiplist ein und updatet die Indexliste falls notwendig. Die Methode soll immer true zurückgeben, wenn das Einfügen erfolgreich war. • get(index) – Gibt den Wert an der durch index definierten Position zurück oder null, wenn index nicht vorhanden ist. • contains(value) – Gibt einen boolean-Wert zurück, welcher anzeigt ob das übergebene Element in der Primärliste enthalten ist. • size() – Gibt einen int-Wert zurück, welcher die Anzahl der Elemente in der Primärliste beschreibt. • clear() – Entfernt alle Einträge aus der Liste, so dass die Liste wie neu verwendet werden kann • toString() – Gibt eine Stringdarstellung der Listenelemente der Sekundär- und Primärliste zurück


konkrete Frage ; wie kann ich es implementieren das die Indexliste eine fixe Größe von vier Feldern hat.

was müsste ich im Code ergänzen damit so eine index Liste realisiert wird.

CODE




Code:
package main;

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;
    }
}



package main;

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);
    }

    
}



liebe grüße
louis
 

Anhänge

  • 1578087855372.png
    1578087855372.png
    318,5 KB · Aufrufe: 3
K

kneitzel

Gast
Hast Du denn schon verstanden, wie die SkipList funktionieren soll?

Wie sah denn die einfache List aus? Was ist denn da gemacht worden?

Falls es Probleme beim Verständnis eine SkipList gibt hilft evtl https://www.geeksforgeeks.org/skip-list/
(Wobei es da auch andere Varianten gibt, in so einem Fall bräuchte man mehr Informationen zu dem, was euch diesbezüglich genau gesagt wurde.)

Evtl. auch interessant: Der Thread von jemandem, der die scheinbar gleiche Aufgabe bearbeitet: https://www.java-forum.org/thema/frage-zu-skiplist.186856/
 

Louis12

Aktives Mitglied
Hallo,

Vielen dank für den Link ich habe dank dem Link die Theorie verstanden.

wie sah denn die einfache List aus? Was ist denn da gemacht worden?

in einer einfachen Liste wird die ganze Liste durchsucht, wodurch es viel Zeit in Anspruch genommen wird.

In einer Skip List wird eine Index Liste bzw. mehrere express Lines parallel zu normalen Liste benutzt um bestimmte Zahlenbereiche zu überspringen, wie im Beispiel im geposteten Link erklärt.



(Wobei es da auch andere Varianten gibt, in so einem Fall bräuchte man mehr Informationen zu dem, was euch diesbezüglich genau gesagt wurde.)


uns wurde nicht viel über die Variante gesagt. ich werde aber die ganze Aufgabenstellung diesbezüglich anhängen, ich habe übrignes die weniger umfangreiche Aufgabe gewählt

FRAGEN:
Eine Basis Liste wurde quasi schon in der Main erstellt, muss ich eine extra Klasse für die Index Liste erstellen oder reicht schon die Klasse Skip List


Code:
 @Override
    public boolean add(Integer e) {
        // TODO Auto-generated method stub
        return false;
    }

In dieser Methode überprüfe ich erstmal ob eine zahl in der Liste existiert, wenn nein dann liefert es den Wert true zurück und ich kann in der Main methode List.add benutzen richtig ?

Wie kann ich in der Methode überprüfen ob in einer beliebigen Liste eine Zahl drin ist, denn ich kann ja nicht den Listenamen in der Main benutzen

Ich habe leider nicht verstanden, wie ich eine Indexliste implemtiere die eine fixe Größe von vier Feldern hat . Eine Liste kann doch beliebig viele Zahlen speichern.
 

Anhänge

  • Aufgabe 8.pdf
    260,1 KB · Aufrufe: 5
K

kneitzel

Gast
Ok, bei der Aufgabe ist es aus meiner Sicht etwas anders aufgebaut.

Du hast neben der eigentlichen Liste einfach eine zweite Liste mit genau 4 Elementen. Das ist in den Abbildungen auch recht deutlich gezeigt. Da siehst Du dann, wie es mit einem Element und mit 4 Elementen in der Basisliste aussehen sollte.

Eine Liste mit 4 Elementen bekommst Du, in dem Du eine neue Liste erzeugst und dann 4 Elemente einfügst.

Bezüglich der add Methode: Die muss natürlich auch direkt das Element einfügen. Du hast ja eine SkipList und die inneren Listen (Index und Base List) sind nur innerhalb bekannt. Wenn auf der Skip List ein add aufgerufen wird, dann muss:
- wenn das Element bereits vorhanden ist, false zurück gegeben werden.
- das Element eingefügt werden in die Base List und die Index List ggf. angepasst werden.
 

Louis12

Aktives Mitglied
Danke für die Antwort

Eine Liste mit 4 Elementen bekommst Du, in dem Du eine neue Liste erzeugst und dann 4 Elemente einfügst.

jo danke das ergibt sinn



Bezüglich der add Methode: Die muss natürlich auch direkt das Element einfügen. Du hast ja eine SkipList und die inneren Listen (Index und Base List) sind nur innerhalb bekannt. Wenn auf der Skip List ein add aufgerufen wird, dann muss:
- wenn das Element bereits vorhanden ist, false zurück gegeben werden.
- das Element eingefügt werden in die Base List und die Index List ggf. angepasst werden.

ich verstehe leider nicht wie ich in der Methode die Base List kontrollieren kann also ob dieser Zahl vorhanden ist

und kann ich das mit instace of machen oder muss ich Comparable benutzen
 
K

kneitzel

Gast
ich verstehe leider nicht wie ich in der Methode die Base List kontrollieren kann also ob dieser Zahl vorhanden ist

Also ich würde innerhalb der Skip List keine andere List verwenden (als Klasse). Die Skip List implementiert alles, denn nach meinem Verständnis brauchst Du ja auch Zugriff auf die Nodes der Base List. Und das wäre ja sonst in der List Klasse gekapselt und Du hättest keinen Zugriff drauf.

Das ist also nur von der Beschreibung her halt eine Index List und eine Base List. Du verwendest vorhandenen Code aber nur in der Form, dass Du diesen sozusagen kopierst um ihn dann zu verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Skip Mp3 Java Basics - Anfänger-Themen 4
D Listen in Listen in Listen ... ??? Java Basics - Anfänger-Themen 2
XWing listen Java Basics - Anfänger-Themen 7
FunkyPhil94 addLast und addFirst bei Listen Java Basics - Anfänger-Themen 6
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
S Lineare listen verkettung Java Basics - Anfänger-Themen 7
S Listen Java Basics - Anfänger-Themen 12
S Listen , Nodes am ende anängen Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
M Java Listen Java Basics - Anfänger-Themen 4
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A PhoneBook mit verketteten listen Java Basics - Anfänger-Themen 48
F ich brauche Hilfe bei Listen Java Basics - Anfänger-Themen 13
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
S Erklaerung Listen Java Basics - Anfänger-Themen 27
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
L Wie testet man (selbstgeschriebene) Listen sinnvoll? Java Basics - Anfänger-Themen 2
F Problem mit Listen Java Basics - Anfänger-Themen 5
J Listen Operationen Java Basics - Anfänger-Themen 4
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Sortierte Listen Java Basics - Anfänger-Themen 4
L Datenstrukturen/ Listen Java Basics - Anfänger-Themen 17
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
L Listen und Felder Java Basics - Anfänger-Themen 2
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
R Arrays und Listen Java Basics - Anfänger-Themen 1
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
F Multidimensionale Listen Java Basics - Anfänger-Themen 3
F Wie String in unterschiedliche Listen teilen Java Basics - Anfänger-Themen 7
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
T Objekte in Listen vererben Java Basics - Anfänger-Themen 3
A Klassen Klassen und Listen... Java Basics - Anfänger-Themen 5
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
S Methoden Vergleichen von zwei Listen in der Geschwindigkeit von O(n+m) Java Basics - Anfänger-Themen 32
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
C Listen Java Basics - Anfänger-Themen 3
C Zwei Listen verbinden Java Basics - Anfänger-Themen 1
C Zahlen merken mit Hilfe von Arrays/Listen Java Basics - Anfänger-Themen 2
E Feld von verketteten Listen Java Basics - Anfänger-Themen 11
T Überprüfung einer Aufgabe zu verketteten Listen Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
JarJarBigs Frage zu Listen Java Basics - Anfänger-Themen 2
N verkettete Listen Java Basics - Anfänger-Themen 4
O Listen sort-Methode Java Basics - Anfänger-Themen 1
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
L Lineare Listen Java Basics - Anfänger-Themen 2
S Listen Objekte nach LocalDateTime sortieren Java Basics - Anfänger-Themen 2
D Methoden Listen generieren Java Basics - Anfänger-Themen 4
A Sichtbarkeit in Methoden/Listen Java Basics - Anfänger-Themen 3
M verkettete Listen Java Basics - Anfänger-Themen 1
D Klausur Vorbereitung: Listen, Rekursion, Bäume & Vererbung Java Basics - Anfänger-Themen 3
S Vergleich von Listen Java Basics - Anfänger-Themen 6
I Zwei Listen vergleichen Java Basics - Anfänger-Themen 2
M Listen erstellen mit unterschiedlichen Reihenfolgen Java Basics - Anfänger-Themen 3
I Zwei Listen vergleichen bei n:m Beziehung Java Basics - Anfänger-Themen 2
I Zwei Listen: Wenn nicht vorhanden löschen Java Basics - Anfänger-Themen 4
I Prüfen von zwei Listen Java Basics - Anfänger-Themen 1
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
S Unsortierte Listen - Frage zur "Verkettung" Java Basics - Anfänger-Themen 1
I Zwei Listen vergleichen Java Basics - Anfänger-Themen 7
I Listen, for - Schleifen Java Basics - Anfänger-Themen 8
P Listen Size stimmt nicht Java Basics - Anfänger-Themen 5
O Objekt Listen serialisierung und deserialisieren Java Basics - Anfänger-Themen 5
L Collections Objekte in Listen speichern Java Basics - Anfänger-Themen 3
G 2 Listen kombinieren und nach abc sortieren Java Basics - Anfänger-Themen 9
D Annonyme Innere Klasse: Listen mit geradem Index ausgeben Java Basics - Anfänger-Themen 6
G Listen sortieren Java Basics - Anfänger-Themen 3
G Generic und Listen Java Basics - Anfänger-Themen 8
R SQL ähnlicher Filter für Java Listen Java Basics - Anfänger-Themen 2
Y Collections 4 Listen Java Basics - Anfänger-Themen 14
S OOP/ Listen...etc... Java Basics - Anfänger-Themen 14
E Listen Java Basics - Anfänger-Themen 2
V Methoden Verkettete Listen Index eines Elementes ausgeben Java Basics - Anfänger-Themen 10
B Listen Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
B Map per Listen Java Basics - Anfänger-Themen 2
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
Joew0815 Problem mit Listen: add() Java Basics - Anfänger-Themen 11
P Zeichenorientierte & Serialisierte Datenverarbeitung Listen Java Basics - Anfänger-Themen 8
E Listen und Generics Java Basics - Anfänger-Themen 9
L dynamisches erzeugen von array Listen Java Basics - Anfänger-Themen 7
E Listen und Duplikate Java Basics - Anfänger-Themen 2
R Hilfe bei Listen Java Basics - Anfänger-Themen 10
F Collections Liste von Listen Java Basics - Anfänger-Themen 21
A Methoden Anfängerfrage: 2 Listen Vergleichen Java Basics - Anfänger-Themen 7
walker23m C++ Listen iteratoren in Java umwandeln Java Basics - Anfänger-Themen 3
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
N Listen Java Basics - Anfänger-Themen 5
S Listen Klasse selbst schreiben Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben