搜索相似对象

Search similar object

本文关键字:对象 相似 搜索      更新时间:2023-10-16

假设我有以下对象数组:

Object 0:
  [0]=1.1344
  [1]=2.18
  ...
  [N]=1.86
-----------
Object 1 :
  [0]=1.1231
  [1]=2.16781
  ...
  [N]=1.8765
------------- 
Object 2 :
  [0]=1.2311
  [1]=2.14781
  ...
  [N]=1.5465  
--------
Object 17:
  [0]=1.31
  [1]=2.55
  ...
  [N]=0.75

如何比较这些对象?

您可以看到对象 0 和对象 1 非常相似,但对象 17 与它们中的任何一个都不同。

我想让算法给我数组中的所有相似对象

你用Algorithm标记这个问题(我不是C++方面的专家),所以让我们给出一个伪代码。

首先,您应该设置一个阈值,该阈值下的不同定义 2 var 为相似。第二步是遍历所有元素对并检查相似性。

A视为包含n对象的数组,m是每个对象中的字段数。

threshold  = 0.1
for i in (0, n):
    for j in (i+1,n):
        flag = true;
        for k in (1,m):
            if (abs(A[i][k] - A[j][k]) > threshold) 
                flag = false // if the absolute value of the diff is above the threshold object are not similar 
                break // no need to continue checks
        if (flag)
            print: element i and j similar // and do what ever

时间复杂度O(m * n^2)

请注意,您可以使用相同的算法对对象数组进行排序 - 将比较函数声明为字段之间的最大差异,然后相应地排序。

希望对您有所帮助!

你的问题基本上归结为最近邻搜索,这是数据挖掘中一个经过充分研究的问题。

对于这个问题有不同的方法。
我建议首先决定你想要多少个相似的元素,或者为相似性设置一个给定的阈值。然后,您必须遍历所有向量并计算查询向量与数据库中每个向量之间的距离函数。

我建议您在例中使用欧几里得距离,因为您有真实的标称数据。

您可以在此处和此处阅读有关最近邻搜索和欧几里得距离主题的更多信息。祝你好运!

你需要的是一个分类器,对于你的问题,有 2 种算法取决于你想要什么。

如果需要查找与所选对象-m最相似的对象,可以使用

最近邻算法,或者如果需要查找相似的对象集,可以使用k-means算法查找k个集合。