Hashing

Status
Nicht offen für weitere Antworten.
M

Marc9989

Gast
Abend Alle!

Ich hab ein kleines Problem. Ich hab das folgende Programm geschieben und muss noch etwas ändern wo ich stecken bleibe:
Ich muss das Programm HashTest.java so ändern, dass es ein offenes Hashingverfahren mit quadratischer Sondierung verwendet wird. Bitte um eure Hilfe und bedanke mich schonmal im Voraus.

Gruß
Marc



Code:
import javax.swing.*;
import java.io.*;
public class HashTest {
 
  static int[] frequency;
  static int maxCount = 0;    
  static BufferedReader in;

   public static void main(String args[])throws IOException {
       int tableSize;
       int cellCount[];
       String s;
       in = new BufferedReader(new java.io.FileReader("words.txt")); 

       s = JOptionPane.showInputDialog("Enter the table size");
       if (s.equals(null) || s.equals(""))
          s = "50000";
       tableSize = Integer.parseInt(s);
       cellCount = new int[tableSize];
       frequency = new int[0];
       hashWords(cellCount, tableSize);
       calculateFrequencies(cellCount, tableSize);
       printFrequencies(tableSize);
       System.exit(0);
   }
   

   public static void hashWords(
             int cellCount[], int tableSize) throws IOException {

      String s;
      String c;
      int h;
      int q;
      int z;
      int count=0;

       /*String s;
      int h;
      int count=0;


      while ((s=in.readLine())!=null) {
         h = hash(s, tableSize);
         cellCount[h]++;
         count++; */
           
      while ((s=in.readLine())!=null) {

         z = Integer.parseInt(s);
         q = (((-1)^z)*((z/2)^2));
         c = Integer.toString(q);
         h = hash(c, tableSize);

         cellCount[h]++;
         count++;
      if (cellCount[h]>maxCount) maxCount = cellCount[h];
      }
      System.out.println("Number of words: " + count);
      System.out.println("Load factor: " + ((float)count)/tableSize);
   }
   
   /**
    * Hash function for converting strings to hash numbers
    * @param key        The value to be hashed
    * @param tableSize  The size of the table
    */
   public final static int hash(String key, int tableSize)
   {
      int hashVal = 0;
      for (int i = 0; i < key.length(); i++)
         hashVal = 31 * hashVal + key.charAt(i);
         
      hashVal %= tableSize;
      if (hashVal < 0)
         hashVal += tableSize;
      return hashVal;   
   }
   
   /**
    * creates a frequency table from the cell counts
    * @param cellCount[]  array of cellCounts
    * @param tableSize Size of table
    */
   public static void calculateFrequencies(
              int cellCount[], int tableSize){
      int i;
      frequency = new int[maxCount+1];    
    for (i = 0; i < tableSize; i++)
         frequency[cellCount[i]]++;
   }
   
   /**
    * prints the frequency table starting with the highest count
    * @param tableSize Size of table
    */
   public static void printFrequencies(int tableSize) {
      int i;
      System.out.println("Table size:  " + tableSize);
      System.out.println();
      System.out.println("Count\tfrequency\t%");
      for (i = frequency.length-1; i >= 0; i--) {
         if (frequency[i] > 0)
            System.out.println(i + "\t\t" + frequency[i]
                      + "\t\t" + (100.0 * frequency[i])/tableSize);
      }
   }
   
   
}
 
M

Marc8898

Gast
Die Datei: words.txt ist einfach eine Sammlung von wörtern die alphabetisch geordnet sind
 
G

Guest

Gast
Super hilfsbereit ist doch egal was es ist.... wenn ich könnte würde ich trotzdem helfen......
 

Brainiac

Bekanntes Mitglied
Wenn Du konkrete Fragen mit konkreten Problemen oder Fehlermeldungen stellst, gibts hier auch super schnell nen Antwort. Aber Fragen nach dem Motto ich brauch, macht ihr mal, kommen halt immer etwas komisch an.

Also fang einfach an dich mit dem Problem auseinanderzusetzen und stell dann konkrete Fragen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben