【发布时间】:2019-12-09 07:06:01
【问题描述】:
假设我想存储一个长度为 64 个字符的 ID,它会从一组 n 字符中选择其字符(例如,在此示例中为 26 小写字符,但可以是任何数字 n)。问题是(a)我可以编码的最短位 b 是多少,以及(b)我如何使用该位数 b 来处理任何长度为 n 的字符序列。具体来说,如果我有一个 26 个字符的字母表 (n),并且我想要一个 64 个字符长的字符串 (m),你可以将它压缩成多少位?假设集合26^64 中可能有任何字符序列。更一般地说,在集合n^m 中,可以采取什么方法来缩小表示该数字所需的位数?我在想象像VLQ 这样的魔法。在这个问题中,我更喜欢让每个数字都使用相同位数的方法,但在以后的问题中,我可能会修改这个问题并根据数字使编码成为任意长度。但是对于这个问题,任何由字母表 a-z 组成的 64 字符 ID,您可以将其编码多短以便每个缩短的字符串/位序列都是相同的位数?
例如:
abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd
a-z 集合中的 64 个字符。我可以将其编码为:
16abcd
它的意思是16 x abcd。但这仅适用于重复的 4 字符序列。 (只是一个快速编造的例子)。对于任意序列,例如:
wckdrwncwkdcwjdncjdjwcjwjncdjwwckdrwncwkdcwjdncjdjwcjwjncdjwkwlp
如何将其缩短为更少的位数?这样每个 64 个字符的序列都会缩短到相同的位数。如果有帮助,假设要从中选择字符的字母短 比 ID 的字符大小(在本例中为 64)。但是很高兴知道如何为比序列长的字符集执行此操作(所以 52 个字符的字母,长度为 16 个字符,键入东西)。理想情况下,解释会使用 JavaScript 或类似的东西来演示:) 我不知道该怎么做。
【问题讨论】:
-
64 个小写字符可以转换为适合 38 个字节(每次),这是您的意思吗?这只是一个基本的转换
-
我不确定,我得看看,听起来好像可以!
标签: javascript string bit-manipulation