C ++:按公共基数对整数进行分组以节省内存
C++: Group integers by common radix to save memory
考虑一个由 unsigned int 值组成的(排序的)向量。
std::vector<unsigned int> data = {1234,1254,1264,1265,1267,1268,1271,1819,1832,1856,
1867,1892,3210,3214,3256,3289};
假设每个 unsigned int 都是 4 个字节,这个包含 16 个元素的向量将至少占用 64 个字节的 RAM。
我认为可以通过按公共基数对这些值进行分组来减少内存使用量。例如考虑 kind
的数据表示
data =
{
{12..
..34, ..54, ..64, ..65, ..67, ..68, ..71
},
{18..
..19, ..32, ..56, ..67, ..92
}
{32..
..10, ..14, ..56, ..89
}
};
在上面的示例中,我按 100 的块对值进行分组。按一组 2^8=256 或 2^16=65536 对数据进行分组会更合乎逻辑。
是否有一种数据类型(在 std:: 或 boost:: 或其他中)可以为我做这种技巧,或者我是否必须为此编写我自己的容器类型?这听起来像是一个潜在的好主意吗?
对于非常受限的场景中的特定输入,这是一个可行的想法。 las std:: 不提供该结构。您的特定建议可以合理地以树状方式实施。
注意一般基数感知排序,因为它们通常使用大列表,因此使用比常规向量更多的内存。
考虑一个由 unsigned int 值组成的(排序的)向量。
std::vector<unsigned int> data = {1234,1254,1264,1265,1267,1268,1271,1819,1832,1856,
1867,1892,3210,3214,3256,3289};
假设每个 unsigned int 都是 4 个字节,这个包含 16 个元素的向量将至少占用 64 个字节的 RAM。
我认为可以通过按公共基数对这些值进行分组来减少内存使用量。例如考虑 kind
的数据表示data =
{
{12..
..34, ..54, ..64, ..65, ..67, ..68, ..71
},
{18..
..19, ..32, ..56, ..67, ..92
}
{32..
..10, ..14, ..56, ..89
}
};
在上面的示例中,我按 100 的块对值进行分组。按一组 2^8=256 或 2^16=65536 对数据进行分组会更合乎逻辑。
是否有一种数据类型(在 std:: 或 boost:: 或其他中)可以为我做这种技巧,或者我是否必须为此编写我自己的容器类型?这听起来像是一个潜在的好主意吗?
对于非常受限的场景中的特定输入,这是一个可行的想法。 las std:: 不提供该结构。您的特定建议可以合理地以树状方式实施。
注意一般基数感知排序,因为它们通常使用大列表,因此使用比常规向量更多的内存。