1

我有大量数据,本质上是大向量,需要相互比较以确定它们之间的关系。向量保存在本地 sqlite 数据库中。

组织流程的最佳方式是什么?

到目前为止,我一直在做的是加载所有向量的键,然后遍历它们的组合,提取数据并比较它们,并在每次比较后将结果保存到数据库中。然而,这个过程需要很长时间。

我认为,更快的方法是批量加载数据,然后并行执行比较。怎么可能做得对?是否有一些关于该主题的论文,其中描述了最佳方法?

我使用 sqlite 数据库、c++ 作为语言和 qt 框架。被比较的数据和比较方法本质上是黑盒子——它们来自外部库。

4

1 回答 1

0

您可以建立一个“工作分配”队列,即数据元素的组合以测试并从线程池中的线程使用它们(QThread想到家庭)。

工作分配可能如下所示:

class WorkingAssignment {
public:
    WorkingAssignment(DataType *lhs, DataType *rhs) : a(lhs), b(lhs) {}
    ResultType execute() const {
        return Compare(a, b);
    }

private:
    Vector *a, *b;
};

因此,一个线程将一个分配出队,调用execute它,将结果(可能与数据元素的标识符一起)排入结果队列。另一个(单个)线程负责使用结果并使用该数据执行您想要执行的任何操作。

推广这种方法几乎有无限的可能性,例如传递一个谓词来将数据与WorkingAssignment不同种类的队列进行比较(也许某些组合比其他组合更重要),......

于 2013-07-03T06:59:52.277 回答