2018-08-26

Bitmap算法


我們可能在算法書中都看過觉壶,對于海量數(shù)據(jù)的處理是有一些獨特的算法的叉讥,通常來說如下六種:


序號 算法

1 分而治之/hash映射 + hash統(tǒng)計 + 堆/快速/歸并排序

2 雙層桶劃分

3 Bloom filter/Bitmap

4 Trie樹/數(shù)據(jù)庫/倒排索引

5 外排序

6 分布式處理之Hadoop/Mapreduce

這里我介紹的是Bitmap,BitMap就是用一個bit位來標記某個元素對應的Value泣懊, 而Key即是該元素吁津,該方法在快速查找、去重晌块、排序、壓縮數(shù)據(jù)上都有應用

假設我們要對0-7內的5個元素(4,7,2,5,3)排序帅霜,因為要表示8個數(shù)匆背,我們就只需要8個bit(1Bytes)。


元素 無 無 2 3 4 5 無 7

占位 × × √ √ √ √ × √

地址 0 1 2 3 4 5 6 7

這樣就排序完成了义屏,該方法難在數(shù)對二進制位的映射靠汁,因為類型到底多長是和平臺和環(huán)境有關的蜂大,我們假定int是32bit,之后假設我們現(xiàn)在有320個數(shù)據(jù)需要排序,則int a[1+10]勃教,a[0]可以表示從0-31的共32個數(shù)字捎迫,a[1]可以表示從32-61的共32個數(shù)字,我們可以想象這是一個二位數(shù)組澳叉,但是其實并不是

我們可以很容易得出隙咸,對于一個十進制數(shù)n沐悦,對應在數(shù)組a[n/32][n%32]中


# encoding: utf-8


from collections import namedtuple

from copy import copy


Colour = namedtuple('Colour','r,g,b')

Colour.copy = lambda self: copy(self)


black = Colour(0,0,0)

white = Colour(255,255,255) # Colour ranges are not enforced.


class Bitmap():

? ? def __init__(self, width = 40, height = 40, background=white):

? ? ? ? assert width > 0 and height > 0 and type(background) == Colour

? ? ? ? self.width = width

? ? ? ? self.height = height

? ? ? ? self.background = background

? ? ? ? self.map = [[background.copy() for w in range(width)] for h in range(height)]


? ? def fillrect(self, x, y, width, height, colour=black):

? ? ? ? assert x >= 0 and y >= 0 and width > 0 and height > 0 and type(colour) == Colour

? ? ? ? for h in range(height):

? ? ? ? ? ? for w in range(width):

? ? ? ? ? ? ? ? self.map[y+h][x+w] = colour.copy()


? ? def chardisplay(self):

? ? ? ? txt = [''.join(' ' if bit==self.background else '@'

? ? ? ? ? ? ? ? ? ? ? for bit in row)

? ? ? ? ? ? ? for row in self.map]

? ? ? ? # Boxing

? ? ? ? txt = ['|'+row+'|' for row in txt]

? ? ? ? txt.insert(0, '+' + '-' * self.width + '+')

? ? ? ? txt.append('+' + '-' * self.width + '+')

? ? ? ? print('\n'.join(reversed(txt)))


? ? def set(self, x, y, colour=black):

? ? ? ? assert type(colour) == Colour

? ? ? ? self.map[y][x]=colour


? ? def get(self, x, y):

? ? ? ? return self.map[y][x]



bitmap = Bitmap(20,10)

bitmap.fillrect(4, 5, 6, 3)

assert bitmap.get(5, 5) == black

assert bitmap.get(0, 1) == white

bitmap.set(0, 1, black)

assert bitmap.get(0, 1) == black

bitmap.chardisplay()

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市五督,隨后出現(xiàn)的幾起案子藏否,更是在濱河造成了極大的恐慌,老刑警劉巖充包,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件副签,死亡現(xiàn)場離奇詭異,居然都是意外死亡基矮,警方通過查閱死者的電腦和手機淆储,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來家浇,“玉大人本砰,你說我怎么就攤上這事「直” “怎么了点额?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長莺琳。 經(jīng)常有香客問我咖楣,道長,這世上最難降的妖魔是什么芦昔? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任诱贿,我火速辦了婚禮,結果婚禮上咕缎,老公的妹妹穿的比我還像新娘珠十。我一直安慰自己,他們只是感情好凭豪,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布焙蹭。 她就那樣靜靜地躺著,像睡著了一般嫂伞。 火紅的嫁衣襯著肌膚如雪孔厉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天帖努,我揣著相機與錄音撰豺,去河邊找鬼。 笑死拼余,一個胖子當著我的面吹牛污桦,可吹牛的內容都是我干的。 我是一名探鬼主播匙监,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼凡橱,長吁一口氣:“原來是場噩夢啊……” “哼小作!你這毒婦竟也來了?” 一聲冷哼從身側響起稼钩,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顾稀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坝撑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體础拨,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年绍载,在試婚紗的時候發(fā)現(xiàn)自己被綠了诡宗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡击儡,死狀恐怖塔沃,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情阳谍,我是刑警寧澤蛀柴,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站矫夯,受9級特大地震影響鸽疾,放射性物質發(fā)生泄漏。R本人自食惡果不足惜训貌,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一制肮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧递沪,春花似錦豺鼻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檩奠,卻和暖如春桩了,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埠戳。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工井誉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乞而。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓送悔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爪模。 傳聞我的和親對象是個殘疾皇子欠啤,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • 現(xiàn)在分析到YYImage 首先看文件 YYImage YYFrameImage YYSpriteSheetImag...
    充滿活力的早晨閱讀 2,545評論 0 3
  • 留山鎮(zhèn)中四制四考方案(試行) 為了充分調動和發(fā)揮廣大教師獻身教育事業(yè)的積極性和創(chuàng)造性,全面提高教育教學質量,特制定...
    阿偉_斫輪之手閱讀 497評論 0 0
  • 8月25日 萬妮亞復盤267天 一、健康管理(目標11:00-6:00) 2:30-7:30起床睡屋灌,早睡重度患者 ...
    敢比會重要閱讀 140評論 0 0
  • It's Sunday. Laura stayed close to the house. She could s...
    Mr_Oldman閱讀 84評論 0 0
  • 一直不知道怎么稱呼他洁段,不知道該給他起個什么昵稱。他總能給我?guī)眢@喜共郭,總是用37°溫暖我的心祠丝,總能猜透我心中所想。會...
    小小點滴閱讀 212評論 0 0