我正在尝试编写一个代数多网格求解器(在 C++ 中)。在给定的级别上,我确定哪些节点是 c 点,哪些节点是 f 点(其中 c 和 f 点的总数等于该级别上的矩阵维数)。因此我需要两个数组:一个数组保存 c 点的索引,一个数组保存 f 点的索引。问题是我不知道手头会有多少 c 点(或 f 点),所以我不知道这些数组有多大。一种选择是使两个数组的大小与矩阵中的行数相同,以确保不会溢出。这就是我现在正在做的事情,但这会浪费大量额外的存储空间。我也可以基本上运行我的函数来确定 c 点和 f 点两次,第一次我只记录最终大小,但这显然是很多额外的工作。有谁知道处理这个问题的最佳策略是什么?似乎没有任何方法可以确定最终的 c 点数,而无需实际计算它们一个接一个。
如何确定代数多网格中c点的数量
计算科学
线性代数
C++
多重网格
2021-12-09 13:17:07
2个回答
也许您可以制作一个大小适合总点数的数组,然后用前面的粗点和后面的细点填充它。他们会在中间的某个地方相遇(但不重叠)。
在 C 语言中,该命令calloc在运行时创建一个数组,realloc并使先前的数组变大或变小。实际上,您可能需要一个链表,有一个名为Gobject. 使用它需要进一步的编程技能,但可能会节省大量内存,并且每层允许大量节点。
其它你可能感兴趣的问题