程式設計珠璣 自己實現位向量類

2021-07-10 09:52:23 字數 1160 閱讀 9246

最近開始看《程式設計珠璣》了,傳說中的「看起來很眼熟啊,而過幾分鐘後又得出結論——以前從來沒讀過」,剛看了第一章的內容,作者思考問題的方式和角度確實很好,前言提示說不要看太快,習題要一道一道跟著做,自己做過再去看答案。

這一章的內容是磁碟排序的問題,用了位向量優化了排序(其實跟計數排序的原理差不多,就是利用所有的關鍵字在一定的範圍內,而這裡的關鍵字還是沒有重複的,弄乙個位向量,遇到乙個值就將它相應的位置置為1,自然可以有o(n)的做法。不過如果範圍太過分散就沒辦法了,因為浪費的記憶體太多了)。

下面是我自己實現的位向量的類,感覺挺使用的,效率也高,不過沒有做過多的exception的handle(比如申請不到想要的記憶體之類的),只做了下標範圍的檢查。

#include 

#include

#include

using

namespace

std;

class mybitset

public:

mybitset(int size): size(size)

// set the bit to be 0

void reset(int index)

// set the bit to be 1

void

set(int index)

// test the value of the bit

bool test(int index)

// a shortcut to test the value of the bit

bool

operator (int index)

// transform the data into a string

string str()

// display the data

void print()

};int main()

s.set(4);

s.set(5);

s.set(6);

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

if (s[i])

printf("1");

else

printf("0");

printf("\n");

return

0;}

程式設計珠璣 位排序 bitsort

在 程式設計珠璣 一書上,有一題是將一堆不重複的數進行排序,這些數的值大小位於 0,10000000 然後作者在書後給出的答案確實很精闢,利用位排序將這個問題輕而易舉的解決了。首先弄懂i shift相當於i 32,i mask相當於i 32.題目中說了 replace above 2lines wi...

實現位向量 1 6 2

如何使用位邏輯 例如與 或 移位 來實現位向量?解答 如下所示。如何使用位邏輯運算 例如與 或 移位 來實現位向量 from programming pearls by jon bentley bitsort.c bitmap sort from column 1 sort distinct int...

程式設計珠璣 變位詞程式的實現

這個程式的實現有助於壓縮key的大小,使查詢效率更高 1.問題描述 給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。2.解決思路 程式設計珠璣的變位詞程式要按照三個步驟來執行,其中前乙個步驟程式的輸出作為下乙個步驟程式的輸入 第一 程...