我正在制作原型,目前还不确定如何设计一个装载的装备。
其目的很简单 - 保存2D数组的delta并稍后将其作为getDelta(i,j)或通过任何其他接口返回。现在不需要最好的压缩,只是不是阵列大小内存的O ^ 2,但性能是。
详细信息:
P.S。它是一项Java任务,但作为一般数据结构问题:C,Perl,Mathematica,Fortran,伪代码或想法是值得欢迎的,其他基于语言的示例可能对我来说不太清楚。 < / p>
答案 0 :(得分:1)
有效地存储&#34; delta&#34; (如果差异)两个2D数组之间的大多数值预期是相同的,您可以使用hash map或map来存储仅适用于不同元素的值。
C ++中的快速实现:
#include <bits/stdc++.h>
using namespace std;
typedef float value_type;
vector<vector<value_type>> original_array;
map<pair<int, int>, value_type> different_elements;
void calculate_delta(const vector<vector<value_type>> &another_array) {
int i, j;
for (i = 0; i < original_array.size(); ++i) {
for (j = 0; j < original_array[i].size(); ++j) {
if (another_array[i][j] != original_array[i][j]) {
// store the different element
different_elements.insert(make_pair(make_pair(i, j),
another_array[i][j]);
}
}
}
}
value_type get_delta(int i, int j) {
auto it = different_elements.find(make_pair(i, j));
if (it == different_elements.end()) {
return original_array[i][j];
}
return it->second; // return the stored value
}