-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
編程珠璣(第2版) 版權信息
- ISBN:9787115179289
- 條形碼:9787115179289 ; 978-7-115-17928-9
- 裝幀:簡裝本
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
編程珠璣(第2版) 本書特色
歷史上*偉大的計算機科學著作之一,融深邃思想、實戰技術與趣味軼事于一爐的奇書,帶你真正領略計算機科學之癥狀!
“《編程珠璣》第1版是對我職業生涯早期影響*大的書之一,其中的許多真知灼見多年之后仍然使我受益匪淺。Jon在第2版中對素材進行了大量更新,許多新內容讓我耳目一新!
——Steve McConnell,軟件工程大師,IEEE Software前主編,《代碼大全》作者“對每一位遇到的程序員,我都會毫不遲疑地建議他閱讀并不斷重讀這部經典之作!
——Stashdot
多年以來。當程序員們推選出*心愛的計算機圖書時,《編程珠璣》總是位于前列。正如自然界里珍珠出自細沙對牡蠣的磨礪。計算機科學大量Jon Bentley以其獨有的洞察力和創造力,從磨礪程序員的實際問題中凝結出一篇篇不朽的編程“珠璣”,成為世界計算機界名刊《ACM通訊》歷史上*受歡迎的專欄,*終結集為兩部不朽的計算機科學經典名著,影響和激勵著一代又一代程序員和計算機科學工作者。本書為**卷,主要討論計算機科學中*本質的問題:如何正確選擇和高效地實現算法。
在書中。作者選取許多具有典型意義的復雜編程和算法問題,生動描繪了歷史上眾大師們在探索解決方案中發生的軼事、走過的彎路和不斷精益求精的歷程,引導讀者像真正的程序員和軟件工程師那樣富于創新性地思考,并透徹闡述和總結了許多獨特而精妙的設計原則、思考和解決問題的方法以及實用程序設計技巧。解決方案的代碼均以C/C++語言編寫。不僅有趣。而且有很大的實戰示范意義。每章后所附習題極具挑戰性和啟發性,書末給出了簡潔的解答。
作者簡介:
Jon Bentley,世界著名計算機科學家,被譽為影響算法發展的十位大師之一。他先后任職于卡內基-梅隆大學(1976-1982)、貝爾實驗室(1982-2001)和Avaya實驗室(2001年至今)。在卡內基-梅隆大學擔任教授期間,他培養了包括Tcl語言設計者John Ousterhout、Java語言設計者James Gosling、《算法導論》作者之- Charles Leisersond在內的許多計算機科學大家。2004年榮獲Dr.Dobb's程序設計卓越獎。
編程珠璣(第2版) 內容簡介
本書是計算機科學方面的經典名著。書的內容圍繞程序設計人員面對的一系列實際問題展開。作者Jon Bentley 以其獨有的洞察力和創造力,引導讀者理解這些問題并學會解決方法,而這些正是程序員實際編程生涯中至關重要的。本書的特色是通過一些精心設計的有趣而又頗具指導意義的程序,對實用程序設計技巧及基本設計原則進行了透徹而睿智的描述,為復雜的編程問題提供了清晰而完備的解決思路。本書對各個層次的程序員都具有很高的閱讀價值。
編程珠璣(第2版) 目錄
第1章 開篇
1.1 一次友好的對話
1.2 準確的問題描述
1.3 程序設計
1.4 實現概要
1.5 原理
1.6 習題
1.7 深入閱讀
第2章 啊哈!算法
2.1 三個問題
2.2 無處不在的二分搜索
2.3 基本操作的威力
2.4 排序
2.5 原理
2.6 習題
2.7 深入閱讀
2.8 變位詞程序的實現(邊欄)
第3章 數據決定程序結構
3.1 一個調查程序
3.2 格式信函編程
3.3 一組示例
3.4 結構化數據
3.5 用于特殊數據的強大工具
3.6 原理
3.7 習題
3.8 深入閱讀
第4章 編寫正確的程序
4.1 二分搜索的挑戰
4.2 編寫程序
4.3 理解程序
4.4 原理
4.5 程序驗證的角色
4.6 習題
4.7 深入閱讀
第5章 編程小事
5.1 從偽代碼到C程序
5.2 測試工具
5.3 斷言的藝術
5.4 自動測試
5.5 計時
5.6 完整的程序
5.7 原理
5.8 習題
5.9 深入閱讀
5.10 調試(邊欄)
第二部分 性能
第6章 程序性能分析
6.1 實例研究
6.2 設計層面
6.3 原理
6.4 習題
6.5 深入閱讀
第7章 粗略估算
7.1 基本技巧
7.2 性能估計
7.3 安全系數
7.4 Little定律
7.5 原理
7.6 習題
7.7 深入閱讀
7.8 日常生活中的速算(邊欄)
第8章 算法設計技術
8.1 問題及簡單算法
8.2 兩個平方算法
8.3 分治算法
8.4 掃描算法
8.5 實際運行時間
8.6 原理
8.7 習題
8.8 深入閱讀
第9章 代碼調優
9.1 典型的故事
9.2 急救方案集錦
9.3 大手術——二分搜索
9.4 原理
9.5 習題
9.6 深入閱讀
第10章 節省空間
10.1 關鍵在于簡單
10.2 示例問題
10.3 數據空間技術
10.4 代碼空間技術
10.5 原理
10.6 習題
10.7 深入閱讀
10.8 巨大的節省(邊欄)
第三部分 應用
第11章 排序
11.1 插入排序
11.2 一種簡單的快速排序
11.3 更好的幾種快速排序
11.4 原理
11.5 習題
11.6 深入閱讀
第12章 取樣問題
12.1 問題
12.2 一種解決方案
12.3 設計空間
12.4 原理
12.5 習題
12.6 深入閱讀
第13章 搜索
13.1 接口
13.2 線性結構
13.3 二分搜索樹
13.4 用于整數的結構
13.5 原理
13.6 習題
13.7 深入閱讀
13.8 一個實際搜索問題(邊欄)
第14章 堆
14.1 數據結構
14.2 兩個關鍵函數
14.3 優先級隊列
14.4 一種排序算法
14.5 原理
14.6 習題
14.7 深入閱讀
第15章 字符串
15.1 單詞
15.2 短語
15.3 生成文本
15.4 原理
15.5 習題
15.6 深入閱讀
第1版跋
第2版跋
附錄A 算法分類
附錄B 估算測試
附錄C 時空開銷模型
附錄D 代碼調優法則
附錄E 用于搜索的C++類
部分習題提示
部分習題答案
索引
編程珠璣(第2版) 節選
**部分 基礎
第1章 開篇
1.2 準確的問題描述
對程序員來說,這些需求加起來就是:“如何給磁盤文件排序?”在試圖解決這個問題之前,先將已知條件組織成一種更客觀、更易用的形式。
輸入:一個*多包含n個正整數的文件,每個數都小于n,其中n=107。如果在輸入文件中有任何整數重復出現就是致命錯誤。沒有其他數據與該整數相關聯。
輸出:按升序排列的輸入整數的列表。
約束:*多有(大約)1MB的內存空間可用,有充足的磁盤存儲空間可用。運行時間*多
幾分鐘,運行時間為10秒就不需要進一步優化了。
請花上一分鐘思考一下該問題的規范說明,F在你打算給程序員什么樣的建議呢?
1.3 程序設計
顯而易見的方法是以一般的基于磁盤的歸并排序程序為起點,但是要對其進行調整,因為我們是對整數進行排序。這樣就可以將原來的200行程序減少為幾十行,同時也使得程序運行得更快,但是完成程序并使之運行可能仍然需要幾天的時間。
另一種解決方案更多地利用了該排序問題的特殊性。如果每個號碼都使用7個字節來存儲,那么在可用的1MB存儲空間里大約可以存143 000個號碼。如果每個號碼都使用32位整數來表示的話,在1MB存儲空間里就可以存儲250000個號碼。因此,可以使用遍歷輸入文件40趟的程序
來完成排序。在**趟遍歷中,將0至249999之間的任何整數都讀入內存,并對這(*多)250000個整數進行排序,然后寫到輸出文件中。第二趟遍歷排序250000至499999之間的整數,依此類推,到第40趟遍歷的時候對9750000至9999999之問的整數進行排序。對內存中的排序來說,快速排序會相當高效,而且僅僅需要20行代碼。于是,整個程序就可以通過一兩頁紙的代碼實現。該程序擁有所期望的特性——不必考慮使用中間磁盤文件;不幸的是,為此所付出的代價是要讀取輸入文件40次。
1.5 原理
那個程序員打電話把他的問題告訴我,然后我們花了大約一刻鐘時問明確了問題所在,并找到了位圖解決方案。他花了幾個小時來實現這個幾十行代碼的程序。該程序遠遠優于我們在電話剛開始時所擔心的需要花費一周時間編寫的幾百行代碼的那個程序。而且程序執行得很快:磁盤上的歸并排序可能需要許多分鐘的時間,該程序所需的時間只比讀取輸入和寫入輸出所需的時間多一點點——大約10秒鐘。答案3包含了對完成該任務的幾種不同程序的計時細節。
從這些事實中可以總結出該實例研究所得到的**個結論:對小問題的仔細分析有時可以得到明顯的實際益處。在該實例中,幾分鐘的仔細研究可以大幅削減代碼的長度、程序員時間和程序運行時間。Chuck Yeager將軍(**個超音速飛行的人)贊揚一架飛機的機械系統時用的詞是“結構簡單、部件很少、易于維護、非常堅固”,該程序擁有同樣的屬性。然而,當規范說明的某些因素發生改變時,該程序的特殊結構將很難修改。除了需要精巧的編程以外,該實例闡明了如下一般原理。
正確的問題。明確問題,這場戰役就成功了90%——我很慶幸程序員沒有滿足于我給出的**個程序。一旦正確理解了問題,習題10、習題11和習題12的答案都會很優雅。在查看提示和答案以前,請努力思考這些問題。
位圖數據結構。該數據結構描述了一個有限定義域內的稠密集合,其中的每一個元素*多出現一次并且沒有其他任何數據與該元素相關聯。即使這些條件沒有完全滿足(例如,存在重復元素或額外的數據),也可以用有限定義域內的作為一個表項更復雜的表格的索引,見習題6和習題8。
多趟算法。這些算法多趟讀入其輸入數據,每次完成一步。在1.3節已經見到了一個40趟算法,習題5鼓勵讀者去完成一個兩趟算法。
時間一空間折中與雙贏。編程文獻和理論中充斥著時間一空間的折中:通過使用更多的時間,可以減少程序所需的空間。例如,答案5中的兩趟算法讓程序運行時間加倍從而使空間減半。但我的經驗常常是這樣的:減少程序的空間需求也會減少其運行時間?臻g上高效的位圖結構顯著地減少了排序的運行時問。空間需求的減少之所以會導致運行時間的減少,有兩個原因:需要處理的數據變少了,意味著處理這些數據所需的時間也變少了;同時將這些數據保存在內存中而不是磁盤上,進一步避免了磁盤訪問的時間。當然了,只有在原始的設計遠非*佳方案時,才有可能時空雙贏。
簡單的設計。Antoine de Saint—Exupery是法國作家兼飛機設計師,他曾經說過:“設計者確定其設計已經達到了完美的標準不是不能再增加任何東西,而是不能再減少任何東西!备嗟某绦騿T應該使用該標準來檢驗自己完成的程序。簡單的程序通常比具有相同功能的復雜程序更可靠、更安全、更健壯、更高效,而且易于實現和維護。
……
編程珠璣(第2版) 作者簡介
Jon Bentley,世界著名計算機科學家,被譽為影響算法發展的十位大師之一。他先后任職于卡內基—梅隆大學(1976—1982)、貝爾實驗室(1982—2001)和Avaya實驗室(2001年至今)。在卡內基—梅隆大學擔任教授期間,他培養了包括Tcl語言設計者John Ousterhout、Java語言設計者James Gosling、《算法導論》作者之一Charles Leiserson在內的許多計算機科學大家。2004年榮獲Dr.Dobb's程序設計卓越獎。
錢麗艷,北京大學信息科學技術學院基礎實驗教學研究所軟件實驗室主任、工程師,畢業于國防科技大學。
- >
上帝之肋:男人的真實旅程
- >
經典常談
- >
中國人在烏蘇里邊疆區:歷史與人類學概述
- >
莉莉和章魚
- >
龍榆生:詞曲概論/大家小書
- >
大紅狗在馬戲團-大紅狗克里弗-助人
- >
月亮虎
- >
唐代進士錄