考虑这个question on testing string rotation,我想知道:是否存在诸如循环/循环哈希函数之类的东西?例如。
h(abcdef) = h(bcdefa) = h(cdefab) etc
它的用途包括可伸缩的算法,该算法可以相互检查n个字符串,以查看其中的一些是其他旋转。
我想哈希的本质是提取特定于订单但不特定于位置的信息。也许找到确定性的“第一位置”,旋转到它并散列结果的东西?
一切似乎都是合理的,但目前略微超出了我的理解;它必须已经在那里...
最佳答案
我会同意你的确定性“第一位置”-找到“最小”字符;如果它出现两次,则使用下一个字符作为平局决胜者(等)。然后,您可以旋转到“规范”位置,并以常规方式对其进行哈希处理。如果决胜局在整个字符串过程中运行,那么您将获得一个字符串,该字符串本身就是旋转的(如果您明白我的意思),那么选择哪个作为“第一”也没关系。
所以:
"abcdef" => hash("abcdef")
"defabc" => hash("abcdef")
"abaac" => hash("aacab") (tie-break between aa, ac and ab)
"cabcab" => hash("abcabc") (it doesn't matter which "a" comes first!)