午夜拍鍵驚奇
          子夜 編程 代碼與我同在
          posts - 48,comments - 118,trackbacks - 79
          放假之前從圖書館借來《編程珠璣》,開篇便把我震住,作者以位圖排序優(yōu)雅地解決了一個(gè)現(xiàn)實(shí)問題:
          有3000萬個(gè)沒有重復(fù)的電話號(hào)碼,1M內(nèi)存,外存比較充裕,需要將這3000萬個(gè)電話排序
          借此作者引出了位圖排序:
          位圖排序是指以一個(gè)N位長(zhǎng)的串,每位上以“1”或“0”表示需要排序的集合(后簡(jiǎn)稱“集合”)中的數(shù)。比如集合為{2,7,4,9,1,10},則生成一個(gè)10位的串,將第2、7、4、9、1、10位置為“1”,其余位置為“0”,這樣當(dāng)把串中所有位都置完后,排序也自動(dòng)完成了(因?yàn)榇南聵?biāo)是有序的):1101001011
          位圖排序的代碼如下:

          public void bitmapSort(int[] set){
            
          int max=max(set);
            
          int[] array=new int[max];
            
            
          for(int i=0;i<array.length;i++)
              array[i]
          =0;

            
          for(int i=0;i<set.length;i++)
              array[
          set[i]]=1;

            
          for(int i=0;i<array.length;i++){
              
          if(array[i]==1)
                System.
          out.println(i+” ”);
            }

          }


          private int max(int[] set){
            
          // return the maxium integer of the set
          }


          可以看出,位圖排序的時(shí)間復(fù)雜度是O(n)的,比一般的排序都快,但它是以空間換時(shí)間(需要一個(gè)N位的串),而且有一些限制,比如排序前集合大小最好已知,而且集合中元素的最大重復(fù)次數(shù)必須已知,最好是稠集數(shù)據(jù)(不然空間浪費(fèi)很大)。
          posted on 2005-02-13 22:17 ^ Mustang ^ 閱讀(1490) 評(píng)論(4)  編輯  收藏 所屬分類: 基礎(chǔ)理論

          FeedBack:
          # re: 位圖(bitmap)排序
          2005-12-16 13:44 | 我的萬花@
          絕!不知道誰發(fā)明的  回復(fù)  更多評(píng)論
            
          # re: 位圖(bitmap)排序
          2005-12-16 13:45 | 我的萬花@
          不過看你寫的文字看不懂,還是要看代碼,嘿嘿
            回復(fù)  更多評(píng)論
            
          # re: 位圖(bitmap)排序
          2008-10-04 12:14 | haibo
          這段代碼是錯(cuò)的,不能用integer array, 只能用BitArray, 否則,在內(nèi)存受限的情況下,你是不能把所有的的數(shù)裝下的。所謂的位圖排序也是這個(gè)意思  回復(fù)  更多評(píng)論
            
          # re: 位圖(bitmap)排序
          2009-08-27 12:51 | zhangdp
          為了更節(jié)省時(shí)間 應(yīng)該用 BitArray  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南宁市| 奎屯市| 台北市| 沙河市| 长治县| 靖安县| 鄄城县| 聊城市| 商水县| 神木县| 巴东县| 焦作市| 营口市| 涞源县| 得荣县| 东港市| 张掖市| 莱芜市| 赞皇县| 唐河县| 河曲县| 陆丰市| 潞城市| 长寿区| 乐亭县| 平舆县| 普兰县| 信丰县| 长顺县| 广宗县| 彩票| 巴林左旗| 建湖县| 常德市| 邓州市| 沛县| 故城县| 德钦县| 邢台县| 东宁县| 南阳市|