日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#位图BitArray 小试牛刀

發布時間:2023/12/4 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#位图BitArray 小试牛刀 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面聊了布隆過濾器,回歸認識一下位圖BitMap,閱讀前文的同學應該發現了布隆過濾器本身就是基于位圖,是位圖的一種改進。

難纏的布隆過濾器,這次終于通透了

位圖

先看一個問題, 假如有1千萬個整數,整數范圍在1到1億之間,如何快速確定某個整數是否在這個1千萬個整數中呢?

乍一看是一個查找問題,循環、二分查找都是常規思路。

一個好的答案是數據結構和算法的完美結合, 基于題干上的特征和條件,我們是否有其他思路。

對于題干我們使用高中排列組合的思維:有1億個按順序編號的空籃子,我們拿出這1千萬個有數字的球,放進對應的籃子。

最后,所有的籃子有兩種狀態:有球/無球,我們要確定某個數字是否存在,就看對應籃子是否為空。

什么是位圖?每一位存放某種狀態,適用于海量數據,通常用于判斷數據是否存在。位圖的空間由數據的最大值決定。

位圖這種數據結構來大大節省內存的使用量。


我們只需要構造一個長度為1億的bit數組,將有球位置標記為1,無球位置默認記為0;這樣我們就將數字轉換成了一個被壓縮緊致的數組索引,1億bit數組不到16M空間。

確定某位置有球,O(1)的時間復雜度。

C# 有專業的位圖數組:BitArray

using System; using System.Collections; namespace Bitmap {class Program{static void Main(string[] args){var input = Console.ReadLine();var num = int.Parse(input);var bitmap = InitBitMap();if (bitmap.Get(num)){Console.WriteLine($"找到數字{num}");}else{Console.WriteLine($"未找到數字{num}");}}public static BitArray InitBitMap(){var myBA1 = new BitArray(10000);var arr1 = new int[] { 1, 2, 4, 6, 77, 77, 88, 99, 100, 500, 600, 700, 999, 8888 };foreach (int element in arr1){myBA1[element] = true;}return myBA1;}} }

BitArray是管理位值的緊湊數組,用布爾值表示,其中true表示位是開啟的(1),false表示位是關閉的(0), 是引用類型,位于System.Collections命名空間。

以上只是小試牛刀,我們針對原題再發散一下,如何找到以上1千萬整數中重復的數字?

還是籃子中放球的思路,這次我們要兩排籃子,也就是兩個BitMap,利用位AND運算(同時為True,結果才是True)找到兩排籃子中均有球的位置。

using System; using System.Collections; namespace Bitmap {class Program{static void Main(string[] args){var bitmap = InitBitMap();for (int i = 0; i < bitmap.Length; i++){if(bitmap[i] == true){Console.WriteLine(i);}}}public static BitArray InitBitMap(){var myBA1 = new BitArray(10000);var myBA2 = new BitArray(10000);var arr1 = new int[] { 1, 2, 4, 6, 77, 77, 88, 99, 100, 500, 600, 700, 999, 8888 };foreach (int element in arr1){if (myBA1[element] == false){myBA1[element] = true;}else{myBA2[element] = true;}}myBA1 = myBA1.And(myBA2);return myBA1;}} }

最后提醒各位:寶藏組件Redis天然支持位圖

我是有態度的馬甲, 不追熱點,原創輸出#八股文#硬核干貨#職場心得#,歡迎關注。

今天因為你的點贊,讓我元氣滿滿!

總結

以上是生活随笔為你收集整理的C#位图BitArray 小试牛刀的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。