Element in Linked List finden und vergleichen

Gast #5845891
Guten morgen, ich beschäftige im Moment zum ersten mal mit einer 
Programmiersprache und habe ein Problem, was ich zwar lösen kann, aber 
mit einer miserablen Laufzeit.

Problem:

Es ist gegeben ein Array  array ={1,2,3} und eine  LinkedList<int[]> die 
wie folgt ausschaut linkedList={{1,2,2},{1,3,2},{3,2,1}}.
Geprüft werden soll, dass jede Untermenge in linkedList (nennt man dies 
Untermenge?) ein oder mehrere, aber nur Elemente aus dem Array hat.
Wenn in einen der Untermengen eine 7 vorkommt und diese ist nicht im 
array={1,2,3}, sollte es erkannt werden.


Meine brute force Lösung waren 3 Forscheleifen, wobei ich jede 
Untermenge in der ersten in einen Array packe und in den nächsten zwei 
Forschleifen die einzelnen Elemente der arrays vergleiche => Laufzeit 
O(n^3), also unschöne Nummer.

Leider fehlt mir etwas der Rüststoff, wie ich dieses Problem ganz 
einfach löse und es wäre nett, wenn mir hier Jemand helfen könnte.
Gast #5845935
Eine Methode wäre statt dem Array ein Hash map zu programmieren. Du hast 
dort quasi ein Array von Arrays. Fürs erste Array nutzt du den gesuchten 
Wert (oder den Hashwert eines Objekts), bzw. einen Teil davon, als 
Index. Im ausgewählten Array suchst du dann normal danach. Im Idealfall 
gibt es nur 1-2 Einträge pro Array, womit dass dann sehr schnell geht. 
Jenachdem bekommt man dann praktisch O(1).

Oder kannst du die Elemente der Listen und Arrays sortiert halten?
Dann könntest du eine Schleife mit 2 Laufwariablen machen. Wenn a<b, 
nächstes a. Wenn b<a, nicht gefunden. Wenn a==b, nächstes b.

Natürlich gibt es noch viele andere Strukturen und Algorithmen, die man 
nehmen könnte. Die sind mir halt spontan so eingefallen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.