青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

算法的力量:位運算在排序與搜索中的應用

楔子:
問題:假設一個文件中有9億條不重復的9位整數,現在要求對這個文件進行排序。

一般解題思路:
1、將數據導入到內存中
2、將數據進行排序 (比如插入排序、快速排序)
3、將排序好的數據存入文件

難題:
一個整數為4個字節
即使使用數組也需要900,000,000 * 4byte = 3.4G內存
對于32位系統,訪問2G以上的內存非常困難,而且一般設備也沒有這么多的物理內存
將數據完全導入到內存中的做法不現實

其他解決辦法:
1、導入數據庫運算
2、分段排序運算
3、使用bit位運算

解決方案一:數據庫排序
將文本文件導入到數據庫,讓數據庫進行索引排序操作后提取數據到文件

優點:操作簡單
缺點:運算速度慢,而且需要數據庫設備。

解決方案二:分段排序
操作方式:
規定一個內存大小,比如200M,200M可以記錄52428800條記錄,我們可以每次提取5000萬條記錄到文件進行排序,要裝滿9位整數需要20次,所以一共要進行20次排序,需要對文件進行20次讀操作

缺點:
 編碼復雜,速度也慢(至少20次搜索)

關鍵步驟:
先將整個9位整數進行分段,億條數據進行分成20段,每段5000萬條
在文件中依次搜索0~5000萬,50000001~1億……
將排序的結果存入文件

解決方案三:bit位操作
思考下面的問題:
一個最大的9位整數為999999999
這9億條數據是不重復的
可不可以把這些數據組成一個隊列或數組,讓它有0~999999999(10億個)元素
數組下標表示數值,節點中用0表示這個數沒有,1表示有這個數
判斷0或1只用一個bit存儲就夠了

聲明一個可以包含9位整數的bit數組(10億),一共需要10億/8=120M內存
把內存中的數據全部初始化為0
讀取文件中的數據,并將數據放入內存。比如讀到一個數據為341245909這個數據,那就先在內存中找到341245909這個bit,并將bit值置為1
遍歷整個bit數組,將bit為1的數組下標存入文件

關鍵代碼
檢查是某一個char里面(first)的第second位中存儲的數據是否為1

