Go語言實現bitmap演算法

2022-07-09 01:18:14 字數 2405 閱讀 9580

有關bitmap演算法的介紹資料網上很多,這裡不贅述,各種語言的實現也不少,但是go語言版的bitmap不多,本文就來寫乙個go版的bitmap實現。

首先建立乙個 bitmap.go 檔案,定義乙個bitmap結構體,再提供一些操作方法。詳細**如下:

package bitmap

import (

"fmt"

"strings"

)const (

bitsize = 8

)var bitmask = byte

// 首字母小寫 只能呼叫 工廠函式 建立

type bitmap struct

// 建立工廠函式

func newbitmap(maxnum uint64) *bitmap

}// 填入數字

func (this *bitmap) set(num uint64)

// 清除填入的數字

func (this *bitmap) reset(num uint64)

// 數字是否在位圖中

func (this *bitmap) test(num uint64) bool

bitpos := num % bitsize

// 右移 bitpos 位 和 1 進行 按位與

return !(this.bits[byteindex]&bitmask[bitpos] == 0)

}func (this *bitmap) offset(num uint64) (byteindex uint64, bitpos byte)

bitpos = byte(num % bitsize) // bit位置

return byteindex, bitpos

}// 點陣圖的容量

func (this *bitmap) size() uint64

// 是否空位圖

func (this *bitmap) isempty() bool

// 是否已填滿

func (this *bitmap) isfully() bool

// 已填入的數字個數

func (this *bitmap) count() uint64

// 獲取填入的數字切片

func (this *bitmap) getdata() uint64

}return data

}func (this *bitmap) string() string

return sb.string()

}func bytetobinarystring(data byte) string else

}return sb.string()

}

**中有注釋,很容易看懂。下面寫測試**,測試這個bitmap。

package main

import (

"bitmap"

"fmt"

)func main()

var maxnum uint64 = 9

bm := bitmap.newbitmap(maxnum)

for _, v := range array

bm.set(5)

fmt.println(bm.isfully())

fmt.println(bm.isempty())

fmt.println("bitmap 中存在的數字:")

fmt.println(bm.getdata())

fmt.println("bitmap 中的二進位制串")

fmt.println(bm.string())

fmt.println("bitmap 中的數字個數:", bm.count())

fmt.println("bitmap size:", bm.size())

fmt.println("test(0):", bm.test(0))

bm.reset(5)

fmt.println(bm.string())

fmt.println("test(5):", bm.test(5))

fmt.println(bm.getdata())

}

測試**的輸出如下:

true

false

bitmap 中存在的數字:

[0 1 2 3 4 5 6 7 8]

bitmap 中的二進位制串

00000001 11111111

bitmap 中的數字個數: 9

bitmap size: 16

test(0): true

00000001 11011111

test(5): false

[0 1 2 3 4 6 7 8]

c語言實現bitmap

bit.h ifndef bit h define bit h 儲存bitmap的結構體 儲存的順序從左至右 struct bits typedef struct bits bits 獲得bitmap length bitmap的長度 return 所有位都初始化為0的bitmap bits bit...

LRU演算法的GO語言實現

lru演算法原理,來自 1.假設我們使用雜湊鍊錶來快取使用者資訊,目前快取了4個使用者,這4個使用者是按照時間順序依次從鍊錶右端插入的 2.此時,業務方訪問使用者5,由於雜湊鍊錶中沒有使用者5的資料,我們從資料庫中讀取出來,插入到快取當中。這時候,鍊錶中最右端是最新訪問到的使用者5,最左端是最近最少...

Go語言實現 常見排序演算法

氣泡排序 時間複雜度 o n 2 穩定性 穩定 氣泡排序 相鄰兩位交換,12交換,23交換,34交換,把最大的數放到最右邊 利用flag標記可以避免無效迴圈 func bubblesort arr int true表示序列已經有序,直接退出,不用繼續迴圈 false表示本次迴圈發生了交換,需要繼續判...