【发布时间】:2013-05-29 01:17:50
【问题描述】:
用例:客户端需要通过 HTTP 发送一个巨大的字符串。服务器回复字符串是否包含一些子字符串。然而,巨大的字符串是巨大的。结果,这个系统效率很低。而且,巨大的字符串包含一些敏感信息,所以这真的很不安全。
是否有某种伪散列机制以某种方式将一个大字符串汇总为某个数字,这个大字符串的所有子字符串都会散列到相同的数字,但非子字符串很可能不会散列到这个大字符串?
【问题讨论】:
-
我不知道如何证明,但我发现这样的事情是不可能的。首先,考虑“一个巨大字符串的所有子字符串”可能包含“a”、“b”、“c”等。
-
为什么客户端仍然发送巨大的字符串?客户端自己不能搜索子串吗?
-
嗯。自我证明:假设存在这样的功能。然后可以将其改写为所有字符串哈希到与字符串的任何 superstring 相同的数字。假设“”哈希为
0。通过这个论点,所有字符串都哈希到0,这与它可以用作子字符串的确定器是矛盾的。 -
顺便说一句:对于每个长度为 N 的字符串,有 N(N-1) 个可能的子字符串。
-
@wildplasser:这不正确。子字符串可以被认为是在字符串中放置两个标记,一个指定开始,另一个指定结束。标记有
n + 1可能的位置,我们必须从中选择两个。但是,这忽略了计算空字符串。因此,有1 + (n + 1 choose 2) = 1 + n(n + 1) / 2可能的子字符串。但是,这种推理假设重复的子字符串被计算多次,每次出现一次。