【问题标题】:How is this kind of algorithm called?这种算法怎么叫?
【发布时间】: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


【解决方案1】:

谷歌搜索“最短的唯一前缀”给了我这个, How to compute shortest unique prefixes of a set of strings?,这让我 https://en.wikipedia.org/wiki/Patricia_trie,这似乎是你要找的?

【讨论】:

  • 我不明白这有什么关系。这不只是为了紧凑存储多个字符串吗?它不会告诉你最短的唯一字符串,是吗?
  • ...你的答案是什么?算法叫什么名字?
  • 该算法似乎没有名称 AFAIK(除非您计算用于检索的 PATRICIA)。如果您找到它的名称,请随时在此处分享。
  • 我不知道叫什么名字。我只是想弄清楚你的答案是什么,因为它得到了支持。
  • @source.rar 感谢您的回答。这就是我一直在寻找的。 :)
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多