【发布时间】:2014-05-30 17:25:10
【问题描述】:
我正在寻找某种算法的名称,我认为它应该有一个名称。
该算法会找出可能的最短字符串,以使其与其他字符串具有可识别的唯一性。
就像,在 JS 中,给定这样一个数组的函数:
[ '1c625b142483629db0a8063cfe5cd418e897154c',
'28d9bf0ecac10311507b339e5d1324412d25cc3e',
'4f3a202a34016cbdf1fc05c3efaaa06f72d3faa3',
'2080d7f2b572196343695a7c60a6f3c6b747246c',
'1903250de6c2a59e6c53dfa907188f2a7204ce76',
'f8227a5a0e8eeea2fd7b47588d95d05755d0eb5b',
'86aed9bd91eee88bb17382fe278a5fdc6f16d583' ]
会返回类似:
[ '1c',
'28',
'4',
'20',
'19',
'f',
'8' ]
注意它返回的所有字符串都是长散列中的第一个字符,只是缩短了以便只返回使它们彼此不同所必需的内容。
我将使用它来匹配哈希值。我正在制作一个待办事项应用程序,我决定使用散列来编辑和/或删除值。所以用户会通过它的哈希来引用待办事项,但我不想给用户一个超长的哈希,只有系统需要知道用户指的是哪个。
如果这种算法确实有名字,它会被称为什么?
感谢任何帮助或线索。 :)
编辑:
似乎有人在讨论我将如何使用它。我只是想澄清一下,我不会用它来存储东西。完整的哈希将用作 todo 任务的键,缩短的哈希(也称为最短的唯一前缀)仅用于 UI。 @source.rar 和 @Paul 已经回答了我的问题,这就是名称,我现在正在研究实现。很快就会接受答案...
编辑 2:
好的。作为一个 JS 新手,我花了很多时间试图自己解决这个问题,但最终我的朋友过来给了我以下解决方案:https://gist.github.com/BruceCaldwell/70e53a456fd858bb03cc
然而,他确实说这并不完美,可能需要进行一些重构,但这取决于我自己的判断。 ;)
【问题讨论】:
-
混淆?加密?
-
对我来说这只是某种散列。
-
您可能希望根据预期输出来修正顺序。让它们不匹配会使问题变得混乱。
-
这几乎是(但不完全是)“最短的唯一子串”,出现在基因组处理中。谷歌搜索显示了很多命中 - 也许可以根据您的需求进行调整?
-
这样做的目的是什么?这是为了优化性能吗?
标签: javascript algorithm