C++ 寻找更好的编码和压缩数字的方法

C++ 寻找更好的编码和压缩数字的方法,c++,encoding,numbers,C++,Encoding,Numbers,我有13个数字,从一组13种类型的数据中抽取,每种类型有4项,总共52项。我们可以将项目编号为1,2,3,4,5,6,7,8,9,10,11,12,13,因此将有4个“1”,4个“2”。。。一组中有4“13”。从集合中抽取的13个数字是随机的。整个过程重复了数百万次甚至更多,所以我需要一种有效的方法来存储13个数字。我想用某种编码方法把13个整数压缩成比特。例如,我计算有多少个“1”,“2”。。。首先,用2位对每个项目的计数进行编码,然后再使用1位来表示是否绘制了项目。因此,对于每个项目,我们需

我有13个数字,从一组13种类型的数据中抽取,每种类型有4项,总共52项。我们可以将项目编号为1,2,3,4,5,6,7,8,9,10,11,12,13,因此将有4个“1”,4个“2”。。。一组中有4“13”。从集合中抽取的13个数字是随机的。整个过程重复了数百万次甚至更多,所以我需要一种有效的方法来存储13个数字。我想用某种编码方法把13个整数压缩成比特。例如,我计算有多少个“1”,“2”。。。首先,用2位对每个项目的计数进行编码,然后再使用1位来表示是否绘制了项目。因此,对于每个项目,我们需要3位,总共13个项目成本39位。它确实需要8个字节来执行此操作。但这仍然太多了,因为我说的是数百万或数十亿次的计算,而且每一组都必须在以后存储到文件中。因此,如果我使用8个字节,if仍然会要求80GB的数据。但是,如果我可以将其减少一半,我将节省40GB。你知道如何更有效地压缩这个结构吗?我还想使用5字节代替,但我需要照顾不同类型的数字(一个int +一个字符),有没有任何C++库可以轻松地为我编写编码/压缩?
谢谢

谷歌的协议缓冲区可以存储位更少的整数,具体取决于它的值。这可能会大大减少您的存储空间。看

实际协议如下所述:


至于压缩,你有没有研究过如何处理你的数据?

也许比你想要的要复杂一点,但看看吧

试着用谷歌搜索LV77和LVZ压缩

在你的方案中,由8字节64位表示的39位每一手都会浪费25位,大约40%

如果您将手批处理在一起,您可以在不浪费这些部分的情况下表示它们


39和64没有公因数,因此最低公倍数只是39*64=2496位或312字节的倍数。这有64只手,大约是您当前计划的60%。

正在试图找出如何击败赌场,嗯?:-)数字的顺序重要吗?否则,您似乎可以轻松地将项目存储为长文件中的位,其中每个位表示是否绘制了特定项目。对于其中的100万,您需要8MB的存储空间。10亿,你是1亿还是100万?对于前者,您只需要8GB的存储空间。如果使用7个字节而不是8个字节的长度,这可以减少12.5%。对于进一步的压缩,数据是否有任何结构或是纯粹的随机性?它不是用于家庭作业,也不是用于破坏赌场的项目。我正在验证一个古老的中国象棋。我正试图找出开始比赛的最佳方式。顺便说一句,数字的顺序并不重要。