搜索相似对象
Search similar object
假设我有以下对象数组:
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个集合。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 模板元程序查找相似的连续类型名称
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 搜索相似对象
- 更好的存储大型相似对象的方法