我有大量对象,我需要找出它们之间的相似之处。
确切地说:给定两个对象,我可以将它们的相异度计算为一个数字,一个度量- 更高的值意味着更少的相似性,0 意味着对象具有相同的内容。计算这个数字的成本与较小对象的大小成正比(每个对象都有给定的大小)。
在给定一个对象的情况下,我需要能够快速找到与其相似的一组对象。
确切地说:我需要生成一个数据结构,将任何对象 o 映射到与 o 不比 d 更相似的对象集合,对于某些相异值 d,这样列出集合中的对象所花费的时间不会比如果它们在数组或链表中(也许它们实际上是)。通常,该集合将比对象的总数小得多,因此执行此计算非常值得。如果数据结构假设一个固定的 d 就足够了,但如果它适用于任意的 d,那就更好了。
你以前见过这个问题,或者类似的东西吗?什么是好的解决方案?
确切地说:一个简单的解决方案涉及计算所有对象对之间的差异,但这很慢 - O(n 2 ),其中 n 是对象的数量。有没有复杂度较低的通用解决方案?