Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 基于多个索引和权重对列表进行排序_Algorithm_Sorting - Fatal编程技术网

Algorithm 基于多个索引和权重对列表进行排序

Algorithm 基于多个索引和权重对列表进行排序,algorithm,sorting,Algorithm,Sorting,有点像是对我正在看的东西的冗长解释,所以我提前道歉 我们考虑一个食谱: 拿着培根,把它织起来……布拉布拉布拉 这个食谱有3个标签 作者(最重要)-钱德勒·宾 类别(中等重要性)-肉类配方(不含肉类/素食主义者/生的/等类别) 子类别(最低重要性)-快餐(我们的快餐/高级烹饪等) 我是一个新用户,看到了一个随机排序的食谱列表(我的口味/个人资料还没有形成)。我开始与不同的食谱进行交互(阅读、保存、共享),每次交互都会添加到我的个人资料中(每次我阅读食谱时,都会在相应的类别/作者/子类别中添加一

有点像是对我正在看的东西的冗长解释,所以我提前道歉

我们考虑一个食谱:

拿着培根,把它织起来……布拉布拉布拉

这个食谱有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种素食食谱,那么钱德勒·宾以外的人的素食食谱排名会高于或低于非素食钱德勒·宾食谱吗?