use*_*205 5 lossless-compression large-data
我想创建一个具有行星大小的人工智能环境.它将模拟一个非常大的世界的地下生活.根据维基百科,地球的表面积为510,072,000 Km ^ 2,我想创建一个相似比例的方块,可能更大.我会在每个位上存储一米,其中0表示污垢,1表示污垢墙.
让我们首先计算如何存储这个方块的单行.一行是510072000000m,每个字节可以存储8米,所以一行是59.38GB,整个世界是3.44PB.而且我想在每平方米上添加至少水和熔岩,这会使结果乘以2.
我需要使用无损数据压缩算法压缩此信息.我首先用7zip尝试了一种非常直接的方法,我尝试了一个较小的世界,其中一行是6375B.理论上,世界应该是6375 ^ 2B = 38.76MB,但是当我尝试它时我得到一个155MB的文件,我不知道为什么会出现这种差异.但是当我用7Zip压缩它时,我得到一个40.1MB的文件.这是一个巨大的差异,有了这个比例,我会将我的3.44PB世界文件转换为912.21GB文件.
我的第一个想法是,为什么我有这么大的文件,当数学告诉我它应该更小?也许问题是代码,也许问题是我在数学上有错误.代码如下:(C#)
// 510072000000m each line = 63759000000B
const long SIZE = 6375;
// Create the new, empty data file.
string fileName = tbFile.Text;
FileStream fs = new FileStream(fileName, FileMode.Create);
// Create the writer for data.
BinaryWriter w = new BinaryWriter(fs);
// Use random numbers to fill the data
Random random = new Random();
// Write data to the file.
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
w.Write(random.Next(0,256));
}
}
w.Close();
fs.Close();
Run Code Online (Sandbox Code Playgroud)
数学是如此基本,如果我做错了什么我就看不到它.
你能给我任何建议吗?只关注数据压缩,人工智能不是问题,因为我有进化算法的经验,而且世界不需要是实时的,它可能需要它所需的所有时间.
谢谢大家的时间.
@Scharron 已经正确回答了你的问题的具体细节,但我认为还有一个更根本的问题:
理论上不可能显着压缩随机数据。事实上,当给定随机输入数据时,大多数压缩算法都会增加存储大小。也许你的 AI 算法的细节会引入一些无法压缩的模式,但如果你从真正随机的输入数据开始,你将必须存储这些多个 PB。
您看到显着压缩的原因是,正如 @Scharron 指出的那样,您为每个数据字节写入 3 个零字节,从而导致更容易压缩数据。
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |