我的应用程序将在密集矩阵上执行大量矩阵运算(例如,加/乘)。我想缓存唯一的结果以避免重复计算。
密集矩阵:
typdef struct denseMatrix{
int m;
int n;
double **d; // actual matrix
multiplyTable **entry; // key & result
} dns;
表项:
typedef struct multiplyTable{
dns *rightOperand; // key
dns *result; // value
} multiplyTable; // or something like that
dns *A, *B, *C, *D...; // allocated internally
C = mult(A,B); //may be called many many times.
在这种情况下,mult 将向表中添加一个条目(操作数,结果)对
add(A->entry, B, C); //B is the right operand and C is the result
稍后如果再次调用 D = mult(A, B),则 search(A->entry,B) 将检索 C。另一方面,如果特定操作数不在列表中,则将其与指向结果矩阵的指针。
我以前从未做过这样的事情,我什至不确定这是否是解决问题的方法。根据我有限的理解,哈希表可以用来实现这样的东西。
我遇到的实际问题包括:(a)哈希表首先是解决该问题的适当解决方案吗?他们允许指针地址作为键和值吗?
(b) 将“哈希表”作为“字段”保留在结构中是否有意义?这样,我已经有了左操作数,我只需要在乘法表中搜索右操作数。或者,是否应该有一个独立的表,左右操作数都作为键?
(c) 我是否为加法/乘法等创建单独的表,还是应该有一个带有操作数和运算符的表?
(d) 跟踪所有创建的对象以便适当释放这些对象的最佳方式是什么?
(e) 什么公共可用的库(在 c 中)适合实施这样的事情?
我正在寻求有关(a)可以解决问题的替代方法以及(b)此类替代方法的优点/缺点的输入/建议。
最后,我发现这个论坛非常有帮助,并想表达我的感激之情。++谢谢。