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
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);
}
}
}