Algorithm 相关功能的数据结构建议

Algorithm 相关功能的数据结构建议,algorithm,sparse-matrix,Algorithm,Sparse Matrix,我们有一套文档,每个文档都有一套功能。 给定特性A,我们需要知道在同一文档中具有特性B的概率是多少 我想建立一个概率矩阵,s.t: M(i,j)=假设存在特征a,文档中存在特征B的概率 但是,我们还有一个附加要求: 如果文档中有特征A,那么在同一文档中概率>P的所有特征是什么 同时,我所能想到的是概率矩阵的稀疏矩阵,在计算之后,对于所有列中运行的每个特征,按p排序,并将其保存在某个链接列表中。(现在,我们有了每个特征对应的特征列表 这个空间复杂度相当大(最坏的情况是:N^2,N很大!),每个搜索

我们有一套文档,每个文档都有一套功能。 给定特性A,我们需要知道在同一文档中具有特性B的概率是多少

我想建立一个概率矩阵,s.t: M(i,j)=假设存在特征a,文档中存在特征B的概率

但是,我们还有一个附加要求: 如果文档中有特征A,那么在同一文档中概率>P的所有特征是什么

同时,我所能想到的是概率矩阵的稀疏矩阵,在计算之后,对于所有列中运行的每个特征,按p排序,并将其保存在某个链接列表中。(现在,我们有了每个特征对应的特征列表

这个空间复杂度相当大(最坏的情况是:N^2,N很大!),每个搜索的时间复杂度是O(N)


是否有更好的想法?< /P> < P>如果特征的数量可以与文档的数量相比较,或者更大,考虑持有一个倒排索引:对于每个特征保持(例如排序的列表)它存在的文档。然后,通过在排序列表上运行一个合并来完成A和B.< /P>的B的概率。


对于“给定一个问题的共同特征”,我想不出比预先计算每个A的答案更好,并希望得到的特征列表不是太长。

< P>如果特征的数量与文档的数量相比较,或者更大,考虑保持倒排索引:对于每个特征保持(例如,已排序的文档列表)它所在的文档。然后,您可以通过对功能a和B的已排序列表进行合并,计算出给定a的B的概率


对于“预期的公共特性,给定一个”问题,我想没有什么比预先计算每个A的答案更好的了,我希望得到的功能列表不会太长。

@yassale:N的大小是10^3或10^9?千或千兆?估计文档数?每个文档的最大功能数?不同功能的总数?他会吗lps作为一种通用解决方案,只能是一个稀疏矩阵,但如果您拥有比文档多得多的功能,则可以更快地遍历每个文档。测试文档中是否存在给定功能的复杂性是多少?@Loic训练集中文档的数量估计为~100k,每个文档的功能数量为-O(100).每个文档获取功能的复杂性非常大(外部服务,时间延迟以秒为单位)无论如何,为了构建您的结构,您需要所有文档的所有功能,所以这需要时间。稀疏矩阵的大小为~100k*100=~10^8。您有多少不同的功能?@yassale:N的大小为10^3或10^9?千大或千兆大?估计的文档数?每个文档的最大功能数t?不同功能的总数?作为一个通用解决方案,它可能会有所帮助,因为它只能是一个稀疏矩阵,但如果您的功能比文档多得多,则可以更快地遍历每个文档。如果文档中存在给定的功能,则测试的复杂性是多少?@Loic训练集中文档的数量估计为~100k,#每个文档的res-O(100)。获取每个文档的功能的复杂性非常大(外部服务,时间延迟以秒为单位)。无论如何,为了构建您的结构,您需要所有文档的所有功能,因此这需要时间。稀疏矩阵的大小约为100k*100=~10^8。您有多少不同的功能?