Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:adt:set:implementationen:start [14.11.2021 19:03] – [Zahlen hinzufügen] sbel | faecher:informatik:oberstufe:adt:set:implementationen:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Die Set-Implementationen im Detail ====== | ||
- | |||
- | ===== Variante 1: ArrayList ===== | ||
- | |||
- | Die einfachste Lösung ist, wenn der ADT Set als interne Datenstruktur eine '' | ||
- | Beim Einfügen muss immer getestet werden, ob der Wert bereits in der '' | ||
- | |||
- | |||
- | === Vorteile: === | ||
- | |||
- | * Einfache Implementation | ||
- | * Speicherbedarf relativ gering (etwa proportional zur Anzahl der Werte) | ||
- | |||
- | |||
- | === Nachteile: === | ||
- | * Suche nach einem Element bei großen Mengen aufwendig (proportional zur Anzahl der Werte) | ||
- | |||
- | ===== Variante 2: Bitvektor ===== | ||
- | |||
- | Man kann eine Menge von Integer-Zahlen auch in eine einzelne Integer-Zahl verpackt darstellen, indem man die entsprechenden Bits in ihrer Binärdarstellung setzt. Man spricht dann von einem **Bitvektor**. | ||
- | |||
- | **Beispiel: | ||
- | |||
- | {{ : | ||
- | |||
- | Da eine Integer-Zahl in Java 32 Bit lang ist, kann man mit einer Integer-Zahl also für die Zahlen von 0 bis 31 darstellen, ob sie in einer Menge enthalten sind oder nicht. | ||
- | |||
- | ==== Ist eine Zahl in der Menge enthalten? ==== | ||
- | |||
- | Um herauszufinden, | ||
- | |||
- | <code java> | ||
- | int vier_gesetzt = 25 & 16; // Ergebnis: 16 | ||
- | int eins_gesetzt = 25 & 2; // Ergebnis: 0 | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | Der binäre UND-Operator verknüpft zwei '' | ||
- | |||
- | Eine Zahl ist in der Menge enthalten, wenn bei der UND-Verknüpfung ein Wert herauskommt, | ||
- | |||
- | ==== Zahlen hinzufügen ==== | ||
- | |||
- | |||
- | Um einen Wert zu einem Bitvektor hinzufügen, | ||
- | |||
- | **Beispiel: | ||
- | <code java> | ||
- | | ||
- | </ | ||
- | {{ : | ||
- | |||
- | Der binäre ODER-Operator verknüpft zwei '' | ||
- | |||
- | Beim Setzen eines Bits muss nicht geprüft werden, ob es bereits gesetzt ist – der ODER-Operator verändert in diesem Fall den Bitvektor nicht. | ||
- | |||
- | ==== Bitmasken ==== | ||
- | |||
- | Zum lesen und setzen von Elementen benötigt man die entsprechenden Zahlen, letztlich in Binärdarstellung. Diese Zahlen, die man zum Auslesen oder Setzen von Bits verwendet werden als '' | ||
- | |||
- | Eine Maske, bei der als niederwertigstes Bit nur das n-te Bit von rechts gesetzt ist, entspricht der Zahl 2^n. Schnell und effizient erhält man diese Zahl, indem man die Zahl 1 um n Stellen nach links „verschiebt“. | ||