網(wǎng)上有很多關(guān)于大小pos機(jī)區(qū)分,200W手機(jī)號(hào)碼中查找特定號(hào)碼的知識(shí),也有很多人為大家解答關(guān)于大小pos機(jī)區(qū)分的問題,今天pos機(jī)之家(www.shineka.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
大小pos機(jī)區(qū)分
之前寫了一個(gè)100W條記錄中查找特定數(shù)據(jù)的性能測(cè)試,和遍歷算法做了比較,二分法性能強(qiáng)很多.
今天我用二分法和bitmap數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)來比較下:
場(chǎng)景一:
在200W條手機(jī)號(hào)碼記錄中查找特定手機(jī)號(hào)碼的記錄需要花費(fèi)的時(shí)間:
可以看到查找手機(jī)號(hào)碼: 19998600000,兩種算法所用的時(shí)間差距還是比較明顯的,
bitmap強(qiáng)于二分法,效率大概是7倍,效果也比較明顯,bitmap屬于使用空間換時(shí)間,因此bitmap所要占用的內(nèi)存空間會(huì)更大,需要事先根據(jù)數(shù)據(jù)量和存儲(chǔ)的數(shù)據(jù)大小來申請(qǐng)存儲(chǔ)空間,對(duì)于兩種算法的取舍還是要基于當(dāng)前的業(yè)務(wù)場(chǎng)景
大家如果有更好的想法,歡迎交流學(xué)習(xí)!!!!!
下面就是go實(shí)現(xiàn)的bitmap算法的主要代碼:
type BitMap []byte
func NewBitMap(max int) BitMap {
return make([]byte, (max>>3)+1)
}
func (b BitMap) Set(n uint) {
if (n >> 3) > uint(len(b)) {
fmt.Println("數(shù)字太大超過最大存放范圍")
return
}
index := n >> 3
pos := n & 0x07
b[index] = b[index] | 1<<pos
}
func (b BitMap) Get(n uint) bool {
if (n >> 3) > uint(len(b)) {
fmt.Println("數(shù)字太大超過最大存放范圍")
return false
}
index := n >> 3
pos := n & 0x07
return b[index]&(1<<pos) != 0
}
以上就是關(guān)于大小pos機(jī)區(qū)分,200W手機(jī)號(hào)碼中查找特定號(hào)碼的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于大小pos機(jī)區(qū)分的知識(shí),希望能夠幫助到大家!
