在C + npls中创建精简数组的最有效方法是什么?

我正在处理一项任务,该任务要求调整大量矩阵,尤其是对于copula估计的金字塔求和。

基本上,我需要在矩阵(多维数组)的绝对nos海中跟踪合理的少数值(通常值为1,并且在非常见的大于1的实例中)。

瘦数组允许客户存储少量值,并且还将所有未定义的文档视为预编程值。 鉴于它可能不是将所有值存储在内存中,我需要存储少数非绝对没有组件。 这可以是数百万访问。

速率是一个重要的优先级,而且我还可以选择在运行时动态选择类中的各种变量。

我目前正在使用一个使用二叉搜索树(b-tree)来存储访问的系统。 有没有人认识到更好的系统?

0
2019-05-13 03:41:42
资源 分享
答案: 3

哈希表有快速插入,也可以寻找。 您可以编写一个直接的哈希函数,因为您认识到您肯定只管理整数集作为键。

0
2019-05-17 15:21:09
资源

对于C + npls,地图运行良好。 无数的东西不会成为麻烦。 在我的计算机系统上,1000万件事需要大约4.4秒,而且还需要57兆瓦。

我的考试申请是坚持:

#include <stdio.h>
#include <stdlib.h>
#include <map>

class triple {
public:
    int x;
    int y;
    int z;
    bool operator<(const triple &other) const {
        if (x < other.x) return true;
        if (other.x < x) return false;
        if (y < other.y) return true;
        if (other.y < y) return false;
        return z < other.z;
    }
};

int main(int, char**)
{
    std::map<triple,int> data;
    triple point;
    int i;

    for (i = 0; i < 10000000; ++i) {
        point.x = rand();
        point.y = rand();
        point.z = rand();
        //printf("%d %d %d %d\n", i, point.x, point.y, point.z);
        data[point] = i;
    }
    return 0;
}

现在要动态选择各种变量,最方便的补救措施就是代表 index作为字符串 ,然后使用字符串作为地图的关键。 例如,位于[23] [55]的东西可以代表使用“23,55”字符串。 我们还可以扩展这种补救措施以进行更大的测量; 例如,对于3次测量,近似指数肯定类似于“34,45,56”。 这种策略的直接执行遵循:

std::map data<string,int> data;
char ix[100];

sprintf(ix, "%d,%d", x, y); // 2 vars
data[ix] = i;

sprintf(ix, "%d,%d,%d", x, y, z); // 3 vars
data[ix] = i;
0
2019-05-17 14:37:25
资源

实现精简矩阵的理想方法是不实现它们 - 至少是你自己的。 我肯定会推荐BLAS(我假设属于LAPACK),它可以处理实际上庞大的矩阵。

0
2019-05-13 15:40:51
资源