我最近被要求完成对于C++角色的任务,但是作为应用程序并没有决定要取得进展的任何进一步的我以为我会在这里发布一些反馈/咨询/改进/我已经忘记了概念的提醒.
任务是:
以下数据是整数值的时间序列
int timeseries[32] = {67497, 67376, 67173, 67235, 67057, 67031, 66951,
66974, 67042, 67025, 66897, 67077, 67082, 67033, 67019, 67149, 67044,
67012, 67220, 67239, 66893, 66984, 66866, 66693, 66770, 66722, 66620,
66579, 66596, 66713, 66852, 66715};
Run Code Online (Sandbox Code Playgroud)
例如,该系列可能是每天超过32天的股票收盘价.
如上所述,数据将占用32 x sizeof(int) bytes = 128 bytes
假设4字节的整数.
使用delta编码,编写要压缩的函数,以及解压缩数据的函数,如上所述.
好的,所以在此之前我从未考虑压缩,所以我的解决方案远非完美.我解决问题的方式是将整数数组压缩成一个字节数组.当将整数表示为一个字节时,我保持计算最高有效字节(msb)并将所有内容保持到这一点,同时将其余部分抛弃.然后将其添加到字节数组中.对于负值,我将msb递增1,以便在解码时通过保持前导1位值来区分正字节和负字节.
解码时,我解析这个锯齿状的字节数组,然后简单地反转压缩时执行的先前操作.如前所述,我从未在此任务之前查看压缩,因此我确实提出了自己的方法来压缩数据.我最近在看C++/Cli,之前没有真正使用它,所以决定用这种语言写它,没有特别的原因.下面是课程,最底层是单元测试.任何建议/改进/改进将非常感激.
谢谢.
array<array<Byte>^>^ CDeltaEncoding::CompressArray(array<int>^ data)
{
int temp = 0;
int original;
int size = 0;
array<int>^ tempData = gcnew array<int>(data->Length);
data->CopyTo(tempData, 0);
array<array<Byte>^>^ byteArray = gcnew array<array<Byte>^>(tempData->Length);
for (int …Run Code Online (Sandbox Code Playgroud)