算法設計與分析基礎 (第3版)(影印版)

算法設計與分析基礎 (第3版)(影印版) pdf epub mobi txt 電子書 下載 2025

[美] Anany Levitin 著
圖書標籤:
  • 算法
  • 數據結構
  • 算法設計
  • 算法分析
  • 計算機科學
  • 高等教育
  • 教材
  • 第3版
  • 影印版
  • 計算機算法
想要找書就要到 新城書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302311850
版次:3
商品編碼:11241683
品牌:清華大學
包裝:平裝
開本:16開
齣版時間:2013-05-01
用紙:膠版紙
頁數:596
正文語種:英文

具體描述

編輯推薦

  曆經十年數百所高校教學實踐的算法入門經典。算法是思維的藝術,是數學之美的完美體現,是計算機和信息科學的靈魂,更是優秀程序員的安身立命之本。《算法設計與分析基礎 (第3版)(影印版)》將算法視為解決問題的工具,通過作者獨創的、具有裏程碑意義的新型分類法彌補瞭傳統算法設計技術分類法的缺陷,用深入淺齣的語言和新穎的實例與謎題,詮釋瞭何為算法、算法的分類、算法幕後的思想、算法的效率,抽絲剝繭、條分縷析地探索瞭算法設計與分析過程。

內容簡介

  《算法設計與分析基礎 (第3版)(影印版)》在講述算法設計技術時采用瞭新的分類方法,在討論分析方法時條分縷析,形成瞭連貫有序、耳目一新的風格。為便於學生掌握,本書涵蓋算法入門課程的全部內容,更注重對概念(而非形式)的理解。書中通過一些流行的謎題來激發學生的興趣,幫助他們加強和提高解決算法問題的能力。每章小結、習題提示和詳細解答,形成瞭非常鮮明的教學特色。

作者簡介

  Anany Levitin博士,美國維拉諾瓦大學教授,畢業於莫斯科國立大學並獲得數學碩士學位。他擁有耶路撒冷希伯來大學數學博士學位和美國肯塔基大學計算機科學碩士學位。他的著作《算法設計與分析基礎》已經被翻譯為中文、俄文、希臘文和韓文,並被全球數百所高校廣泛用作教材。目前,Levitin博士在美國維拉諾瓦大學講授“算法設計與分析”課程。他的另一本著作《算法謎題》已經於2011年鞦齣版。
  Anany Levitin,美籍猶太人,維拉諾瓦大學(Villanova)計算機科學係教授。他的論文“算法設計技術新途徑:彌補傳統分類法的缺憾”(A New Road Mpa of Algorithm Design Techniques: Picking Up Where the Traditional Classfication Leaves Off)深受業內好評,並享有廣泛的聲譽。他提齣的這種新分類方法涵蓋眾多經典算法,開創瞭傳統分類無法以一緻方式介紹這些算法的先河。作為通用的問題解決工具,算法設計技術的應用很廣,尤其適用於解決“狼,羊,白菜”問題和旅行商問題之類的流行謎題。
  因為他對算法教育所做齣的傑齣貢獻,Levitin教授曾多次受邀在SIGCSE(Computer Science Education,計算機教育) 全球大會上發錶演講,此大會每三年纔舉行一次。
  Anany Levitin教授目前的研究課題為“Do We Teach the Right Algorithm Design Techniques ?”

目錄

New to the Third Edition xvii
Preface xix
1Introduction
1.1 What Is an Algorithm?
Exercises 1.1
1.2 Fundamentals of Algorithmic Problem Solving
Understanding the Problem
Ascertaining the Capabilities of the Computational Device
Choosing between Exact and Approximate Problem Solving
Algorithm Design Techniques
Designing an Algorithm and Data Structures
Methods of Specifying an Algorithm
Proving an Algorithm's Correctness
Analyzing an Algorithm
Coding an Algorithm
Exercises 1.2
1.3 Important Problem Types
Sorting
Searching
String Processing
Graph Problems
Combinatorial Problems
Geometric Problems
Numerical Problems
Exercises 1.3
1.4 Fundamental Data Structures
Linear Data Structures
Graphs
Trees
Sets and Dictionaries
Exerises 1.4
Summary
2 Fundamentals of the Analysis of Algorithm Efficiency
2.1 The Analysis Framework
Measuring an Input's Size
Units for Measuring Running Time
Orders of Growth
Worst-Case, Best-Case, and Average-Case Efficiencies
Recapitulation of the Analysis Framework
Exercises 2.1
2.2 Asymptotic Notations and Basic Efficiency Classes
Informal Introduction
O-notation
-notation
-notation
Useful Property Involving the Asymptotic Notations
Using Limits for Comparing Orders of Growth
Basic Efficiency Classes
Exercises 2.2
2.3 Mathematical Analysis of Nonrecursive Algorithms
Exercises 2.3
2.4 Mathematical Analysis of Recursive Algorithms
Exercises 2.4
2.5 Example: Computing the nth Fibonacci Number
Exercises 2.5
2.6 Empirical Analysis of Algorithms
Exercises 2.6
2.7 Algorithm Visualization
Summary
3 Brute Force and Exhaustive Search
3.1 Selection Sort and Bubble Sort
Selection Sort
Bubble Sort
Exercises 3.1
3.2 Sequential Search and Brute-Force String Matching
Sequential Search
Brute-Force String Matching
Exercises 3.2
3.3 Closest-Pair and Convex-Hull Problems by Brute Force
Closest-Pair Problem
Convex-Hull Problem
Exercises 3.3
3.4 Exhaustive Search
Traveling Salesman Problem
Knapsack Problem
Assignment Problem
Exercises 3.4
3.5 Depth-First Search and Breadth-First Search
Depth-First Search
Breadth-First Search
Exercises 3.5
Summary
4 Decrease-and-Conquer
4.1 Insertion Sort
Exercises 4.1
4.2 Topological Sorting
Exercises 4.2
4.3 Algorithms for Generating Combinatorial Objects
Generating Permutations
Generating Subsets
Exercises 4.3
4.4 Decrease-by-a-Constant-Factor Algorithms
Binary Search
Fake-Coin Problem
Russian Peasant Multiplication
Josephus Problem
Exercises 4.4
4.5 Variable-Size-Decrease Algorithms
Computing a Median and the Selection Problem
Interpolation Search
Searching and Insertion in a Binary Search Tree
The Game of Nim
Exercises 4.5
Summary
5 Divide-and-Conquer
5.1 Mergesort
Exercises 5.1
5.2 Quicksort
Exercises 5.2
5.3 Binary Tree Traversals and Related Properties
Exercises 5.3
5.4 Multiplication of Large Integers and
Strassen's Matrix Multiplication
Multiplication of Large Integers
Strassen's Matrix Multiplication
Exercises 5.4
5.5 The Closest-Pair and Convex-Hull Problems
by Divide-and-Conquer
The Closest-Pair Problem
Convex-Hull Problem
Exercises 5.5
Summary
6 Transform-and-Conquer
6.1 Presorting
Exercises 6.1
6.2 Gaussian Elimination
LU Decomposition
Computing a Matrix Inverse
Computing a Determinant
Exercises 6.2
6.3 Balanced Search Trees
AVL Trees
2-3 Trees
Exercises 6.3
6.4 Heaps and Heapsort
Notion of the Heap
Heapsort
Exercises 6.4
6.5 Horner's Rule and Binary Exponentiation
Horner's Rule
Binary Exponentiation
Exercises 6.5
6.6 Problem Reduction
Computing the Least Common Multiple
Counting Paths in a Graph
Reduction of Optimization Problems
Linear Programming
Reduction to Graph Problems
Exercises 6.6
Summary
7 Space and Time Trade-Offs
7.1 Sorting by Counting
Exercises 7.1
7.2 Input Enhancement in String Matching
Horspool's Algorithm
Boyer-Moore Algorithm
Exercises 7.2
7.3 Hashing
Open Hashing (Separate Chaining)
Closed Hashing (Open Addressing)
Exercises 7.3
7.4 B-Trees
Exercises 7.4
Summary
8 Dynamic Programming
8.1 Three Basic Examples
Exercises 8.1
8.2 The Knapsack Problem and Memory Functions
Memory Functions
Exercises 8.2
8.3 Optimal Binary Search Trees
Exercises 8.3
8.4 Warshall's and Floyd's Algorithms
Warshall's Algorithm
Floyd's Algorithm for the All-Pairs Shortest-Paths Problem
Exercises 8.4
Summary
9 Greedy Technique
9.1 Prim's Algorithm
Exercises 9.1
9.2 Kruskal's Algorithm
Disjoint Subsets and Union-Find Algorithms
Exercises 9.2
9.3 Dijkstra's Algorithm
Exercises 9.3
9.4 Huffman Trees and Codes
Exercises 9.4
Summary
10 Iterative Improvement
10.1 The Simplex Method
Geometric Interpretation of Linear Programming
An Outline of the Simplex Method
Further Notes on the Simplex Method
Exercises 10.1
10.2 The Maximum-Flow Problem
Exercises 10.2
10.3 Maximum Matching in Bipartite Graphs
Exercises 10.3
10.4 The Stable Marriage Problem
Exercises 10.4
Summary
11 Limitations of Algorithm Power
11.1 Lower-Bound Arguments
Trivial Lower Bounds
Information-Theoretic Arguments
Adversary Arguments
Problem Reduction
Exercises 11.1
11.2 Decision Trees
Decision Trees for Sorting
Decision Trees for Searching a Sorted Array
Exercises 11.2
11.3 P, NP, and NP-Complete Problems
P and NP Problems
NP-Complete Problems
Exercises 11.3
11.4 Challenges of Numerical Algorithms
Exercises 11.4
Summary
12 Coping with the Limitations of Algorithm Power
12.1 Backtracking
n-Queens Problem
Hamiltonian Circuit Problem
Subset-Sum Problem
General Remarks
Exercises 12.1
12.2 Branch-and-Bound
Assignment Problem
Knapsack Problem
Traveling Salesman Problem
Exercises 12.2
12.3 Approximation Algorithms for NP-Hard Problems
Approximation Algorithms for the Traveling Salesman Problem
Approximation Algorithms for the Knapsack Problem
Exercises 12.3
12.4 Algorithms for Solving Nonlinear Equations
Bisection Method
Method of False Position
Newton's Method
Exercises 12.4
Summary
Epilogue
APPENDIX A
Useful Formulas for the Analysis of Algorithms
Properties of Logarithms
Combinatorics
Important Summation Formulas
Sum Manipulation Rules
Approximation of a Sum by a Definite Integral
Floor and Ceiling Formulas
Miscellaneous
APPENDIX B
Short Tutorial on Recurrence Relations
Sequences and Recurrence Relations
Methods for Solving Recurrence Relations
Common Recurrence Types in Algorithm Analysis
References
Hints to Exercises
Index

前言/序言

  “一個人接受科技教育時所能獲得的最珍貴的收獲,是那些能夠受用終身的通用智能工具 。”
  ——George Forsythe,What to do till the computer scientist comes,1968
  無論是計算科學還是計算實踐,算法都在其中扮演著重要角色。因此,這門學科中齣現瞭大量的教材。它們在介紹算法的時候,基本上都選擇瞭以下兩種方案中的一種。第一種方案是按照問題的類型對算法分類。這類教材安排瞭不同的章節分彆討論排序、查找、圖等算法。這種做法的優點是,對於解決同一問題的不同算法,它能夠立即比較這些算法的效率。其缺點在於,由於過於強調問題的類型,它忽略瞭對算法設計技術的討論。
  第二種方案圍繞著算法設計技術來組織章節。在這種結構中,即使算法來自於不同的計算領域,如果它們采用瞭相同的設計技術,就會被編成一組。從各方(例如[BaY95])獲得的信心使我相信,這種結構更適閤於算法設計與分析的基礎課程。強調算法設計技術有三個主要原因。第一,學生們在解決新問題時,可以運用這些技術設計齣新的算法。從實用的角度看,這使得學習算法設計技術頗有價值。第二,學生們會試圖按照算法的內在設計方法對已知的眾多算法進行分類。計算機科學教育的一個主要目的,就是讓學生們知道如何發掘不同應用領域的算法間的共性。畢竟,每門學科都會傾嚮於把它的重要主題歸納為幾個甚至一個規則。第三,依我看來,算法設計技術作為問題求解的一般性策略,在解決計算機領域以外的問題時,也能發揮相當大的作用。
  遺憾的是,無論是從理論還是從教學的角度,傳統的算法設計技術分類法都存在一些嚴重的缺陷。其中最顯著的缺陷就是無法對許多重要的算法進行分類。由於這種局限性,這些書的作者不得不在按照設計技術進行分類的同時,另外增加一些章節來討論特殊的問題類型。但這種改變將導緻課程缺乏一緻性,而且很可能會使學生感到迷惑。
  算法設計技術的新分類法
  傳統算法設計技術分類法的缺陷令我感到失望,它激發我開發一套新的分類法[Lev99],這套分類法就是本書的基礎。以下是這套新分類法的幾個主要優勢。
  · 新分類法比傳統分類法更容易理解。它包含的某些設計策略,例如蠻力法、減治法、變治法、時空權衡和迭代改進,幾乎從不曾被看作重要的設計範例。
  · 新分類法很自然地覆蓋瞭許多傳統方法無法分類的經典算法(歐幾裏得算法、堆排序、查找樹、散列法、拓撲排序、高斯消去法、霍納法則等,不勝枚舉)。所以,新分類法能夠以一種連貫的、一緻的方式錶達這些經典算法的標準內容。
  · 新分類法很自然地容納瞭某些設計技術的重要變種(例如,它能涵蓋減治法的3個變種和變治法的3個變種)。
  · 在分析算法效率時,新分類法與分析方法結閤得更好(參見附錄B)。
  設計技術作為問題求解的一般性策略
  在本書中,主要將設計技術應用於計算機科學中的經典問題(這裏唯一的創新是引入瞭一些數值算法的內容,我們也是用同樣的通用框架來錶述這些算法的)。但把這些設計技術看作問題求解的一般性工具時,它們的應用就不僅限於傳統的計算問題和數學問題瞭。有兩個因素令這一點變得尤其重要。第一,越來越多的計算類應用超越瞭它們的傳統領域,並且有足夠的理由使人相信,這種趨勢會愈演愈烈。第二,人們漸漸認識到,提高學生們的問題求解能力是高等教育的一個主要目標。為瞭滿足這個目標,在計算機科學課程體係中安排一門算法設計和分析課程是非常閤適的,因為它會告訴學生如何應用一些特定的策略來解決問題。
  雖然我並不建議將算法設計和分析課程變成一門教授一般性問題求解方法的課程,但我的確認為,我們不應錯過算法設計和分析課程提供的這樣一個獨一無二的機會。為瞭這個目標,本書包含瞭一些和謎題相關的應用。雖然利用謎題來教授算法課程絕不是我的創新,但本書打算通過引進一些全新的謎題來係統地實現這個思路。
  如何使用本書
  我的目標是寫一本既不泛泛而談,又可供學生們獨立閱讀的教材。為瞭實現這個目標,本書做瞭如下努力。
  · 根據George Forsythe的觀點(參見引言),我試圖著重強調那些隱藏在算法設計和分析背後的主要思想。在選擇特定的算法來闡述這些思想的時候,我並不傾嚮於涉及大量的算法,而是選擇那些最能揭示其內在設計技術或分析方法的算法。幸運的是,大多數經典算法滿足瞭這個要求。
  · 第2章主要分析算法的效率,該章將分析非遞歸算法的方法和分析遞歸算法的典型方法區彆開來。這一章還花瞭一些篇幅介紹算法經驗分析和算法可視化。
  · 書中係統地穿插著一些麵嚮讀者的提問。其中有些問題是經過精心設計的,而且答案緊隨其後,目的是引起讀者的注意或引發疑問。其餘問題的用意是防止讀者走馬觀花,不能充分理解本書的內容。
  · 每一章結束時都會對本章最重要的概念和結論做一個總結。
  · 本書包含600多道習題。有些習題是為瞭給大傢練習,另外一些則是為瞭指齣書中正文部分所涉及內容的重要意義,或是為瞭介紹一些書中沒有涉及的算法。有一些習題利用瞭因特網上的資源。較難的習題數量不多,會在教師用書中用一種特殊的記號標注齣來(因為有些學生可能沒有勇氣做那些標有難度的習題,所以本書沒有對習題標注難度)。謎題類的習題用一種特殊的圖標做標注。
  第3版的變化
  第3版有若乾變化。其中最重要的變化是介紹減治法和分治法的先後順序。第3版會先介紹減治法,後介紹分治法,這樣做有以下幾個優點。
  · 較之分治法,減治法更簡單。
  · 在求解問題方麵,減治法應用更廣。
  · 這樣的編排順序便於先介紹插入排序,後介紹閤並排序和快速排序。
  · 數組劃分的概念通過選擇性問題引入,這次利用Lomuto算法的單嚮掃描來實現,而將Hoare劃分方法的雙嚮掃描留至後文與快速排序一並介紹。
  · 摺半查找歸入介紹減常量算法的章節。
  另一重要變化是重新編排第8章關於動態規劃的內容,具體如下所述。
  · 導述部分的內容是全新的。在前兩版中用計算二項式係數的例子來引入動態規劃這一重要技術,但在第3版中會介紹3個基礎性示例,這樣介紹的效果更好。
  · 8.1節的習題是全新的,包括一些在前兩版中沒有涉及的流行的應用。
  · 第8章其他小節的順序也做瞭調整,以便達到由淺入深、循序漸進的效果。
  此外,還有其他一些變化。增加瞭不少與本書所述算法相關的應用。遍曆圖算法不再隨減治法介紹,而是納入蠻力算法和窮舉查找的範疇,我認為這樣更閤理。在介紹生成組閤對象的算法時,會新增格雷碼算法。對求解最近對問題的分治法會有更深入的探討。改進的內容包括算法可視化和求解旅行商問題的近似算法,當然參考文獻也相應更新。
  第3版新增約70道習題,其中涉及算法謎題和麵試問題。
  讀者所需的知識背景
  本書假定讀者已經學習瞭離散數學的標準課程和一門基礎性的編程課程。有瞭這樣的知識背景,讀者應該能夠掌握本書的內容而不會遇到太大的睏難。盡管如此,1.4節、附錄A和附錄B仍然對基本的數據結構,必須用到的求和公式和遞推關係分彆進行瞭復習和迴顧。隻有3個小節(2.2節、11.4節和12.4節)會用到一些簡單的微積分知識,如果讀者缺少必要的微積分知識,完全可以跳過這3個涉及微積分的小節,這並不會妨礙對本書其餘部分的理解。
  進度安排
  如果打算開設一門圍繞算法設計技術來講解算法設計和分析理論的基礎課程,可以采用本書作為教材。但要想在一個學期內完成該課程,本書涵蓋的內容可能過於豐富瞭。大體上來說,跳過第3~12章的部分內容不會影響讀者對後麵部分的理解。本書的任何一個部分都可以安排學生自學。尤其是2.6節和2.7節,它們分彆介紹瞭經驗分析和算法可視化,這兩小節的內容可以結閤練習 布置給學生。
  下麵給齣瞭一種針對一個學期課程的教學計劃,這是按照40課時的集中教學來設計的。

用戶評價

評分

書籍很好,非常適閤學習,推薦購買

評分

在我們學校,一年一開的算法課由數學係與計算機係的教授輪流教學,教材便是Levitin的這本算法設計與分析基礎(當然是英文版)。在學期末的時候,教授會被要求對課程設計本身提齣些建議。數學係教授的建議非常明確:請換一本教材!是的,對於做理論齣身研究方嚮為Operations Research的數學係教授而言,Levitin這本書的理論體係實在太糟糕瞭,topic組織零散,有跳躍性而無漸進性,缺乏許多必要的嚴格證明,並且有多處似是對其他諸如《算法導論》中經典例子的簡寫版。

評分

這本書不錯,隻不過是英文版,當時沒看清楚

評分

主要講思路,好像還不錯。

評分

不錯不錯不錯不錯不錯不錯不錯

評分

看網上推薦的,不錯的書

評分

書的質量不錯。。應該是正版。。。

評分

書是好書,我智商不夠 哈哈哈哈

評分

活動給力,瘋狂屯書,慢慢看,不錯!贊一個!哈!

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有