对我所看到的内容进行了很长时间的解释,所以我提前道歉。
让我们考虑食谱:
拿培根编织...... blahblahblah ......
这个食谱有3个标签
我是一个新用户,可以看到随机排序的食谱列表(我的口味/个人资料尚未形成)。我开始与不同的食谱进行交互(阅读它们,保存它们,共享它们),每次交互都会添加到我的个人资料中(每次我阅读食谱时,一个点都会添加到相应的类别/作者/子类别中)。过了一会儿,我的个人资料开始看起来像这样:
现在,所有这些练习的重点是根据个人用户的偏好对食谱列表进行实际排序。例如,在这种情况下,我总会看到Chandler Bing的食谱在顶部(不论类别),然后是Ramsey的食谱。与此同时,Bing的食谱将根据我喜欢的类别和子类别进行分类,看到他的快餐食谱高于他的高级烹饪食谱。
我在排序算法方面看到了什么? 我希望我的问题有足够的信息,但如果有任何不清楚的地方请告诉我,我会尝试添加它。
答案 0 :(得分:1)
我会允许"标签"最重要的是具有最大的点差能力。示例:为作者提供50分的起始值,范围为0-100分。给类别一个25点的起始值,可能的范围为0-50点,给子类别一个12.5点的起始值,可能的范围为0-25点。这样,如果用户的口味随着时间的推移而变化,他/她只需要从最大值开始减少,或者从最小值开始工作。
从那里,您可以简单地为每个"标记"添加积分,并使用多种语言中的一种' sort()方法来比较每个食谱。
答案 1 :(得分:0)
您可以编写sort()中使用的比较函数。关键是当你比较两个食谱时,只需根据标签分别加点,然后进行简单的比较。那个和你选择的任何排序算法应该没问题。
答案 2 :(得分:0)
您可以使用递归细分MSD(一种基数排序算法)。工作原理如下:
取每个食谱中最重要的类别。
根据该类别对元素列表进行排序,将具有相同类别的元素分组到一个桶中(Ramsay bucket,Bing bucket等)。
递归排序每个桶,从下一个重要类别(肉桶等)开始。 按顺序将桶连接在一起。
复杂性:O(kn)其中k是类别类型的数量,N是食谱的数量。
答案 3 :(得分:0)
我认为你所寻找的不是排序算法,而是评级方案。
你说,你想按喜好排序。让我们假设,这些偏好具有不同的“维度”,如复杂程度,烹饪类型等。
这些维度有不同的levels of measurement。这些可以是例如数字或简单的类别/标签。这将是你的工作:
要将用户与厨师(或者甚至是其他用户)实际匹配,请创建一个排序回调,使所有维度相互匹配,并确保在每个维度中,比较用户具有相似的值(在数字刻度),或重叠的属性集(在标称尺度上,如标签)。然后按最佳匹配对结果进行排序。