| ■ 順列型の最小完全ハッシュ関数 |
/* 階乗値テーブル */
int FACTOR[5] = {
24, 6, 2, 1, 1
};
|
/* 順列型の最小完全ハッシュ関数 */
int ChangeNumber(int table[])
{
int i, j, hash = 0, work[SIZE-1];
for (i=0; i < SIZE-1; i++)
work[i] = table[i];
for (i=0; i < SIZE-1; i++) {
hash += work[i] * FACTOR[i];
for (j=i+1; j < SIZE-1; j++)
if (work[i] < work[j]) work[j]--;
}
return hash;
}
|
| ■ 組合せ型の最小完全ハッシュ関数 |
/* 組合せ型の最小完全ハッシュ関数 */
int ChangeNumber(int table[])
{
int i, n, r, hash = 0;
n = SIZE - 1;
r = 2;
for (i=0; n >= r && r > 0; i++,n--)
if (table[i]) hash += PASCAL[n][r--];
retuen hash;
}
|
for (i=0; i < SIZE; i++,n--)
|
/* nCr値テーブル */
int PASCAL[5][3] = {
1, 0, 0,
1, 1, 0,
1, 2, 1,
1, 3, 3,
1, 4, 6
};
|