Advertisement
Guest User

Untitled

a guest
May 27th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.93 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. public class ZeichenkettenHashfunktion {
  5.  
  6.     public ZeichenkettenHashfunktion() {
  7.     }
  8.     /**
  9.      * Berechnet den Hashwert fuer einen String mit der Polynomiellen Hashfunktion
  10.      * @param eingabe String, dessen Hashwert berechnet werden soll.
  11.      * @param a Parameter zur Hashwertberechnung
  12.      * @return Hashwert des Strings.
  13.      */
  14.     public int berechneHashwert(String eingabe, int a) {
  15.         if(a >17020) {
  16.             throw new IllegalArgumentException("a darf maximal |T|-1 sein");
  17.         }
  18.         if(eingabe == null) {
  19.             throw new IllegalArgumentException("eingabe darf nicht null sein");
  20.         }
  21.         char[] eingabeChar = new char[eingabe.length()];
  22.  
  23.         for(int i = 0; i<eingabe.length();i++) {
  24.             eingabeChar[i] = eingabe.charAt(i);
  25.         }
  26.         int hashwert = eingabeChar[eingabeChar.length - 1];
  27.         for (int i = eingabeChar.length - 2; i >= 0; i--){
  28.  
  29.             hashwert = (((hashwert %17021) * (a %17021)%17021) + (eingabeChar[i] % 17021))%17021;
  30.         }  
  31.  
  32.  
  33.  
  34.  
  35.         return hashwert;
  36.     }
  37.     /**
  38.      *
  39.      * @param a Parameter fuer die Hashfunktion.
  40.      * @throws FileNotFoundException Falls words.txt nicht gefunden wird.
  41.      */
  42.     protected void berechneKollisionen(int a) throws FileNotFoundException {
  43.         Scanner s = new Scanner(new File("words.txt"));
  44.         int kollisionen = 0;
  45.         boolean[] table = new boolean[17021];
  46.         int eintraege = 0;
  47.  
  48.         //Scanner durchlaufen lasse, falls Array an der Stelle des Hashs leer ist, einfügen.
  49.         //Falls vorhanden, Kollison++
  50.         while(s.hasNext()) {
  51.             String next = s.next();
  52.             eintraege++;
  53.  
  54.             int hash = this.berechneHashwert(next, a);
  55.             //  System.out.println("next: " + next + " Hash: " + hash);
  56.             if(table[hash] == false) {
  57.                 table[hash] = true;            
  58.             } else {
  59.                 kollisionen++;
  60.             }
  61.         }
  62.  
  63.         System.out.println("Es gibt " + kollisionen + " Kollisionen für "
  64.                 + "a = "+a+ " und " + eintraege + " Einträge in words.txt");
  65.         s.close();
  66.  
  67.     }
  68.  
  69.  
  70.  
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement