2014-09-12 85 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. 爲用戶創建一個反映其偏好的配置文件。廚師也一樣;對待他們就像普通用戶一樣。

要實際匹配用戶的廚師(或,甚至到另一個用戶),創建你對對方的所有尺寸相匹配,並確保在每一個維度的比較用戶也有類似的一個排序回調值(以數字爲單位)或一組重疊的屬性(在標稱範圍內,如標籤)。然後按照最佳匹配對結果進行排序。

相關問題