=数据压缩算法=符号已知,数值排列组合可知=
使用带有位数的方式来实现,比如第一位二进制0,换算为十进制的1;比如第一位二进制3,换算为十进制的4;第二位二进制0,换算为十进制的5;第二位的二进制6,换算为十进制的4;
第n位;是二进制0时=2n+1;是二进制1时=2n+2;
1 3 4
2 5 6
3 7 8
1001000100001换算下来,就是:
1=4
0=5
0=7
1=10
0=11
0=13
0=15
1=18
0=19
0=21
0=23
0=25
1=26
4a5b7c(10)a(11)b(13)c(15)a(18)b(19)c(21)a(23)b(25)c(26)
当a=+加法,b=-减法,c=*乘法时:
4+5-7*(10)+(11)-(13)*(15)+(18)-(19)*(21)+(23)-(25)*(26)=-1253(优先计算乘法)
(4+5-7)*(10+11-13)*(15+18-19)*(21+23-25)*(26)= 110656(最后计算乘法,先算加减法)
当a=+加法,b=*乘法,c=-减法时
4+5*7-(10)+(11)*(13)-(15)+(18)*(19)-(21)+(23)*(25)-(26)= 1027(优先计算乘法)
(4+5)*(7-10+11)*(13-15+18)*(19-21+23)*(25-26)=-24192(最后计算乘法,先算加减法)
当a=*乘法,b=+加法,c=-减法时
4*5+7-(10)*(11)+(13)-(15)*(18)+(19)-(21)*(23)+(25)-(26)=-805(优先计算乘法)
4*(5+7-10)*(11+13-15)*(18+19-21)*(23+25-26)= 25344(最后计算乘法,先算加减法)
当a=*乘法,b=-减法,c=+加法时
4*5-7+(10)*(11)-(13)+(15)*(18)-(19)+(21)*(23)-(25)+(26)= 845(优先计算乘法)
4*(5-7+10)*(11-13+15)*(18-19+21)*(23-25+26)= 199680(最后计算乘法,先算加减法)
当a=-减法,b=+加法,c=*乘法时
4-5+7*(10)-(11)+(13)*(15)-(18)+(19)*(21)-(23)+(25)*(26)= 1261(优先计算乘法)
(4-5+7)*(10-11+13)*(15-18+19)*(21-23+25)*(26)= 688896(最后计算乘法,先算加减法)
当a=-减法,b=*乘法,c=+加法时
4-5*7+(10)-(11)*(13)+(15)-(18)*(19)+(21)-(23)*(25)+(26)=-1019(优先计算乘法)
(4-5)*(7+10-11)*(13+15-18)*(19+21-23)*(25+26)=-52020(最后计算乘法,先算加减法)
当然了,数据压缩,可最少都是1gb长度的源数据,为了避免篇幅过长,以及作者换算到浪费时间,这里就只用少量数据来做对比,也就是说,如果是1zb的数据,那么就有意思了,(2n+1)和(2n+2)看起来不大,如果是2^10=1024;2^20=1,048,576;2^50=1,125,899,906,842,624;以此类推,当n取值足够大时,那么想象一下1,125,899,906,842,624*1,125,899,906,842,625(优先计算乘法);再想象一下(1,125,899,906,842,624+1,125,899,906,842,625-1,125,899,906,842,627)*(1,125,899,906,842,628+1,125,899,906,842,629-1,125,899,906,842,630)= 1.26765060022823e30
然后在以此类推,当 n个1.???????e??????相乘的时候,结果也是足够大的,这个时候要怎么办呢?
限制n的最大值,把数据分段,从而避免n取值过大,导致没必要的运算消耗。
比如限制n小于50,那么就是每49位为一个分段;以此类推。
分段的结果,就是必须要按照分段来分别得出结果,避免分段占用(也就是a分段中,出现过33,而b分段中也出现过33,就导致了分段占用)(当然了,实际使用时,往往需要进行优化,作者这创作的内容,完全是第一代版本,自然语言版本)(众所周知,第一代版本,往往都是最不稳定的,特别是无中生有的算法什么的,尤其以没有发展出v1.539972.335377.885662版本就发布的作者为甚)。
算法感觉还能继续改进。