在生產環境下麵對紛繁的業務處理場景,我們知道要處理很多邏輯代碼,其中有個叫枚舉(也稱窮舉),當處理這類事務時,會產生大量的迴圈執行,而迴圈是最耗CPU的,大量的迭代計算,可直接拉低計算速度,怎麼處理這類問題呢? 對於事務的不定項的選擇幾率,都會有一定的規律,比如說事件的概率發生,根據概率論的知識,我 ...
在生產環境下麵對紛繁的業務處理場景,我們知道要處理很多邏輯代碼,其中有個叫枚舉(也稱窮舉),當處理這類事務時,會產生大量的迴圈執行,而迴圈是最耗CPU的,大量的迭代計算,可直接拉低計算速度,怎麼處理這類問題呢?
對於事務的不定項的選擇幾率,都會有一定的規律,比如說事件的概率發生,根據概率論的知識,我們可以去統計窮舉各項的頻率,按其大小依次排列,這樣前面的枚舉項就可消費大部分數據,剩下的低概率枚舉項就會以最小的執行次數執行。
比如說有1000000條數據,枚舉項有50個,假如平均25次能找到匹配項,就需要運行25000000次(2.5*10的7次方)
換種思路:假如第一枚舉項是是30%,2是25%,3是20%這樣前三項就消費750000*3+250000*25=8500000(8.5*10的6次方)
直接降一個數量級的執行次數,當然這些都是假設,是不太準的
但是思路就一樣,就是將發生概率高的事件統計優先處理,這既符合生活規律,又符合事務發展的客觀規律。
應用場景就太多了,例子:
例子一:話說網路運營商想分析用戶的上網行為分析。他不會將網路上的各種資源都先收集一份,然後再去匹配每個用戶的某時的上網行為
那樣做機器也會累的。所以先樣本調查,然後分析大部分的用戶行為特征,根據樣本獲取統計資源,然後這樣以最小的資源消費最大的數據,剩下的小概率事件。
例子二:百度搜索詞條的建立,也會尋找樣本,統計大概率數據精準處理,作為頻繁搜索詞緩存,讓搜索快速而精準,當然那其他的陌生詞條利用機器學再處理。每天計算詞條的權重,這樣以權重排列,這樣就會讓大概率更加大概率,再次節約速度。
總而言之,事務的發展規律都是一樣的,總會有大概率事件,事物的發展規律都是一樣的。符合二八定律。
學會一門技術靠的是努力,精通一門技術靠的是領悟。感受生活,感受萬物,大道歸一。