简单&紧凑的代码,用于压缩类似DNA的字符串

时间:2013-12-11 18:34:42

标签: javascript php algorithm compression

我的应用程序是多项选择测试,对于每个问题,响应会产生4个字母的字符串“例如”GTAC或ATGC或CATG等。总有24个问题。所以最终的结果就像是

GTAC CATG TACG GACT GTAC CATG TACG GACT GTAC CATG TACG GACT GTAC CATG TACG GACT GTAC CATG TACG GACT GTAC CATG TACG GACT

因此每个响应有4个!= 24种可能性。我可以将每种可能性映射到字母A-X,然后将其缩小为24个字母的字符串,但我相信必须有一个简单的方法将其降低到大约6个字符。

结果将通过http请求发送,因此我需要将其压缩为字母数字字符串,如base64,但不一定是base64。

数据只是上面的字符串,或者我可以把它放在任何格式以匹配你的循环。我正在寻找像10行压缩算法的东西。我将在javascript中压缩并在php中解压缩。

1 个答案:

答案 0 :(得分:1)

你可以达到的最小值是24 lg(24)〜= 111位或14个字节。要将其编码为84个URL可接受的字符,您必须将其扩展为至少18个字符。 24 lg(24)/ lg(84)= 17.2。假设24个答案中的每个答案都可以选择24个,那么就没有办法让它少于18个字符。当然不是六个。

你用24个字符编码它的方案对我来说似乎很好。超过24的18增益似乎不值得任何额外的复杂性。但是,如果你必须......

将答案分成八组,每组三组。对于每组三个,将其视为一个三位数的基数24,其范围为0..13823。这将适合14位。其中八个是14个字节或112个位。

现在一次拉出19位。将有六组,最后一组只有17位。对于每组19,将其编码为三位数的基数81,发出三个URL安全字符。 81 3 > 2 19 。从您最喜欢的84个URL安全字符中挑选81个字符。

现在你有18个字符代表24个答案。除非对你没有告诉我们的答案有其他限制,否则你不能做得更好。