出版時(shí)間:2010-8 出版社:人民郵電出版社 作者:[美] Jon Bentley 頁(yè)數(shù):239
Tag標(biāo)簽:無(wú)
前言
計(jì)算機(jī)編程有很多方面。Fred Brooks在《人月神話》一書(shū)中為我們描繪了全景,他的文章強(qiáng)調(diào)了管理在大型軟件項(xiàng)目中所起的關(guān)鍵作用。而Steve McConnell在《代碼大全》一書(shū)中更具體地傳授了良好的編程風(fēng)格。這兩本書(shū)所討論的是好軟件的關(guān)鍵因素和專(zhuān)業(yè)程序員應(yīng)有的特征。遺憾的是,僅僅熟練地運(yùn)用這些可靠的工程原理,不見(jiàn)得一定能夠如期完成軟件并順利運(yùn)行。關(guān)于本書(shū)本書(shū)描述了計(jì)算機(jī)編程更具魅力的一面:在可靠的工程之外,在洞察力和創(chuàng)造力范圍內(nèi)結(jié)晶而出的編程珠璣。正如自然界中的珍珠來(lái)自干磨礪牡蠣的細(xì)沙一樣,這些編程珠璣來(lái)自于磨礪程序員的實(shí)際問(wèn)題。書(shū)中的程序都很有趣,傳授了重要的編程技巧和基本的設(shè)計(jì)原理。本書(shū)大部分內(nèi)容最初發(fā)表在《ACM通訊》中我主持的“編程珠璣”專(zhuān)欄。這些內(nèi)容經(jīng)過(guò)匯總和修訂,在1986年結(jié)集出版,成為了本書(shū)的第1版。第1版的13篇文章中,有12篇都在本版中做了大幅修訂;此外,本版還補(bǔ)充了3篇新的內(nèi)容。閱讀本書(shū)只需要讀者具有某種高級(jí)語(yǔ)言的編程經(jīng)驗(yàn)。書(shū)中偶爾會(huì)出現(xiàn)一些高級(jí)技術(shù)(如C++中的模板等),對(duì)此不熟悉的讀者可以跳過(guò)這些內(nèi)容,基本上不影響閱讀。本書(shū)每一章都獨(dú)立成篇,各章之間卻又有著邏輯分組。第1章至第5章構(gòu)成本書(shū)的第一部分,這部分回顧了編程的基本原理:?jiǎn)栴}定義、算法、數(shù)據(jù)結(jié)構(gòu)以及程序驗(yàn)證和測(cè)試。第二部分圍繞效率這個(gè)主題展開(kāi)。效率問(wèn)題有時(shí)本身就很重要,又永遠(yuǎn)都是進(jìn)入有趣編程問(wèn)題的絕佳跳板。第三部分用這些技術(shù)來(lái)解決排序、搜索和字符串等重要問(wèn)題。閱讀本書(shū)的一個(gè)提示:不要讀得太快。要仔細(xì)閱讀,一次讀一章。要嘗試解答書(shū)中提出的問(wèn)題——有些問(wèn)題需要集中精力思考一兩個(gè)小時(shí)才會(huì)想清楚。然后,要努力解答每章末尾的習(xí)題:當(dāng)讀者寫(xiě)下答案時(shí),從本書(shū)學(xué)到的大部分知識(shí)就會(huì)躍然紙上。
內(nèi)容概要
本書(shū)是計(jì)算機(jī)科學(xué)方面的經(jīng)典名著。書(shū)的內(nèi)容圍繞程序設(shè)計(jì)人員面對(duì)的一系列實(shí)際問(wèn)題展開(kāi)。作者Jon Bentley以其獨(dú)有的洞察力和創(chuàng)造力,引導(dǎo)讀者理解這些問(wèn)題并學(xué)會(huì)解決方法,而這些正是程序員實(shí)際編程生涯中至關(guān)重要的。本書(shū)的特色是通過(guò)一些精心設(shè)計(jì)的有趣而又頗具指導(dǎo)意義的程序,對(duì)實(shí)用程序設(shè)計(jì)技巧及基本設(shè)計(jì)原則進(jìn)行了透徹而睿智的描述,為復(fù)雜的編程問(wèn)題提供了清晰而完備的解決思路。本書(shū)對(duì)各個(gè)層次的程序員都具有很高的閱讀價(jià)值。
作者簡(jiǎn)介
作者:(美國(guó))本特利(Jon Bentley)本特利,Jon Bentley,1953年2月20日出生于美國(guó)加州長(zhǎng)灘。1974年畢業(yè)于斯坦福大學(xué)數(shù)學(xué)系,1976年獲北卡羅來(lái)納大學(xué)博士學(xué)位。他先后任職于卡內(nèi)基-梅隆大學(xué)(1976-1982)、貝爾實(shí)驗(yàn)室(1982-2001)和Avaya實(shí)驗(yàn)室(2001年至今)。在卡內(nèi)基-梅隆大學(xué)任教期間。他培養(yǎng)了許多后來(lái)知名的計(jì)算機(jī)大家。包括Scribe的開(kāi)發(fā)者Brian Reid,Tcl語(yǔ)言設(shè)計(jì)者John Ousterhout,Java專(zhuān)家Joshua Bloch,Java語(yǔ)言設(shè)計(jì)者James Gosling,《算法導(dǎo)論》作者之——Charles Leiserson。2004年榮獲Dr. Dobb’s程序設(shè)計(jì)卓越獎(jiǎng)。
書(shū)籍目錄
Part I: PRELIMINARIES Column 1: Cracking the Oyster A Friendly Conversation·Precise Problem Statement·Program Design·Implementation Sketch·Principles·Problems·Further ReadingColumn 2: Aha! Algorithms Three Problems·Ubiquitous Binary Search·The Power of Primitives·Getting It Together: Sorting·Principles·Problems·Further Reading·Implementing an Anagram ProgramColumn 3: Data Structures Programs A Survey Program·Form-Letter Programming·An Array of Examples·Structuring Data·Powerful Tools for Specialized Data·Principles·Problems·Further ReadingColumn 4: Writing Correct Programs The Challenge of Binary Search·Writing the Program·Understanding the Program·Principles·The Roles of Program Verification·Problems·Further ReadingColumn 5: A Small Matter of Programming From Pseudocode to C·A Test Harness·The Art of Assertion·Automated Testing·Timing·The Complete Program·Principles·Problems·Further Reading·DebuggingPart II: PERFORMANCE Column 6: Perspective on Performance A Case Study·Design Levels·Principles·Problems·Further ReadingColumn 7: The Back of the Envelope Basic Skills·Performance Estimates·Safety Factors·Little's Law·Principles·Problems·Further Reading·Quick Calculations in Everyday LifeColumn 8: Algorithm Design Techniques The Problem and a Simple Algorithm·Two Quadratic Algorithms·A Divide-and-Conquer Algorithm·A Scanning Algorithm·What Does It Matter?·Principles·Problems·Further ReadingColumn 9: Code Tuning 7 A Typical Story·A First Aid Sampler·Major Surgery——Binary Search·Principles·Problems·Further ReadingColumn 10: Squeezing Space The KeySimplicity·An Illustrative Problem·Techniques for Data Space·Techniques for Code Space·Principles·Problems·Further Reading·A Big SqueezePart III: THE PRODUCT Column 11: Sorting 115 Insertion Sort·A Simple Quicksort·Better Quicksorts·Principles·Problems·Further ReadingColumn 12: A Sample Problem The Problem·One Solution·The Design Space·Principles·Problems·Further ReadingColumn 13: Searching The Interface·Linear Structures·Binary Search Trees·Structures for Integers·Principles·Problems·Further Reading·A Real Searching ProblemColumn 14: Heaps The Data Structure·Two Critical Functions·Priority Queues·A Sorting Algorithm·Principles·Problems·Further ReadingColumn 15: Strings of Pearls Words·Phrases·Generating Text·Principles·Problems·Further ReadingEpilog to the First Edition Epilog to the Second Edition Appendix 1: A Catalog of Algorithms Appendix 2: An Estimation Quiz Appendix 3: Cost Models for Time and Space Appendix 4: Rules for Code Tuning Appendix 5: C++ Classes for Searching Hints for Selected Problems Solutions to Selected Problems Index
章節(jié)摘錄
插圖:Algorithm Tuning. The simple algorithm always uses small time steps to handle the rare case that two particles come close to one another. The tree data structure allows such pairs to be recognized and handled by a special function. That doubles the time step size and thereby halves the run time of the program.Data Structure Reorganization. The tree that represents the initial set of objects is quite poor at representing later sets. Reconfiguring the data structure at each time step costs a little time, but reduces the number of local calculations and thereby halves the total run time.Code Tuning. Due to additional numerical accuracy provided by the tree, 64-bitdouble-precision floating point numbers could be replaced by 32-bit single-precision numbers; that change halved the run time. Profiling the program showed that 98 percent of the run time was spent in one function; rewriting that code in assembly language increased its speed by a factor of 2.5.Hard ware. After all the above changes, the program still required two days of time on a departmental machine that cost a quarter of a million dollars, and several runs of the program were desired. Appel therefore moved the program to a slightly more expensive machine equipped with a floating point accelerator, which halved its run time again.
媒體關(guān)注與評(píng)論
“《編程珠璣》第1版是對(duì)我職業(yè)生涯早期影響最大的一本書(shū)。其中的許多真知灼見(jiàn)多年之后仍然使我受益匪淺。Jon在第2版中對(duì)素材進(jìn)行了大量更新。許多新內(nèi)容讓我耳目一新?!薄 猄teve McConnell,《代碼大全》作者“對(duì)每一位遇到的程序員,我都會(huì)毫不遲疑地建議他閱讀并不斷重讀這部經(jīng)典之作?!薄 猄lashdot
編輯推薦
多年以來(lái)。當(dāng)程序員們推選出最心愛(ài)的計(jì)算機(jī)圖書(shū)時(shí),《編程珠璣》總是位于前列。正如自然界里珍珠出自細(xì)沙對(duì)牡蠣的磨礪.計(jì)算機(jī)科學(xué)大師Jon Bentley以其獨(dú)有的洞察力和創(chuàng)造力,從磨礪程序員的實(shí)際問(wèn)題中凝結(jié)出一篇篇不朽的編程“珠璣”。這些文章是《ACM通訊》最受歡迎的專(zhuān)欄文章,最終結(jié)集為兩部書(shū)出版?!毒幊讨榄^(英文版·第2版)》為第一卷。主要討論計(jì)算機(jī)科學(xué)中最本質(zhì)的問(wèn)題:如何正確選擇和高效地實(shí)現(xiàn)算法。在書(shū)中,作者選取許多具有典型意義的復(fù)雜編程和算法問(wèn)題。生動(dòng)描繪了歷史上眾多大師們?cè)谔剿鹘鉀Q方案中發(fā)生的軼事、走過(guò)的彎路和不斷精益求精的歷程。引導(dǎo)讀者開(kāi)展創(chuàng)新性的思考。書(shū)中透徹闡述和總結(jié)了許多獨(dú)特而精妙的設(shè)計(jì)原則、思考和解決問(wèn)題的方法以及實(shí)用程序設(shè)計(jì)技巧。解決方案的代碼均以C/C++語(yǔ)言編寫(xiě),不僅有趣。而且有很大的實(shí)戰(zhàn)示范意義。每章后所附習(xí)題極具挑戰(zhàn)性和啟發(fā)性,書(shū)末給出了簡(jiǎn)潔的解答。
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版