2014-09-12 109 views
0

对于我所看到的很长时间的啰嗦解释的排序,所以我提前致歉。根据多个指数和权重对列表进行排序

让我们考虑一个配方:

取熏肉和编织它... ... blahblahblah

这个配方有3个标签

  • 笔者(最重要的) - 钱德勒兵
  • 类别(中等重要性) - 肉类食谱(肉类/纯素食/原料/等类别)
  • 子类别(最不重要) - 快餐(我们的快餐/高级美食等)

我是一个新用户,看到随机排序食谱(我的味觉/配置文件尚未形成)的列表。我开始与不同的食谱进行交互(读取它们,保存它们,分享它们),并且每次交互都会添加到我的配置文件中(每次我读取食谱时,都会将点添加到相应的类别/作者/子类别中)。过了一会儿,我的个人资料开始是这个样子:

  • 钱德勒兵 - 100分
  • 戈登拉姆齐 - 49点
  • 高级菜肴 - 12分
  • 快餐 - 35分
  • ...等等

现在,所有这些练习的要点是根据个人用户的偏好实际对配方列表进行排序。例如,在这种情况下,我总是会看到Chandler Bing的食谱(不管类别),然后是Ramsey的食谱。同时,Bing的食谱将根据我喜欢的类别和子类别进行排序,看到他的快餐食谱比他的高级烹饪食谱更高。

在排序算法方面我在看什么? 我希望我的问题有足够的信息,但如果有什么不清楚的地方,请让我知道,我会试着添加它。

+0

我看不到问题。如何按照您给予每个职位的积分进行排序?它不是首先给你最好的比赛吗? – 3yakuya 2014-09-12 20:03:53

+0

您是否总是首先按作者排序,还是仅仅因为作者的累积总数最高?例如,如果有120种素食食谱,Chandler Bing以外的人的素食食谱是否会高于或低于非素食者Chandler Bing的食谱? – chepner 2014-09-12 20:11:34

回答

0

您可以编写在sort()中使用的比较函数。重点是当你比较两个食谱时,只需根据标签分别加上点并做一个简单的比较。这和你选择的任何排序算法应该做得很好。

1

我会让最重要的“标签”具有最大的容量差异点。示例:为作者提供50分的起始值,范围为0-100分。给予类别起点值25点,可能范围为0-50点,给子类别起点值12.5点,可能范围为0-25点。这样,如果用户的味觉随着时间而改变,他/她只需要从最大值减小,或从最小值改变。

从那里,你可以简单地为每个“标签”加上点,并使用多种语言的sort()方法之一来比较每个配方。

0

您可以使用递归细分MSD(排序算法)。作品如下:

取每种配方的最重要的类别。

根据该类别对元素列表进行排序,将具有相同类别的元素分组到一个存储桶中(Ramsay存储桶,Bing存储桶等)。

从下一个重要类别(肉桶等)开始,对每个存储桶进行递归排序。 按顺序将桶连接在一起。

复杂性:O(kn)其中k是类别类型的数量,N是食谱的数量。

0

我认为你要找的不是排序算法,而是评级方案。

你说,你想按喜好排序。我们假设,这些偏好具有不同的“维度”,如复杂程度,美食类型等。

这些尺寸有不同levels of measurement。这些可以是例如数字或简单的类别/标签。这将是你的工作:

  1. 创建可以代表用户的偏好的尺寸和比例的方案。
  2. Operationalize真实世界的数据,以适应这个计划。
  3. 为用户创建一个反映其偏好的配置文件。厨师也一样;对待他们就像普通用户一样。

要实际匹配用户的厨师(或,甚至到另一个用户),创建你对对方的所有尺寸相匹配,并确保在每一个维度的比较用户也有类似的一个排序回调值(以数字为单位)或一组重叠的属性(在标称范围内,如标签)。然后按照最佳匹配对结果进行排序。

相关问题