寻求一些建议。有没有人知道在n维空间中匹配算法的好地方开始查找?例如,任何约会网站都必须使用某种算法来匹配两个人。我所了解的是,我们可以将一个人的特征映射到n维数组中,并为每个特征分配一个点数。一旦我们拥有了所有(可用的)特征,我们就可以在n维数组中表示此人的点。然后,将2个人匹配起来就像在这个n维数组中找到2个点之间的最短距离一样简单。有没有人参考实现这种算法的资料?编写这种东西的最佳语言是什么?
寻求一些建议。有没有人知道在n维空间中匹配算法的好地方开始查找?例如,任何约会网站都必须使用某种算法来匹配两个人。我所了解的是,我们可以将一个人的特征映射到n维数组中,并为每个特征分配一个点数。一旦我们拥有了所有(可用的)特征,我们就可以在n维数组中表示此人的点。然后,将2个人匹配起来就像在这个n维数组中找到2个点之间的最短距离一样简单。有没有人参考实现这种算法的资料?编写这种东西的最佳语言是什么?
以下是一个解决方案。
假设用户为U1、U2、U3、U4、U5......Un。 属性为A1、A2、A3、A4、A5......Am。
将它们存储为:
A1 - U1、U2、U3... A2 - U4、U6、U7.... A3 -
配置文件属性是索引,存储所有用户。现在,如果有一个新用户加入,查看其属性,并找到这些属性的共同用户。出现在这些列表中的次数越多,排名越高。
首先,选择您最熟悉的语言。处理此类算法相当简单,并且应该适用于任何现代语言。(只要存在某种数组概念和可能的矩阵库,您就应该没问题。)我之前在C、C++和C#中实现了许多这样的算法,但也看到了Python、VB.NET等语言的实现。
根据您想要做什么,有几个选项。
话虽如此,您想要做什么取决于您的目标。如果您只想找到最佳匹配,可以使用简单的距离计算(即:n维数组中每个维度/属性的平方和的平方根),可选择加权每个属性的距离,然后使用最接近的点。
如果您想将人员分组在一起,则需要考虑聚类算法。对于此类数据,我认为K-Means聚类或模糊C均值聚类是最好的选择。
你用例子描述的并不是n维匹配,而是具有多个特征节点的二分图匹配。(您需要提供一个函数,可以计算出两个人之间的距离)。对此应该有非常有效的算法。在n维匹配中,您将尝试从超过两个集合中匹配节点(在您的例子中,假设您可以将人划分为身体、灵魂和音乐偏好,则重新组合它们以制造出真正美好的情侣。)这里是三维匹配的维基百科文章,它是NP完全的。
另外,正如其他人所指出的那样,如果您的目标不是将人配对,而是找到兼容的群体,则应考虑将它们聚集到一起。可以使用无监督学习等方法来实现。