![]() |
1
1
如果不知道更多关于度量的细节,就很难说了。我对消除O(n^2)方面没有任何想法,但可能有一种方法可以减少一些涉及的常量。例如,如果您有欧几里得度量d(p,q)=sqrt((p_1-q_1)^2+..+(p_n-q_n)^2),您可以将距离d平方,并将其与(p_i-q_i)^2的部分和进行比较,当您超过d^2时停止。 这是否能真正节省你的时间取决于仅仅计算和的比较有多昂贵,以及通过这样做你可以避免多少和的计算(显然,d越小越好)。 |
![]() |
2
2
当小计大于
PS: 如果不能做到这一点,您的问题可能与k-最近邻问题有关(或者更精确地说,与阈值邻域有关的最近邻问题)。你应该寻找一种算法,可以在不计算所有距离的情况下靠近成员(可能是使用三角形不等式)。维基百科应该帮助你探索合适的算法。 |
![]() |
3
1
如果相似性度量是可传递的,则不必计算所有对象对的相似性,因为对于对象A、B、C:
在哪里?
|
![]() |
4
1
我认为解决办法取决于更多关于你问题本质的细节。
例如,假设“差异”是三个属性(如a1、a2和a3)差异的绝对值之和。您可以创建一个三维数组,并使用这些值(如果有的话)将数组的每个节点的值设置为对象。然后,如果要查找与对象o相差小于d的所有对象,可以编写:
我怀疑不同的规则比这更复杂,但是很好,只是在Alrorithm中添加复杂性以匹配规则的复杂性。重点是使用数组限制必须检查的对象集。
|
![]() |
5
1
不能使用 K D-树? 可能需要(如果可能)规范化尺寸。然后,您只需要填充树,并使用“最近的n个邻居”搜索,并尝试在某个范围内找到任何对象。 |
![]() |
6
1
对象示例: 图像,文件。当然,使用这些对象的原始表示法通常是没有用的。通常,人们会预先处理原始表单,并将其转换为某种规范化表单(对于文档,例如每个条目表示某个词出现的次数/百分比的向量,对于图像,它可以表示图像中的视觉特征)。 如果d是固定的,并且n^2预计算是可行的,那么您可以使用一个图表表示法,例如为每个对象使用一个链接列表。 您可以使用近似最近邻算法来获得更有效的解决方案,从而降低精度。 |
![]() |
7
0
我们能假定相似性是可传递的吗?
这样做的好处是,排序可以完成一次,随后的集合构建与集合中的成员数成比例。 |
![]() |
8
0
听起来像bk树。
Here is a small example
. 基本上,您创建树并检查应该将哪个分支用于类似的对象搜索,而哪些分支不应用于类似的对象搜索,因此,您可以防止
|
![]() |
user2995603 · 数组中相似项的序列 7 年前 |
![]() |
Dan · 在TestComplete中使用“like”是可能的吗? 7 年前 |
![]() |
zer02 · Rails:一种检查DB中重复项的方法?关联数据源 10 年前 |
![]() |
Shani · 查找具有不同长度[闭合]的特征向量的相似性度量 11 年前 |