Algorithm 基于多个索引和权重对列表进行排序
有点像是对我正在看的东西的冗长解释,所以我提前道歉 我们考虑一个食谱: 拿着培根,把它织起来……布拉布拉布拉 这个食谱有3个标签Algorithm 基于多个索引和权重对列表进行排序,algorithm,sorting,Algorithm,Sorting,有点像是对我正在看的东西的冗长解释,所以我提前道歉 我们考虑一个食谱: 拿着培根,把它织起来……布拉布拉布拉 这个食谱有3个标签 作者(最重要)-钱德勒·宾 类别(中等重要性)-肉类配方(不含肉类/素食主义者/生的/等类别) 子类别(最低重要性)-快餐(我们的快餐/高级烹饪等) 我是一个新用户,看到了一个随机排序的食谱列表(我的口味/个人资料还没有形成)。我开始与不同的食谱进行交互(阅读、保存、共享),每次交互都会添加到我的个人资料中(每次我阅读食谱时,都会在相应的类别/作者/子类别中添加一
- 作者(最重要)-钱德勒·宾
- 类别(中等重要性)-肉类配方(不含肉类/素食主义者/生的/等类别)
- 子类别(最低重要性)-快餐(我们的快餐/高级烹饪等)
- 钱德勒·宾-100分
- 戈登·拉姆齐-49分
- 高级烹饪-12分
- 快餐-35分
- 。。。等等
我希望我的问题有足够的信息,但如果有任何不清楚的地方,请告诉我,我会尝试补充。您可以编写一个用于排序()的比较函数。关键是,当你比较两个食谱时,只需根据它们的标签分别相加,然后做一个简单的比较。这和您选择的任何排序算法都应该很好。我允许最重要的“标记”具有最大的点差异容量。示例:给作者一个50分的起始值,范围为0-100分。给类别a提供25分的起始值,可能范围为0-50分,给子类别提供12.5分的起始值,可能范围为0-25分。这样,如果用户的味觉随着时间的推移而变化,他/她只需从最大值开始向下工作,或从最小值开始向上工作
从这里,您可以简单地将每个“标记”的点数相加,并使用多种语言的sort()方法之一来比较每个配方。您可以使用递归细分MSD(排序基数排序算法)。工作内容如下: 以每个食谱中最重要的类别为例 根据该类别对元素列表进行排序,将具有相同类别的元素分组到一个bucket中(Ramsay bucket、Bing bucket等) 递归地对每个桶进行排序,从下一个重要类别(肉桶等)开始。 按顺序将桶连接在一起
复杂度:O(kn),其中k是类别类型的数量,N是配方的数量。我认为你要找的不是排序算法,而是评级方案 你说,你想按偏好排序。让我们假设,这些偏好有不同的“维度”,比如复杂程度、菜肴类型等 这些维度有不同的定义。这些可以是数字或简单类别/标记。您的工作是:
要将用户与厨师(甚至与另一个用户)进行实际匹配,请创建一个排序回调,使您的所有维度相互匹配,并确保在每个维度中,比较的用户具有相似的值(数字比例)或重叠的属性集(名义比例,如标记)。然后按最佳匹配对结果进行排序。我看不出问题所在。按照你给每个职位的分数排序怎么样?它不是先给你最好的匹配吗?你总是先按作者排序,还是仅仅因为作者的累积总数最高?例如,如果有120种素食食谱,那么钱德勒·宾以外的人的素食食谱排名会高于或低于非素食钱德勒·宾食谱吗?