MurmurHash3计算需要哪些参数
时间: 2023-12-01 20:03:58 浏览: 22
MurmurHash3是一种Hash算法,它需要以下参数:
1. 输入数据:需要计算Hash值的数据。
2. 输入数据长度:输入数据的字节数。
3. Seed:种子值,可以用来改变Hash值的输出结果。
4. 输出缓冲区:存储计算出的Hash值的缓冲区。
以上是计算MurmurHash3的基本参数,还有一些可选参数,如指定哈希算法版本、指定哈希输出位数等。
相关问题
murmurhash3计算需要哪些参数
MurmurHash3是一种Hash算法,它需要以下参数:
1. 输入数据:需要计算Hash值的数据。
2. 输入数据长度:输入数据的字节数。
3. Seed:种子值,可以用来改变Hash值的输出结果。
4. 输出缓冲区:存储计算出的Hash值的缓冲区。
以上是计算MurmurHash3的基本参数,还有一些可选参数,如指定哈希算法版本、指定哈希输出位数等。
Murmurhash3的oracle 函数
以下是在Oracle数据库中实现MurmurHash3算法的函数:
```sql
CREATE OR REPLACE FUNCTION murmurhash3_32(input_data VARCHAR2, input_length NUMBER, seed NUMBER)
RETURN NUMBER
IS
c1 NUMBER := 0xcc9e2d51;
c2 NUMBER := 0x1b873593;
r1 NUMBER := 15;
r2 NUMBER := 13;
m NUMBER := 5;
n NUMBER := 0xe6546b64;
hash NUMBER := seed;
length NUMBER := input_length;
data VARCHAR2(4);
i NUMBER := 1;
k NUMBER;
BEGIN
WHILE length >= 4 LOOP
data := SUBSTR(input_data, i, 4);
k := TO_NUMBER(data, 'xxxxxxxx');
k := k * c1;
k := (k << r1) OR (k >> (32 - r1));
k := k * c2;
hash := hash XOR k;
hash := (hash << r2) OR (hash >> (32 - r2));
hash := hash * m + n;
i := i + 4;
length := length - 4;
END LOOP;
IF length > 0 THEN
data := SUBSTR(input_data, i, length);
k := TO_NUMBER(data || '00000000', 'xxxxxxxx');
k := k * c1;
k := (k << r1) OR (k >> (32 - r1));
k := k * c2;
hash := hash XOR k;
END IF;
hash := hash XOR input_length;
hash := hash XOR (hash >> 16);
hash := hash * 0x85ebca6b;
hash := hash XOR (hash >> 13);
hash := hash * 0xc2b2ae35;
hash := hash XOR (hash >> 16);
RETURN hash;
END;
/
```
这个函数实现了MurmurHash3_x86_32版本的算法,输入参数包括待计算哈希值的字符串、字符串长度和种子值。函数在处理输入字符串时,将其分为若干个4字节的块,对每个块进行哈希运算,然后将哈希值合并,得到最终的哈希值。函数返回一个32位无符号整数作为哈希值。