【问题标题】:Sorting a list based on multiple indices and weights根据多个索引和权重对列表进行排序
【发布时间】:2014-09-13 04:12:04
【问题描述】:

对我所看到的内容的解释有点冗长,所以我提前道歉。

让我们考虑一个食谱:

拿起培根,编织起来……blahblahblah……

这个食谱有 3 个标签

  • 作者(最重要的) - Chandler Bing
  • 类别(中等重要性)- 肉类食谱(肉类/素食/生食/等类别之外)
  • 子类别(重要性最低)- 快餐(我们的快餐/高级美食等)

我是一个新用户,看到了一个随机排序的食谱列表(我的口味/个人资料尚未形成)。我开始与不同的食谱互动(阅读、保存、分享),每次互动都会添加到我的个人资料中(每次阅读食谱时,都会在相应的类别/作者/子类别中添加一个点)。过了一会儿,我的个人资料开始看起来像这样:

  • Chandler Bing - 100 分
  • 戈登拉姆齐 - 49 分
  • 高级美食 - 12 分
  • 快餐 - 35 分
  • ...等等

现在,所有这些练习的重点是根据个人用户的偏好对食谱列表进行实际排序。例如,在这种情况下,我总是会在顶部看到 Chandler Bing 的食谱(无论类别如何),然后是 Ramsey 的食谱。同时,Bing 的食谱将根据我的首选类别和子类别进行排序,看到他的快餐食谱高于他的高级烹饪食谱。

我在这里看到的排序算法是什么? 我希望我的问题有足够的信息,但如果有任何不清楚的地方,请告诉我,我会尽力补充。

【问题讨论】:

  • 我看不到问题所在。按你给每个职位的分数排序怎么样?它不是先给你最好的匹配吗?
  • 你总是先按作者排序,还是仅仅因为作者的累计总数最高?例如,如果有 120 个素食食谱,除了 Chandler Bing 以外的其他人的素食食谱排名会高于或低于非素食 Chandler Bing 食谱吗?

标签: algorithm sorting


【解决方案1】:

我会允许最重要的“标签”具有最大的点差容量。示例:给作者一个起始值 50 分,范围为 0-100 分。给Category一个起始值25分,可能范围0-50分,给subcategory一个起始值12.5分,可能范围0-25分。这样,如果用户的味觉随着时间的推移而发生变化,他/她只需从最大值开始下降,或者从最小值开始上升。

从那里,您可以简单地将每个“标签”的分数相加,并使用多种语言的 sort() 方法之一来比较每个食谱。

【讨论】:

    【解决方案2】:

    您可以编写一个用于 sort() 的比较函数。关键是当您比较两个食谱时,只需根据它们的标签分别加点并进行简单比较。那以及您选择的任何排序算法都应该没问题。

    【讨论】:

      【解决方案3】:

      您可以使用递归细分 MSD(一种基数排序算法)。工作如下:

      选取每个食谱中最重要的类别。

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

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

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

      【讨论】:

        【解决方案4】:

        我认为您要查找的不是排序算法,而是评分方案。

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

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

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

        要真正将用户与厨师匹配(甚至与其他用户匹配),请创建一个排序回调,将您的所有维度相互匹配,并确保在每个维度中比较的用户具有相似的值(在数字比例)或一组重叠的属性(在名义比例上,如标签)。然后按最佳匹配对结果进行排序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-08
          • 2020-09-07
          • 1970-01-01
          • 2014-11-29
          • 2012-09-07
          • 1970-01-01
          相关资源
          最近更新 更多