我正在尝试开发 Android 移动应用程序,其中我具有根据兴趣和位置查找匹配项的功能。许多约会应用程序已经在做一些类似的功能,例如基于位置、性别和年龄等的 Tinder 匹配。
如果已经完成,我不想重新发明轮子。我在谷歌上搜索过,有人建议为此使用聚类算法 Algorithm for clustering people with similar interests User similarities algorithm
让我为用户提供这种 JSON 格式的数据
User1: {location: "Delhi, India", interests: ["Jogging", "Travelling", "Praying"] }
User2: {location: "Noida, India", interests: ["Running", "Eating", "Praying"] }
User3: {location: "Bangalore, India", interests: ["Exercise", "Visiting new places", "Chanting"] }
我正在编写一个符合以下几个条件的匹配算法 -
如果用户 1 对“慢跑”感兴趣,而另一个用户 2 对“运行”感兴趣,那么慢跑和运行是一种交替的锻炼方式,因此他们应该同时匹配这两种配置文件位置也很明智,因为最近的应该在最上面。
该算法在大规模运行时应该具有相当的性能。这意味着我想避免将每个用户单独与其他用户进行比较。对于 N 个用户,这是一个 O(N^2) 操作。理想情况下,我想开发某种可以单独为每个用户生成的“分数”,因为这涉及仅循环遍历所有用户一次。然后我可以找到具有相似分数的其他用户,并基于此确定最佳匹配。
任何人都可以建议我如何在 firebase-cloud-function
和 firebase-database
的帮助下实现这一目标。
最佳答案
我认为硬编码相似性是一种错误的方法。仅供引用,主要搜索引擎都不依赖此类映射。
更好的方法是更多地由数据驱动。创建一个特别的方法开始,一旦你有足够的数据构建机器学习模型来排名匹配。这样您就不必承担任何事情。
对于位置,有某种半径(最好这可以由用户设置)并匹配半径内的人。
关于android - Android 移动应用程序的基于兴趣和位置的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573630/