这种算法怎么称呼?

时间:2014-05-30 17:25:10

标签: javascript algorithm

我正在寻找某种算法的名称,我认为应该有一个名称。

该算法可以找出最短的字符串,以便使其与其他字符串在唯一的字符串中独一无二。

就像在JS中一样,给出一个像这样的数组的函数:

[ '1c625b142483629db0a8063cfe5cd418e897154c',
  '28d9bf0ecac10311507b339e5d1324412d25cc3e',
  '4f3a202a34016cbdf1fc05c3efaaa06f72d3faa3',
  '2080d7f2b572196343695a7c60a6f3c6b747246c',
  '1903250de6c2a59e6c53dfa907188f2a7204ce76',
  'f8227a5a0e8eeea2fd7b47588d95d05755d0eb5b',
  '86aed9bd91eee88bb17382fe278a5fdc6f16d583' ]

会返回类似的内容:

[ '1c',
  '28',
  '4',
  '20',
  '19',
  'f',
  '8' ]

注意它返回的所有字符串是长哈希中的第一个字符,只是为了只返回使它们彼此不同的必要条件而缩短。

我将使用它来将哈希值与值匹配。我正在制作一个todo应用程序,我决定使用散列来编辑和/或删除值。所以用户会通过它的散列来引用todo项,但是我不想给用户一个超长散列,只是系统需要知道用户指的是哪一个。

那么如果它有一个名字,那么这种算法会被调用什么呢?

任何帮助或线索都表示赞赏。 :)

编辑:

似乎有关于我将如何使用它的讨论。我只想澄清一点,我不会用这个来存储东西。完整哈希将用作todo任务的密钥,缩短的哈希(a.k.a.最短唯一前缀)仅用于UI。 @ source.rar和@Paul回答了我的问题,这就是名称,我现在正在研究这些实现。很快就会接受回答......

编辑2:

好的。作为一名JS新手,我花费了大量的时间试图自己解决这个问题而不能,最后我的朋友出现并给了我以下解决方案:https://gist.github.com/BruceCaldwell/70e53a456fd858bb03cc

然而,他确实说这不完美,可能会做一些重构,但这取决于我。 ;)

1 个答案:

答案 0 :(得分:4)

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