Advertisement
Shailrshah

Linear Hashing (Dynamic Hashing)

Oct 16th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.52 KB | None | 0 0
  1. class LHash{
  2.     static void printA(int a[][], int count[], int rFilled){
  3.         int j, i;
  4.         for(i=0; i <= rFilled; i++){
  5.                 System.out.print("Bucket "+i+ ": ");
  6.                 for(j=0; j < count[i]; j++)
  7.                     System.out.print("\t"+a[i][j]+" ");
  8.                 System.out.println();
  9.             }
  10.             System.out.println();
  11.     }
  12.     public static void main(String args[]){
  13.         int[][] a = new int[6][12];
  14.         int[] count = new int[6];
  15.         int[] data = {1, 7, 3, 8, 12, 4, 11, 2, 10, 13, 14, 9};
  16.         int s = 0, bSize = 2, n = 3;
  17.         int i, j, temp, c, b, rFilled=0;
  18.         for(i = 0; i < 12; i++){
  19.             if(s>n){
  20.                 s=0;
  21.                 n*=2;
  22.                 System.out.println("The hash function is now h(k)=k mod "+n);
  23.             }
  24.             if(data[i]%n>=s){
  25.                 System.out.println("Inserting "+data[i]+" ("+data[i]+" mod "+n+" = "+data[i]%n+")");
  26.                 a[data[i]%n][count[data[i]%n]++]=data[i];
  27.                 if(data[i]%n > rFilled) rFilled=data[i]%n;
  28.             }
  29.             else{
  30.                 System.out.println("Inserting "+data[i]+" ("+data[i]+" mod "+2*n+" = "+data[i]%(2*n)+")");
  31.                 a[data[i]%(2*n)][count[data[i]%(2*n)]++]=data[i];
  32.                 if(data[i]%(2*n) > rFilled) rFilled=data[i]%(2*n);
  33.             }
  34.             printA(a, count, rFilled);
  35.             if(count[data[i]%n] > bSize){
  36.                 System.out.println("Overflow! at Bucket "+data[i]%n);
  37.                 int counter=count[s];
  38.                 count[s] = 0;
  39.                 for(j = 0; j < counter; j++){
  40.                     temp = a[s][j];
  41.                     a[s][j]=0;
  42.                     a[temp%(2*n)][count[temp%(2*n)]++] = temp;
  43.                     if(temp%(2*n) > rFilled) rFilled=temp%(2*n);
  44.                 }
  45.                 s++;
  46.                 printA(a, count, rFilled);
  47.             }
  48.         }
  49.         System.out.println("All insertions complete.");
  50.     }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement