最近開始看《程式設計珠璣》了,傳說中的「看起來很眼熟啊,而過幾分鐘後又得出結論——以前從來沒讀過」,剛看了第一章的內容,作者思考問題的方式和角度確實很好,前言提示說不要看太快,習題要一道一道跟著做,自己做過再去看答案。
這一章的內容是磁碟排序的問題,用了位向量優化了排序(其實跟計數排序的原理差不多,就是利用所有的關鍵字在一定的範圍內,而這裡的關鍵字還是沒有重複的,弄乙個位向量,遇到乙個值就將它相應的位置置為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.解決思路 程式設計珠璣的變位詞程式要按照三個步驟來執行,其中前乙個步驟程式的輸出作為下乙個步驟程式的輸入 第一 程...