【发布时间】:2009-08-17 02:33:09
【问题描述】:
我的应用程序将对密集矩阵执行大量矩阵运算(例如,加法/乘法)。我想缓存唯一的结果以避免重复计算。
密集矩阵:
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) 此类替代方法的优点/缺点的意见/建议。
最后,我发现这个论坛非常有帮助,并想表达我的感激之情。 ++谢谢。
【问题讨论】:
标签: c caching hashtable lookup