Subato

HashMap

Hashing mit Sondierung

Implementieren Sie eine Hash-Tabelle HashMap<T> mit Strings als Schlüsseln und einem beliebigen Typ T für die Werte.

  • Mit get() greifen Sie auf die Werte der Tabelle zu. Falls ein Schlüssel nicht vorhanden ist, wird null zurückgeliefert.
  • Mit add() fügen Sie Werte ein. Die Methode soll false zurückliefern falls kein Platz zum Einfügen gefunden wird. Doppelte Schlüssel werden wie üblich überschrieben.
  • size() soll die Anzahl der belegten Stellen der Hash-Tabelle zurückliefern, fillRatio() den Füllgrad.
  • toList() liefert eine (java.util)-Liste mit den Nutzdaten der belegten Zellen. Zur konkreten Relisierung können Sie java.util.LinkedList verwenden. Die Reihenfolge der Ergebnisliste ist nicht vorgegeben.
  • hashcode() liefert den Hash-Wert: Ein String $k = k_1k_2...k_n$ wird mit der Hash-Funktion aus den Vorlesungsvideos auf einen Hash-Code abgebildet ($N \in \mathbb{N}^+$ sei die Größe der Tabelle, $B\in \mathbb{N}^+$ die Basis):
    $$
    h(k) = \Big( k_1 \cdot B^{n-1} + k_2 \cdot B^{n-2} + ... + k_{n-1} \cdot B^1 + k_{n} \cdot B^0 \Big) \; \% \; N,
    %h(k) = \Big( \sum_{i=1}^n B^i \cdot k_i \Big) \, \% \, N.
    $$
    Vermeiden Sie Überläufe mit dem Horner-Schema. Um Kollisionen zu behandeln sondieren Sie maximal $N$-mal mit folgender rekursiver Funktion ($m$ sei die Anzahl der Sondierungen):
    $$
    \begin{aligned}
    g(m+1) & = ( g(m) + 2m + 1 ) \, \% \, N \\
    g(0) & = h(s). \\
    \end{aligned}
    $$

package de.hsrm.ads; import java.lang.reflect.Array; import java.util.LinkedList; import java.util.List; public class HashMap<T> { public class Entry { String key; T value; public Entry(String key, T value) { this.key = key; this.value = value; } } // the hash table Entry[] table; // size of the hash table int N; // used to hash strings with the Horner schema. int basis; public HashMap(int N, int basis) { table = (Entry[]) Array.newInstance(Entry[].class.getComponentType(), N); this.basis = basis; this.N = N; } public int size() { // FIXME } public double fillRatio() { // FIXME } List<T> toList() { // FIXME } public int hashcode(String key) { // FIXME } public T get(String key) { // FIXME } public boolean add(String key, T value) { // FIXME } }
java
You are not logged in and therefore you cannot submit a solution.