2019寒假訓練營第三次做業

學習視頻課程

博客連接html

實驗題

熱身題

過程以下圖:


算法

基本題

瞭解新技術

什麼是Sketch

Sketch 是一種基於散列的數據結構,能夠在高速網絡環境中,實時地存儲流量特徵信息,只佔用較小的空間資源,而且具有在理論上可證實的估計精度與內存的平衡特性。經過設置散列函數,將具備相同散列值的鍵值數據存入相同的桶內,以減小空間開銷。桶內的數據值做爲測量結果,是真實值的近似。利用開闢二維地址空間,多重散列等技術減小散列衝突,提升測量結果的準確度。數組

  • 瓶頸:hash的計算開銷和堆的維護開銷,更新計數器和對包的頭部的處理。
  • 優點:節省內存,理論上的可靠性;經過哈希函數的設置、減小開銷。
  • 檢測大流:對流的大小設定一個閾值,當超過這個閾值時,報出大流。可是這個閾值一般是不可預知的,爲了防止誤報,須要檢測全部可能出現的流大小,以肯定這個閾值。因爲須要檢測的流很是多,因此在肯定閾值上要花費不少時間。

Count-min sketch的算法過程

Count-min 是一種典型的 sketch ,用到的是分類的思想:將具備相同哈希值的網絡流歸爲一類,並使用同一個計數器計數。取多個哈希函數的最小哈希值做爲網絡流的估計,實現簡單,空間開銷較少。
這個算法的技巧是:不存儲全部的不一樣的元素,只存儲它們Sketch的計數。它由多個哈希函數(f1……fn)和一張二維表組成。二維表的每一個存儲空間維護了一個計數器,其中每一個哈希函數分別對應表中的每一行。當一個網絡流到來時,須要通過每一個哈希函數 f1……fn 的處理,根據處理獲得的哈希值分別存入每一行對應哈希值的計數器。有幾個哈希函數,就要計算幾回。算完後,取這m個計數器中的最小值,做爲測量的最終值。
基本的思路是:建立一個長度爲 x 的數組,用來計數,初始化每一個元素的計數值爲 0;對於一個新來的元素,哈希到 0 到 x 之間的一個數,好比哈希值爲 i,做爲數組的位置索引;這是,數組對應的位置索引 i 的計數值加 1;那麼,這時要查詢某個元素出現的頻率,只要簡單的返回這個元素哈但願後對應的數組的位置索引的計數值便可。考慮到使用哈希,會有衝突,即不一樣的元素哈希到同一個數組的位置索引,這樣,頻率的統計都會偏大。
網絡

參考文獻:

http://www.javashuo.com/article/p-kmpatlvu-cz.html
https://www.sdnlab.com/22685.html
https://blog.csdn.net/pipisorry/article/details/64126199數據結構

因爲筆者能力不足,其他部分未能完成函數

相關文章
相關標籤/搜索