Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C# (http://www.go4expert.com/forums/c-sharp/)
-   -   Probing and Hashing problem (http://www.go4expert.com/forums/probing-hashing-t23254/)

Chipster86 9Sep2010 02:37

Probing and Hashing problem
 
Hi guys, for a University assignment (referral, eek!) I need to hash and sort some data. Which isn't too bad, but then I need to write a program displaying the results in C#. Here's the data I need to work with, and my worked out values:

Hashing function H(Ln) = n%10
Probing function P(Ln) = max (1, n/10)

A1 % 10 = 1
I9 % 10 = 9
R18 % 10 = 8
S19 % 10 = 9
E5 % 10 = 5
O15 % 10 = 5
Y25 % 10 = 5


This tells me that the data should appear in the table as such:


0 -
1 - A1
2 -
3 - Y25

4 - O15

5 - E5

6 -

7 - S19

8 - R19

9 - E5


But, when I code it, the results tell me S19 appears in row 6 as opposed to row 7! Please can you take a look at my code and tell me exactly where I've gone wrong? Thanks.


Code:

using System;
using System.Collections.Generic;
using System.Text;

namespace ReferralAssignment1Question1
{
    public class ReferralHashing
    {
        public struct Referral
        {
            //Define the variables
            public int value1;
            public string withLetter;

            public Referral(int a, string b, string c)
            {
                value1 = a;
                withLetter = b;
            }
        }

        //Input the hashing and probing formulas
        public int hashing(int n)
        {
            int position;

            position = n % 10;
            return position;
        }

        public int probe(int n)
        {
            int position;

            position = Math.Max(1, n / 10);
            return position;
        }

        public int wrap(int h, int p, int[] f)
        {
            int d;

            d = h - p;

            if (d < 0)
            {
                d = 10 + (h - p);
            }
            if (f[d] == 1)
            {
                d = d - p;
                d = wrap(d, p, f);
            }

            return d;
        }

        public static void Main(string[] args)
        {
            //Input the values to be processed
            int key = 0;
            int pos = 0;
            int h;
            int p;
            int[] flag = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            int[] value1 = new int[7] { 1, 9, 18, 19, 5, 15, 25 };
            string[] withLetter = new string[7] {"A1",
                                            "I9",
                                            "R18",
                                            "S19",
                                            "E5",
                                            "O15",
                                            "Y25"};

            Referral[] bl = new Referral[10];
            for (int i = 0; i < 10; i++)
            {
                bl[i] = new Referral();
            }

            ReferralHashing blh = new ReferralHashing();

            for (int i = 0; i < 7; i++)
            {
                key = value1[i];
                h = blh.hashing(key);
                if (flag[h] == 1)
                {
                    p = blh.probe(key);
                    pos = blh.wrap(h, p, flag);
                }
                else
                {
                    pos = h;
                }
                flag[pos] = 1;
                bl[pos].value1 = value1[i];
                bl[pos].withLetter = withLetter[i];

                //Display the results in the console
                Console.WriteLine(bl[pos].withLetter + "'s position in the table: " + pos);
            }
        }
    }
}



All times are GMT +5.5. The time now is 23:57.