簡體   English   中英

哈希函數在同一輸入上返回隨機值

[英]hash function returns random value on the same input

我正在研究簡單的字符串哈希表。 我以相同的輸入運行程序,在某些情況下,哈希返回一個隨機數。

這是我的代碼:

LIST *table[1000];

void init()
{
    for(i=0;i<1000;i++)   //set table to NULL
        table[i]=NULL;
}

 int hash(char *array)  //hash function         
    {
        int hash=0;
        hash=array[0]+strlen(array)+array[strlen(array-1)];
        hash=hash%1000;
        printf("%d\n",hash);    //print of hash               
        return hash;
    }

void add(char *arr)
{
    char *str = (char *) malloc(sizeof(char) * strlen(arr)+1); //
    strcpy(str,arr);
    int h=0;
    h=hash(str);
    LIST *f=table[h];
    //...... rest of the code
}


int main()
{
  init();
  add("/");
  add("+");
  add("-");
  return 0;
}

And output is:
141
137
139
After rerun output is:
110
106
108

有誰知道這個哈希函數有什么問題嗎?

我猜想, strlen(array-1)是元凶。

您不知道array - 1的字符是什么,因此有時可能返回0 有時它可能返回strlen(array) + 1

結果,您將hash array[0]添加到哈希值,有時會在字符串array[strlen(array) + 1]之外添加一個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM