哈希函数何时彼此正交?

时间:2014-02-11 17:57:22

标签: java hash orthogonal

哈希函数何时彼此正交?

你能用Java提供两个彼此正交的哈希函数的例子吗?

2 个答案:

答案 0 :(得分:2)

从(a Google search result paper

(正交散列函数)两个散列函数h1和h2是正交的,     如果对于所有状态s,s'∈S与h1(s)= h1(s')和h2(s)= h2(s')我们有     s = s'。

S上。 Edelkamp,GPU上的状态空间探索的完美哈希。

在英语中,如果传递给两个不同的正交散列函数的任何两个给定值导致相同的输出,那么这些输入必须是相同的值。

示例:

Let h and g be hash functions.
Let b be a currently unknown value.
h(0) = h(b) = 5
g(0) = g(b) = 4
if h and g are orthogonal, b MUST equal 0.

Thus for any values given to h that result in a unique result,
If those same values are given to g, they must also result in a unique result,
  IF they are orthogonal hash functions.

伪代码:

// Assume no wraparound will ever occur due to overflow.
HashFunc h = x -> x + 1;
HashFunc g = y -> y + 2;
h(0) = 1 // No other input value results in --> 1
g(0) = 2 // No other input value results in --> 2
// These must have been orthogonal hash functions.

// Now for some non-orthogonal hash functions:
// Let the domain be integers only.
HashFunc j = x -> ceil(abs(x / 2));
HashFunc k = x -> ceil(sqrt(x));
j(0) = 0 // Unique result
k(0) = 0 // Unique result
j(1) = j(2) = 1
k(1) = 1 != k(2) = 2 
// k(1) results in a unique value, but it isn't unique for j.
// These cannot be orthogonal hash functions.

答案 1 :(得分:2)

enter image description here

来自http://www.aaai.org/ocs/index.php/ICAPS/ICAPS10/paper/download/1439/1529

获得Google:define "orthogonal hash"(第二击)。

翻译:

如果你有“完美的散列函数”,那么h(s) == h(s') iff s == s'

如果您有“任意两个散列函数”,其值为ss'同时具有

h1(s) == h1(s') and h2(s) == h2(s')

如果上述条件适用于s == s'

,则这些函数称为正交

这实际上是一个非常棘手的概念。如果h1和h2都是完美的散列函数,那么它们将根据上面的定义自动地进行正交(如果我理解的话)。但是你可以拥有符合上述定义的不完美的函数。

示例:在状态空间[0, 9]中,有两个函数

h1(int x) return x % 5;

h2(int x) return x % 7;

将是正交的:

x  h1  h2
0   0   0
1   1   1 
2   2   2
3   3   3
4   4   4
5   0   5
6   1   6
7   2   0
8   3   1
9   4   2

在上文中,对于s分开或0分开的值5对,h1(s)= h1(s')。 对于h1,距离为07

两个条件均为真的唯一对是距离为0的那些 - 因此仅在s1 == s2时才有。因此,这些是正交(尽管不完美)散列函数。

我认为,这可以回答你问题的两个部分。