字符串编码用于内存优化
String encoding for memory optimization
我在格式中具有类似于 a:b
, d:a
, t:w
, i:r
等类似的字符串流。
我正在尝试编码:
a:b -> 1
d:a -> 2
etc.
我的目的是使最终字符串尽可能小,以节省内存。因此,我需要给单位值以最大次数的字符串。
我有以下方法:
创建:map<string, int>
-这将保持字符串及其计数。最后,我将以1的最大计数替换字符串,接下来使用2,依此类推,直到地图的最后一个元素。
当前最终字符串的大小为约100,000个字符。
我无法妥协速度,请建议如果有人有更好的技术来实现这一目标。
如果我正确理解您的输入字符串是范围" a:a":a" ..." z:z",您只需要计算流中每个的外观,无论如何订单。如果您的分布足够,则可以使用UINT16_T来计数它们。地图是使用树实现的,因此数组在内存和时间上都比地图更有效。因此您可以定义数组
array<array<uint16_t, 26>, 26> counters = {{}};
,假设您的输入是input = "c:d"
,则可以填充数组如下
counters[input[0]-'a'][input[2]-'a']++;
然后,您可以打印出输入的频率
for (auto i=0; i < counters.size() ; ++i) {
for (auto j=0; j < counters[i].size(); ++j) {
cout<<char(i+'a')<<":"<<char(j+'a')<<" "<<counters[i][j]<<endl;
}
}
相关文章:
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- C++二和.优化内存使用
- 如何控制或优化或删除或释放 UNION 中未使用的内存
- 如果 RMW 操作没有任何变化,是否可以针对所有内存顺序对其进行优化
- std::stable_sort: 如何选择内存优化算法而不是时间优化算法?
- 字符串编码用于内存优化
- 编译器内存优化 - 重用现有块
- 编译器是否优化析构函数中的内存集
- 矢量函数的C 内存优化
- 如何在CPU和内存中优化C 中的重型地图插入
- C++对间接运算符的标准描述是否保证内存写入不会被优化掉
- 内存分配,用于在C 11中循环中函数的返回值:如何优化
- 编译器优化了内存分配
- C++字符串内存重用优化
- 优化地形渲染的内存
- 内存对齐优化不仅性能,而且内存大小
- 优化数据结构,使其充分利用虚拟内存
- 有没有一种更快的方法或优化我可以应用到我的即兴内存池
- 优化内存读取和写入的长期运行
- 优化内存和性能的传输数据缓冲区