【发布时间】:2016-07-24 02:55:49
【问题描述】:
我希望能够计算出实现完全唯一性所需的最短子字符串的长度。
假设我有一个包含 32 个字符的 UUID 的不同长度列表,但我想要实现的是在引用期间将它们缩短到只有在它们的集合中实现唯一性所需的长度。例如,如果我有以下一组 UUID(插入管道以说明答案)...
428|07082e1f445e79501bebfa87396af
723|0785bffaf4747865c202dd0924c7f
b65|634be909d4e5590aa0cdc97251eef
3c4|d94c683624d75a273e3186ec65b78
09e|bd42af0404bcf90413e11c5b40fbb
011|004743d65466dae8a9a6bc814ef4b
1f1|889e04e3a453fbf57521de0a70b60
1ac|44707af8d4681875171ad47c61037
42f|7a6236deb4a9ead32ab2e816d73a3
83a|fe22086064eec87704127622b8165
我只需要前 三个 个字符就可以达到与使用完整的 32 个字符串相同的唯一性级别。
我很好奇是否有一个公式可以达到这个值。我知道我可以把它放在几个嵌套循环中,但我想知道是否有更优雅或编程的方式来实现这一点。
编辑:为了清楚起见,管道只是为了说明我只需 3 个字符就可以实现唯一性。公式/方法的结果应该是一个长度相等的数组,只有从给定集合派生的最短字符串,在这种情况下,只有前三个字符。想象一下,我想在 URL 中使用这些,并且我不能有任何歧义,但仍然希望能够引用相同的记录,就好像我在每种情况下都使用了完整的字符串一样。
EDIT2:实际上……我想,不需要结果数组,只需要一个整数,即字符所需的最小长度。
【问题讨论】:
-
不能正确解释问题。管道字符左侧的字符是如何派生的?管道符左边的字符是从管道符右边的字符派生而来的吗?
-
@guest271314 检查例如
428如果您查看倒数第二个,您会发现它以42开头,因此所有值仅在您使用3 个字符时才是唯一的。 .. 管道仅显示当值开始唯一(注意我不是操作) -
@FirstOne 仍然没有关注
428的来源? -
@guest271314 我认为唯一性应该在集合中的每个 item 之间,而不是项目中的每个字符之间(您可以看到那里有一个
011) ...不过,操作人员应该确认这一点。 -
@FirstOne 订单不重要。
标签: javascript php mysql formula array-formulas