今天晚上整理了兩道比較簡單關於搜索引擎的題目,所有題均是Iveely搜索引擎中遇到的,與大家分享你的智慧吧!都不難,但是希望能夠找到一種最佳的解決辦法。
問題一:
背景介紹:
問題二:
背景介紹:
搜索引擎中,每一個關鍵字都對應了無數張網頁,每一張網頁都對應着若干的關鍵字,搜索引擎在獲取到關鍵字后,一定要在盡可能快的時間內獲取出擁有該 關鍵字的網頁集合,目前最常用的做法是倒排序,然而倒排序文件中,雖然能夠很快的提取出網頁的關鍵字,但是網頁的權重卻不定相同。也就是到排文件的結構是無序的。
下面我們把問題抽象為北京地鐵站信息,每一個站點都是關鍵字,每一條線路都是網頁。每一個站點被多條線路包含(每一個關鍵字被若干網頁包含),每一 條線路包含多個站點(每一張網頁包含多個關鍵字)。
問題的產生:
倒排文件已經讓我們可以很快的提取出站點對應的線路,但是遺憾的是,例如:用戶搜索西直門,那么將返回地鐵2號線,地鐵4號線以及地鐵13號線。然而,地鐵4號線和地鐵2號線又有另外一個交集站點:宣武門。我們為什么需要知道宣武門呢?因為在Iveely的設計當中,認為:當搜索結果中的交集 站點越集中,當達到一個程度時,這個站點也可能是用戶比較感興趣的站點(數學證明:略),例如上圖中,若用戶換乘地鐵時,可能是想在西直門換乘地鐵,如果結果中的地鐵線路集合中包含宣武門的也很多,那么我們假設宣武門也可以是一個很好的換乘地鐵方案。
需要解決的問題:
請設計一種數據結構,在盡可能廉價的時間復雜度和空間復雜度下,計算出,搜索結果中包含相同站點的排序集合(按照出現的結果中包含的次數)。最簡單的例如:輸入西直門,可以返回推薦宣武門,如果還有包含的站點依次按照出現次數列出。
以上題目是我自己擬出來的,是我在開源Iveely過程中遇到的問題,我想這是比較有意義的題目,因為不僅僅是我們的思維,還有我們code技術,當然最重要的是我們的數學,陸續我也會將其它類似的問題發出來,讓大家一起探討,學習,歡迎您對Iveely搜索引擎的關注,如果您有什么好的意見或建議,可以郵件liufanping@iveely.com 或微薄聯系我。