如何在C中实现一个巨大的矩阵

jan*_*ver 5 c memory matrix

我正在用C语言编写一个数值模拟程序.部分模拟是空间固定的节点,它们对每个其他节点都有一些浮点值.它就像有向图.但是,如果两个节点距离太远(比某些截止长度a更远),则该值为0.

为了表示所有这些"相关性"或浮点值,我尝试使用2D数组,但由于我有100.000个以上的节点,这对应于40GB内存左右.

现在,我正在尝试为这个问题考虑不同的解决方案.我不想将所有这些值保存在硬盘上.我也不想在飞行中计算它们.一个想法是某种稀疏矩阵,就像在Matlab中可以使用的那样.

您还有其他想法,如何存储这些值?

我是C的新手,所以请不要期待太多的经验.

谢谢和最诚挚的问候,Jan Oliver

Jim*_*ter 4

平均而言,有多少个节点位于给定节点的截止距离内,这决定了您的内存需求,并告诉您是否需要分页到磁盘。占用最少内存的解决方案可能是一个将一对节点映射到一个距离的哈希表。由于每条路的距离相同,因此只需将其输入哈希表一次即可 - 将两个节点编号按数字顺序排列,然后将它们组合起来形成哈希键。您可以对哈希表使用 Posix hsearch/hcreate/hdestroy 函数,尽管它们不太理想。