【发布时间】:2015-06-16 17:01:20
【问题描述】:
我有一个 (nxd) 的数据集 (D),其中 n= 行数,d= 维数,我通过比较数据集 (D) 的每一行来创建一个相似度矩阵 (S)(nxn)然后将其转换为稀疏矩阵(tx3),其中t是对称相似度矩阵(S)的非零元素个数
创建相似度矩阵的时间复杂度为 o(n^2d),其中 d 是一些常数运算。 转换稀疏矩阵的时间复杂度为theta(n^2)
我的问题是: 在创建相似度矩阵时,如果我执行检查“如果相似度值为“零”则继续(继续),否则将其放入稀疏矩阵中”。假设我可以说从数据集 (D) 计算稀疏矩阵的成本是 O(n^2 d)。
例如:
创建相似矩阵:
for i in range(0,n):
for j in range(0,n):
find similarity_value of D[i] and D[j]
insert into similarity_matrix: S[i,j]= similarity_value
The above runs in O(n^2 d)
n^2 for the loops
d for finding the similarity between D[i] and D[j]
稀疏矩阵创建形式相似矩阵
for i in range(0,n):
for j in range(0,n):
if S[i,j]==0:
continue
else
insert into sparse_matrix [i, j, S[i,j]]
The above runs in O(n^2)
n^2 for the loops
如果一个接一个地执行这两个操作将需要 O(n^2 d) +O(n^2)。
由于我们只需要sparse_matrix,所以我们直接创建稀疏矩阵而不创建相似度矩阵。
直接创建稀疏矩阵而不创建相似度矩阵:
for i in range(0,n):
for j in range(0,n):
find similarity_val of D[i] and D[j]
if similarity_val==0:
continue
else
insert into sparse_matrix [i,j,similarity_val]
我的问题是:
Wouldn't the above run in only O(n^2 d), since I am directly inserting into sparse matrix
n^2 for the two loops
d for finding the similarity_val of D[i] and D[j]
如果我遗漏了什么或我对某事的理解有误,请告诉我。
【问题讨论】:
标签: r matlab matrix sparse-matrix