2014-07-22 58 views
0

我正在研究用於存儲機密的小型移動應用程序。祕密有不同的類型:簡單(純文本),密碼和圖像。每個祕密通過一個或多個標籤進行連接。我在主頁中有一個搜索文本框,用戶可以鍵入一些文本來搜索祕密。基於單詞/標籤匹配,上次訪問和頻率的搜索算法

在一個簡單的層面上,我可以基於字符串匹配了說明或標籤搜索堅持祕密。有意義的是,通過描述匹配的那些比通過標籤的排名更高。但是,我必須考慮其他因素:上次訪問和訪問頻率。我很困惑這兩個因素如何影響比賽。

是否有任何數據結構/算法的存在是爲了幫我整理基礎上的描述,標籤,上次訪問和訪問頻率匹配的實體?

回答

2

如果我理解正確,您希望通過單詞和標籤匹配進行搜索,以獲取您將從中選擇「最佳」項目的候選人列表。你的問題表明你會喜歡在標籤匹配上的描述(單詞?)完全匹配。現在您想知道如何將訪問頻率和訪問時間考慮在內。

你並不需要爲此特定的數據結構。任何你可以排序的列表都可以正常工作。訣竅是提出一個比較功能,將這些事情考慮在內。比較功能的工作方式取決於您。

最簡單的比較功能將基於四項標準的簡單排序:字匹配,標籤的比賽,上次訪問,和頻率。它看起來像這樣:

// returns 1 if item1 > item2. 
// returns -1 if item1 < item2 
// returns 0 if item1 == item2 
int compare(item1, item2) 
{ 
    if (item1.wordMatch && !item2.wordMatch) return 1; 
    if (item2.wordMatch && !item1.wordMatch) return -1; 
    // do the same with tag match 
    // then check last access 
    if (item1.lastAccess > item2.lastAccess) return 1; 
    if (item1.lastAccess < item2.lastAccess) return -1; 
    // and check access frequency 
    if (item1.freq > item2.freq) return 1; 
    if (item1.freq < item2.freq) return -1; 
    // everything's the same 
    return 0; 
} 

您可能反而想計算每個項目的「分數」。例如,單詞匹配值10分,標籤匹配值4分。因此,具有三個標記匹配項的項目的得分爲12,將其排名高於具有單個確切詞匹配項的項目。

你怎麼量化上次訪問時間和訪問頻率是由你。你會想要考慮這些事情的重要性。如果某些不經常訪問但最近30秒前訪問過的內容的排名高於或低於訪問頻率非常高但在最後一個小時內根本沒有訪問過的內容?只有你可以決定每個標準的重要性。

一旦您想出了計算每個項目得分的方法,您的比較功能就非常簡單。

無論你做什麼都需要進行一些調整。開始一種方法是這樣的:

10 points for an exact word match 
4 points for a tag match 
subtract .01 points for every minute since the last access time, up to a maximum of 8 points. 
add .01 points for each prior access (i.e. frequency count), up to a maximum of 8 points. 

我會說實話,以上只是胡亂猜測的東西,可能給出合理的結果。關鍵是想出點什麼來嘗試。然後做一些調整。也許試試其他的東西。但基本的想法是想出一個基於這四個標準來計算分數的方法。