字符串散列的平等和字符串反向的散列

时间:2018-03-15 12:23:16

标签: function hash

是否可以以这样的方式编写散列函数:字符串的散列等于相同字符串的散列但反转? e.g。

hash(" life")== hash(" efil")

hash(" life")== hash(" life")

1 个答案:

答案 0 :(得分:-1)

它很可能会破坏它作为一个好的统一哈希函数的目的,但可以肯定的是,你可以定义这样的函数。将任意大小的数据映射到固定大小的数据的任何东西都是散列函数。

你可以,例如在将字符串传递给其他散列函数之前对输入中的字符进行排序,例如Python:

def myhash2(s):
    return hash(''.join(sorted([s,''.join(reversed(s))])))

from itertools import permutations
for r in sorted(((myhash2(s),s) for s in (''.join(p) for p in permutations('life')))):
    print r

返回True。

另一个选项,如评论中所述:

(-8040601677570703892, 'efil')
(-8040601677570703892, 'life')
(-7809799233501675124, 'feli')
(-7809799233501675124, 'ilef')
(-7087163641342373728, 'feil')
(-7087163641342373728, 'lief')
(-3309334617147859636, 'ifel')
(-3309334617147859636, 'lefi')
(-1342443318618769016, 'flei')
(-1342443318618769016, 'ielf')
(-1101501415991241164, 'elif')
(-1101501415991241164, 'file')
(-94298563527211992, 'elfi')
(-94298563527211992, 'ifle')
(1475311783909651192, 'efli')
(1475311783909651192, 'ilfe')
(1616670693919962800, 'eifl')
(1616670693919962800, 'lfie')
(1783747732969301136, 'iefl')
(1783747732969301136, 'lfei')
(1880557847288313568, 'fiel')
(1880557847288313568, 'leif')
(4933084291912123320, 'eilf')
(4933084291912123320, 'flie')

返回

let p1 = context.document.body.insertParagraph(data[i],"end");
p1.style = "Ex-1";

let table = context.document.body.insertTable(2,2,"end",json_data);
table.style = 'Table-Style';

我仍然喜欢@deceze最佳评论/解决方案......