【发布时间】:2021-07-03 14:58:37
【问题描述】:
目标
我正在尝试为 Minecraft 创建一个类似于 Skyblock 的岛屿插件,并且我希望能够为每个玩家自己的 3D 岛屿区域计算“岛屿等级”。
情况
我有一个小的hash map,它为我提供了一个十进制值,表示块类型和它们可能处于的状态之间的可能组合的一些子集。
块的数据集很大:大约有 16777216 个块,我需要计算它们每个“值”的总和,如上述地图所示。
“Pseudo-Java”中的一个幼稚(而且非常缓慢)的实现
double total = 0;
for (BlockData block : blocks) {
for (Entry<Key, Double> entry : map) {
Key key = entry.getKey();
// Type check
if (!key.getString().equals(block.getString()) continue;
// States check (Only ones explicitly defined by entry must match)
States blockStates = block.getStates();
States keyStates = key.getStates();
for (Entry<String, String> state : keyStates) {
if (!state.getValue().equals(blockStates.get(state.getKey()))
continue;
}
total += entry.getValue();
}
}
我怎样才能有效地实现水平计算?
附: Delta 编码在这种环境下是不可行的,因为由于 API 限制和混淆,我无法监听块的设置器。
【问题讨论】:
标签: java dataset comparison