企業級迴圈處理方案-減少窮舉

来源:http://www.cnblogs.com/gnool/archive/2016/07/13/5668384.html
-Advertisement-
Play Games

在生產環境下麵對紛繁的業務處理場景,我們知道要處理很多邏輯代碼,其中有個叫枚舉(也稱窮舉),當處理這類事務時,會產生大量的迴圈執行,而迴圈是最耗CPU的,大量的迭代計算,可直接拉低計算速度,怎麼處理這類問題呢? 對於事務的不定項的選擇幾率,都會有一定的規律,比如說事件的概率發生,根據概率論的知識,我 ...


在生產環境下麵對紛繁的業務處理場景,我們知道要處理很多邏輯代碼,其中有個叫枚舉(也稱窮舉),當處理這類事務時,會產生大量的迴圈執行,而迴圈是最耗CPU的,大量的迭代計算,可直接拉低計算速度,怎麼處理這類問題呢?

對於事務的不定項的選擇幾率,都會有一定的規律,比如說事件的概率發生,根據概率論的知識,我們可以去統計窮舉各項的頻率,按其大小依次排列,這樣前面的枚舉項就可消費大部分數據,剩下的低概率枚舉項就會以最小的執行次數執行。

比如說有1000000條數據,枚舉項有50個,假如平均25次能找到匹配項,就需要運行25000000次(2.5*10的7次方)

換種思路:假如第一枚舉項是是30%,2是25%,3是20%這樣前三項就消費750000*3+250000*25=8500000(8.5*10的6次方)

直接降一個數量級的執行次數,當然這些都是假設,是不太準的

但是思路就一樣,就是將發生概率高的事件統計優先處理,這既符合生活規律,又符合事務發展的客觀規律。

應用場景就太多了,例子:

       例子一:話說網路運營商想分析用戶的上網行為分析。他不會將網路上的各種資源都先收集一份,然後再去匹配每個用戶的某時的上網行為 

那樣做機器也會累的。所以先樣本調查,然後分析大部分的用戶行為特征,根據樣本獲取統計資源,然後這樣以最小的資源消費最大的數據,剩下的小概率事件。

      例子二:百度搜索詞條的建立,也會尋找樣本,統計大概率數據精準處理,作為頻繁搜索詞緩存,讓搜索快速而精準,當然那其他的陌生詞條利用機器學再處理。每天計算詞條的權重,這樣以權重排列,這樣就會讓大概率更加大概率,再次節約速度。

     總而言之,事務的發展規律都是一樣的,總會有大概率事件,事物的發展規律都是一樣的。符合二八定律。

     學會一門技術靠的是努力,精通一門技術靠的是領悟。感受生活,感受萬物,大道歸一。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這幾天做的項目要求用樹形表格的形式展示一部分數據,於是就想到了使用easyUI的treegrid組件,但幾經翻查各種資料,發現數據類型大多採取標準數據類型,即包含children元素的數據類型,小編查遍各種資料,幾經實驗,小編找到了一種使用簡單數據類型的展示樹形表格的方法。在這裡介紹給大家,僅供參考 ...
  • 關於文件狀態 一般倉庫中的文件可能存在於這4種狀態: 1)Untracked files → 文件未被跟蹤(A) 2)Untracked but not Change → 已跟蹤,但是未修改(B) 3)Changes but not updated → 已跟蹤,文件被修改,但並沒有添加到暫存區(C) ...
  • 問題癥狀: Android Studio 1.2 (Build 141.1890965) 新建工程,自動build完成後,Layout Editor無法預覽Layout文件,報錯內容: Rendering Problems The following classes could not be fou ...
  • 主要練習一下RelativeLayout和LinearLayout ...
  • 預設情況下,有以下控制項已經支持UIMenuController UITextField UITextView UIWedView 以UITable為例,說明點擊後彈出複製剪切粘貼等為例 使用的整體思路:(系統自帶的文字) 1、新建一個UILabel的類,如果想以後storyboard和Xib都可以用 ...
  • 最近在做的新聞客戶端用到了ViewPager,Android Studio如今集成的很好了,自動創建很多不必要寫的代碼。 在使用過程中碰到了一個很奇怪的事:ViewPager中載入的數據重覆 具體的看圖就明白了: 可以看到載入出來的數據,1、2頁面出現了重覆,而3恢復正常 在困擾許久之後博主在sta ...
  • 我們知道在iOS開發時,控制項UITextField有個placeholder屬性,UITextField和UITextView使用方法基本類似,有兩個小區別:1.UITextField單行輸入,而UITextView可以多行輸入。2.UITextField有placeholder屬性,而UIText ...
  • cocoapods簡介: cocoapods簡介: cocoapods 是iOS的類庫管理工具,可以讓開發者很方便集成各種第三方庫,而不用去網站上一個個下載,再一個個文件夾的拖進項目中,還得添加相關的系統依賴庫。只需要安裝好cocoapods,然後編寫好Podfile,最好在終端輸入一行命令,就可以 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...