數據處理面試題(3)

時間:2024-06-06 13:30:36 學人智庫 我要投稿
  • 相關推薦

數據處理面試題(3)

  }

數據處理面試題(3)

  *p = *p|(0x01<<(posi%BYTESIZE));//將該Bit位賦值1

  return;

  }

  void BitMapSortDemo()

  {

  //為了簡單起見,我們不考慮負數

  int num[] = {3,5,2,10,6,12,8,14,9};

  //BufferLen這個值是根據待排序的數據中最大值確定的

  //待排序中的最大值是14,因此只需要2個Bytes(16個Bit)

  //就可以了。

  const int BufferLen = 2;

  char *pBuffer = new char[BufferLen];

  //要將所有的Bit位置為0,否則結果不可預知。

  memset(pBuffer,0,BufferLen);

  for(int i=0;i<9;i++)

  {

  //首先將相應Bit位上置為1

  SetBit(pBuffer,num[i]);

  }

  //輸出排序結果

  for(int i=0;i

  {

  for(int j=0;j

  {

  //判斷該位上是否是1,進行輸出,這里的判斷比較笨。

  //首先得到該第j位的掩碼(0x01<< p="">

  //位和此掩碼作與操作。最后判斷掩碼是否和處理后的

  //結果相同

  if((*pBuffer&(0x01<

  {

  printf("%d ",i*BYTESIZE + j);

  }

  }

  pBuffer++;

  }

  }

  int _tmain(int argc, _TCHAR* argv[])

  {

  BitMapSortDemo();

  return 0;

  }

  可進行數據的快速查找,判重,刪除,一般來說數據范圍是int的10倍以下

  基本原理及要點

  使用bit數組來表示某些元素是否存在,比如8位電話號碼

  擴展

  Bloom filter可以看做是對bit-map的擴展(關于Bloom filter,請參見:海量數據處理之Bloom filter詳解)。

  問題實例

  1)已知某個文件內包含一些電話號碼,每個號碼為8位數字,統計不同號碼的個數。

  8位最多99 999 999,大概需要99m個bit,大概10幾m字節的內存即可。 (可以理解為從0-99 999 999的數字,每個數字對應一個Bit位,所以只需要99M個Bit==1.2MBytes,這樣,就用了小小的1.2M左右的內存表示了所有的8位數的電話)

  2)2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。

  將bit-map擴展一下,用2bit表示一個數即可,0表示未出現,1表示出現一次,2表示出現2次及以上,在遍歷這些數的時候,如果對應位置的值是0,則將其置為1;如果是1,將其置為2;如果是2,則保持不變。或者我們不用2bit來進行表示,我們用兩個bit-map即可模擬實現這個2bit-map,都是一樣的道理。

【數據處理面試題(3)】相關文章:

IT數據處理員英文求職信06-08

Microsoft面試題09-04

iOS面試題07-10

公司面試題09-12

hibernate面試題10-18

英語面試題精選06-13

小升初面試題06-10

PHP面試題10-14

IT行業有關數據處理的英文求職信09-25

小升初面試題型08-24

国产v亚洲v天堂无码网站,综合亚洲欧美日韩一区二区,精品一级毛片A久久久久,欧美一级待黄大片视频
亚洲成年在线影院 | 飘花国产午夜理论片不卡 | 日本精品视频在线观看 | 亚洲一区自拍偷拍 | 中文字幕乱码中文乱码二区 | 亚洲男人天堂视频在线 |