bool CompareBit (unsigned char first, int second)
{
 const static int mark_buf[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
 if (second > 8)
  return false;

 return  (first & mark_buf[second]) == mark_buf[second];
}

將某一個char(Desc)中的第source位置為1

bool WriteToBit (unsigned char *Desc, int source)
{
 const static int mark_buf[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};

 if (source > 8)
  return false;

 Desc[0] |= mark_buf[source];

 return true;
}

案例
在某個項目中,我們需要對2億條手機號碼刪除重復記錄(過濾號碼黑名單同樣有效)

工作難點就在于如何處理這2億條電話號碼,直接用哈希表存放手機號碼不大現實,即使經過優化,用一個unsigned int存放一條記錄,那也得需要2億*4=8億byte,遠超過32位系統的尋址能力

解決方案:
將電話號碼由12位單個數字組成的字符串轉換為一個unsigned int型數據(這個完全可能,手機號碼由前三位數字和后面八位數字組成,后面八位需要占到1~1000萬的空間,而前面用0~100的數字存儲已經足夠)
為簡單起見,默認為0~4G的數字都有可能分布號碼,為此我們分配4G/32=512M的內存
將這2億個號碼整理成unsigned int類型后按上述辦法存放在這塊內存中(比如13512345678我們整理后為112345678,我們找到內存中112345678bit的下標,并將此bit值設為1)
遍歷整個bit數組,記錄下所有的號碼,這些號碼即是不重復的手機號碼

總結
建立一個足夠大的bit數組當作hash表
以bit數組的下標來表示一個整數
以bit位中的0或1來表示這個整數是否在這個數組中存在
適用于無重復原始數據的搜索
原來每個整數需要4byte空間變為1bit,空間壓縮率為32倍
擴展后可實現其他類型(包括重復數據)的搜索

注意
由于操作系統和編程語言本身的限制,有可能內存足夠,但無法分配一塊連續大內存的情況,這樣的話可以申請多塊稍微小一點的內存,然后用鏈表或其他的方式連接起來使用

參考資料

 

posted on 2008-01-25 13:56 楊粼波 閱讀(302) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产日韩一区| 亚洲国产网站| 久久精品国产清高在天天线| 久久久国产精品一区二区中文| 激情国产一区| 欧美激情第二页| 亚洲图色在线| 免费观看不卡av| 99在线精品观看| 国产欧美日韩在线| 噜噜噜在线观看免费视频日韩| 亚洲精品视频免费在线观看| 亚洲免费在线看| 在线观看中文字幕亚洲| 欧美日韩免费区域视频在线观看| 亚洲一区视频在线观看视频| 毛片一区二区三区| 亚洲一区视频在线| 在线成人性视频| 欧美性猛片xxxx免费看久爱| 久久久99国产精品免费| 99re6热只有精品免费观看| 久久久久久久一区| 亚洲一本大道在线| 在线观看欧美日韩国产| 欧美日韩中文字幕日韩欧美| 久久久久9999亚洲精品| 中国av一区| 欧美激情一区二区三区蜜桃视频 | 欧美精品久久久久久久| 亚洲欧美日韩另类精品一区二区三区| 欧美成人午夜激情在线| 亚洲欧美一区二区激情| 亚洲黄页一区| 国产亚洲欧美另类一区二区三区| 欧美日本国产| 蜜桃av一区二区在线观看| 亚洲免费一级电影| 日韩视频在线一区二区| 欧美国产日韩一区| 久久久精品五月天| 亚洲欧美国产77777| 精品成人在线视频| 国产精品美女久久久久久久 | 欧美日韩国产系列| 久久久久久久久岛国免费| 亚洲一区二区三区四区在线观看 | 久久综合色一综合色88| 午夜精品一区二区三区四区| 99国产精品视频免费观看一公开| 欧美激情精品久久久六区热门| 久久久久久综合网天天| 性欧美1819sex性高清| 99热在线精品观看| 亚洲精品久久视频| 亚洲国产高清自拍| 在线日韩电影| 在线观看精品| 精品av久久707| 韩国av一区二区三区四区| 国产亚洲精品久| 国产丝袜一区二区| 国产欧美日韩精品一区| 国产精品午夜视频| 国产欧美欧美| 国产日韩精品一区二区| 国产偷久久久精品专区| 国产视频欧美| 今天的高清视频免费播放成人| 国产视频久久久久| 国内精品国语自产拍在线观看| 国产日韩av高清| 国产自产女人91一区在线观看| 国产一区三区三区| 国产一区二区丝袜高跟鞋图片| 国产亚洲成av人在线观看导航| 国产亚洲一区二区三区在线观看| 国产婷婷一区二区| 伊人婷婷欧美激情| 亚洲日本欧美在线| 亚洲图片自拍偷拍| 欧美在线观看网站| 久久视频在线看| 欧美激情一区二区三区全黄 | 亚洲一区二区av电影| 亚洲欧美国产制服动漫| 久久www免费人成看片高清 | 激情久久五月| 亚洲国内欧美| 中文日韩在线| 欧美制服第一页| 欧美成人高清视频| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品亚洲人成人网| 亚洲视频碰碰| 久久久久国产一区二区三区| 欧美插天视频在线播放| 欧美天堂亚洲电影院在线观看| 国产农村妇女精品一区二区| 在线观看久久av| 中文精品一区二区三区| 欧美一区二区视频观看视频| 欧美不卡一区| 中国成人黄色视屏| 久久午夜国产精品| 欧美性猛交一区二区三区精品| 国产一区二三区| 99精品欧美| 久久久久久夜| aⅴ色国产欧美| 久久精品国产一区二区三区| 欧美日韩国产小视频| 国产婷婷色综合av蜜臀av| 91久久精品久久国产性色也91| 亚洲欧美国产精品专区久久| 久久综合给合| 一区二区三区免费在线观看| 久久久夜精品| 国产精品女主播在线观看| 激情欧美一区| 亚洲欧美日韩在线不卡| 亚洲高清不卡在线观看| 性欧美精品高清| 欧美三级欧美一级| 亚洲黄色一区二区三区| 久久精品国产欧美激情| 亚洲精品欧美| 老司机一区二区| 国产真实乱子伦精品视频| 亚洲一区二区黄色| 亚洲国语精品自产拍在线观看| 欧美一区二区三区精品电影| 欧美日韩在线一区| 日韩系列欧美系列| 欧美成ee人免费视频| 欧美一区二区三区在线| 国产精品美女主播| 亚洲视频一二| 亚洲欧洲日本专区| 免费h精品视频在线播放| 国外成人性视频| 欧美一区二区三区在线看 | 久久激情一区| 国产日韩视频| 欧美有码视频| 亚洲直播在线一区| 国产精品久久久久久久久久ktv| 亚洲伦理在线免费看| 亚洲福利小视频| 久久尤物视频| 1000部精品久久久久久久久| 久久亚洲精品网站| 久久精品一区四区| 精久久久久久久久久久| 久久天堂av综合合色| 欧美在线啊v一区| 国产一区日韩欧美| 久久中文字幕导航| 久久午夜精品| 亚洲人成在线播放网站岛国| 欧美黄色网络| 欧美岛国激情| 一区二区三区欧美视频| 日韩一级在线观看| 欧美系列电影免费观看| 亚洲欧美一区二区三区极速播放| 一区二区三区视频观看| 国产精品区一区二区三| 欧美影视一区| 久久久精品日韩欧美| 亚洲国产精品一区在线观看不卡| 欧美福利网址| 欧美精品在线观看91| 中文日韩欧美| 亚洲在线视频观看| 韩国欧美一区| 欧美大片91| 欧美色区777第一页| 欧美影院久久久| 久久亚洲精品欧美| 日韩天天综合| 亚洲永久精品国产| 韩日成人在线| 亚洲精品欧美极品| 国产精品一区二区视频| 蜜臀久久99精品久久久久久9 | 欧美国产先锋| 欧美日韩一区二区在线播放| 欧美一区二区三区免费观看| 久久精品国产精品| 亚洲美女黄网| 欧美亚洲免费电影| 亚洲人成在线播放| 亚洲资源在线观看| 亚洲国产日韩一级| 一区二区精品| 在线观看一区二区视频| 夜夜精品视频一区二区| 在线国产精品播放| 亚洲一级片在线看|