第一章 開篇 程式設計珠璣 讀書筆記

2021-05-21 22:22:07 字數 718 閱讀 9733

在朋友的推薦下開始讀這本書。讀技術類的書有個習慣,先看下目錄並決定要精讀還是泛讀。

感覺不錯,值得精讀。其中乙個不錯的方法就是寫讀書筆記,並堅持每一篇多多少少寫一些完整的**。

比如開篇的問題便是掌握和應用位運算的乙個很好的例子。作者巧妙地通過填充位圖(位向量)作為整數集合並遍歷完成排序的方式達到的時間和空間的雙贏。

問題描述如下:

輸入:乙個最多包含n

個正整數的檔案,每個數都小於n

,其中n

=107

。如果在輸入檔案中有任何整數重複出現就是致命錯誤。沒有其他資料與該整數相關聯。

輸出:按公升序排列的輸入整數的列表。

約束:最多有(大約)1 mb的記憶體空間可用,有充足的磁碟儲存空間可用。執行時間最多幾分鐘,執行時間為10秒就不需要進一步優化了。

還沒來得及往後看,我便用c++的bitset寫了一下**:

注釋部分是我去翻了sl裡bitset的原始檔後得出的結論,往下則看到了作者在習題2中直接使用邏輯與或移位等運算實現位向量。**可以說是短小精悍:

與bitset實現機制一樣,作者也是以32位整形數為單位進行位圖(位向量)填充的底層操作的。

總之,讀了第一章後對邏輯運算的使用及bitset的實現機制多了點了解。當然文中位圖排序思想的形成也不是一帶而過的,通過這個雙贏的例子,作者得出的結論是——對小問題的仔細分析有進可以得到明顯的實際益處。

其實說白了就是具體問題具體分析,還是**比較犀利。

《程式設計珠璣》讀書筆記第一章

解決乙個排序問題 輸入 乙個最多包含n個正整數的檔案,每個數都小於n,n 10 7,沒有重複資料,資料之間互不關聯。輸出 按公升序排列的整數列表。約束 最多有1mb記憶體空間可用,執行時間最多幾分鐘。條件 約束 空間有限,需要用特殊方法表示資料集合 方法 1.普通歸併排序 讀入一次,工作檔案多次讀寫...

程式設計珠璣 第一章 開篇

一,題目 如何在1mb的空間裡面對一千萬個整數進行排序?並且每個數都小於1千萬。實際上這個需要1.25mb的記憶體空間 這裡所說的空間是考慮用位圖表示法時,每一位代表乙個數,則1千萬 1024 1024 8 約為1.25mb 1mb總共有838,8608個可用位。所以估計也可以在1mb左右的空間裡面...

程式設計珠璣 第一章開篇

遇到乙個提問 我們需要提出更多的細節問題,準確的把問題描述清楚,其次才是對問題進行設計解決 位圖 位向量 適用於 輸入資料限制在相對較小的範圍內 資料沒有重複 而且對於每條記錄而言,除了單一資料外,沒有任何其他關聯資料。但是依然可以靈活應用。原理總結 1.對小問題的仔細分析有時可以得到明顯的實際益處...