這個問題一度也非常棘手,不過經過數天的討論,我還是通過集合的技巧將其拆解為幾個簡單條件的運算。
首先,為定向生成三個檢索條件:t#ins(定向安裝), t#unins(定向未安裝),t#rest(為定向)
檢索條件只能獲取使用者的安裝列表l=
然後,定向安裝的廣告 = t#ins ∩ (a#l1 ∪ a#l2 ∪ ... a#ln)
定向未安裝的廣告 = t#unins ∩ ~(a#l1 ∪ a#l2 ∪ ... a#ln)
其他廣告 = t#rest
所有廣告 = 定向安裝的廣告 ∪ 定向未安裝的廣告 ∪ 其他廣告
= (t#ins ∩ (a#l1 ∪ a#l2 ∪ ... a#ln)) ∪
(t#unins ∩ ~(a#l1 ∪ a#l2 ∪ ... a#ln)) ∪
t#rest
這裡實際上使用了乙個技巧,即未安裝列表 = 已安裝列表的補集,通過取反運算即可獲取。
我們最初的想法是,基於t不會太大的考慮,按秒列舉所有的時間,以5分鐘為最長限制,可能的時間為0~300s,因此共需要301個檢索條件。
生成索引時,只需要生成c#t即可(c為檢索條件字首,用於和其他檢索條件區分)。
但是,這帶來乙個問題,當h很大時,比如h=60(1分鐘)時,需要使用61個檢索條件(0~60)才能檢索出所有廣告,這個過程中既有rpc傳遞長列表的消耗,也由檢索次數過多的消耗。
後來,我想了乙個方案,本質上是通過預處理時間來換取檢索時間,將比較次數縮減到只需要2個檢索條件(對應2次檢索)。
如何生成索引達到這種目的呢?答案就是預處理過程中,對於時長為t的廣告,顯然t<=t, t<=t+1, t<=t+2, …, t<=max
因此,我們需要為該廣告生成 c#t, c#(t+1), c#(t+2), …, c#max的所有索引。顯然,這裡預處理的時間增長了,將之前等於個值得資訊聚集到了一起,所以提公升了檢索效率。
檢索模組的設計
在導航系統中,檢索主要應用於poi的檢索和address的檢索,並且對檢索的需求定義也是變化多段,不同的區域需求也是不盡相同。如何設計乙個好的檢索的模組,使之能夠應用於各種變化的需求也是非常重要。檢索的需求是變化最多的,即使談好的需求,到最後都會稍微的改變行為,有時改完了又要改回來,最後是2個不同的...
工作帶來的思考
2014 5月版本 事件 版本管理員離職 版本交付 新平台交接 開發人員程式已經完成,但是測試環境由開發人員裝版,整合環境直接拷貝了測試環境,沒有按照交付版本進行安裝,無法測試交付版本的完整性。專案管理方面 關鍵環節人員變動,需要及時安排跟進人員,並且並行一段時間直到新進人員完全接手工作,完成工作1...
工作的幾點思考
進入公司從一開始就已經有整整乙個半月。這是半個月做了什麼回憶。我真的不能告訴。該公司有沒有認真忙。通常不是乙個特別大的作業。有一點休閒。這一次,我的各種疾病就顯現出來了。玩玩手機。看看網頁,甚至和同事說說笑笑。每天晚上回去更是玩得昏天黑地。從來都不為第二天的事兒擔心。感覺自己不是乙個打工的,倒像是領...