Javascript 简单及;压缩类DNA字符串的压缩代码

Javascript 简单及;压缩类DNA字符串的压缩代码,javascript,php,algorithm,compression,Javascript,Php,Algorithm,Compression,我的应用程序是多项选择题测试,每个问题的答案都是一个4个字母的字符串“eg”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 GTAC CATG TACG GACT 所以有4个=每个响应有24种可能性。我可以将每种可能性映射到一个字母a

我的应用程序是多项选择题测试,每个问题的答案都是一个4个字母的字符串“eg”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 GTAC CATG TACG GACT

所以有4个=每个响应有24种可能性。我可以将每种可能性映射到一个字母a-X,这样可以将其缩减为24个字母大小的字符串,但我相信一定有一种简单的方法可以将其缩减到大约6个字符

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


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

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

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

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

现在一次提取19个比特。将有六组,最后一组只有17位。对于每一组19,将其编码为一个以81为基数的三位数字,发出三个URL安全字符。813 > 219. 从84个URL安全字符中选择您最喜欢的81个字符


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

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

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

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

现在一次提取19个比特。将有六组,最后一组只有17位。对于每一组19,将其编码为一个以81为基数的三位数字,发出三个URL安全字符。813 > 219. 从84个URL安全字符中选择您最喜欢的81个字符



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

Base64会夸大您的数据。当你的数据在[A,T,G,C,]域内时没有理由这样做@mccainz是的,我理解。我的意思是我们可以将它压缩成字母数字字符串,base64是64 legal的一个很好的起点characters@AbraCadaver,我同意。。我认为他将4个代码序列映射到A-X就足够了。@Abracadver它不仅仅是为了http旅行而压缩它。数千人的结果将存储在一个数据库中。@mcainz,我认为他们现在拥有的96个字节足够了,但24个字节会有所改进。Base64将使数据膨胀。当你的数据在[A,T,G,C,]域内时没有理由这样做@mccainz是的,我理解。我的意思是我们可以将它压缩成字母数字字符串,base64是64 legal的一个很好的起点characters@AbraCadaver,我同意。。我认为他将4个代码序列映射到A-X就足够了。@Abracadver它不仅仅是为了http旅行而压缩它。数千人的结果将存储在一个数据库中。@mcainz,我认为他们现在拥有的96个字节足够了,但24个字节将是一个改进。3位和14位的组也正是我想到的。我在code golf上发布了一个类似的东西,结果是18个字符,尽管它只使用了64个字符。我可能会坚持使用24个字母,这对于机器学习集群来说会更好。仅使用64个字符是不可能的。看看这个。这是一个代码高尔夫,一个家伙用64打出18个字符:我不需要看代码。一组64个字符中的18个字符不能对所有可能的输入进行编码,因为可能的输入不止这些。64^18小于24^24的四分之一。这些都不是很难计算的。但是你不能说任何无损压缩算法都是如此吗?比如bmp和png。我知道png使用了一个完全不同的想法,但可能有一些非运行长度的算法做了类似的事情。这家伙称之为双射数。3位和14位的组也正是我想到的。我在code golf上发布了一个类似的东西,结果是18个字符,尽管它只使用了64个字符。我可能会坚持使用24个字母,这对于机器学习集群来说会更好。仅使用64个字符是不可能的。看看这个。这是一个代码高尔夫,一个家伙用64打出18个字符:我不需要看代码。一组64个字符中的18个字符无法对所有可能的输入进行编码,因为