当前位置:首页 > 工业技术
计算机数据结构和实用算法大全
计算机数据结构和实用算法大全

计算机数据结构和实用算法大全PDF电子书下载

工业技术

  • 电子书积分:20 积分如何计算积分?
  • 作 者:谋仁主编
  • 出 版 社:北京:北京希望电脑公司
  • 出版年份:1991
  • ISBN:
  • 页数:745 页
图书介绍:
《计算机数据结构和实用算法大全》目录

第一章 引言 1

1.1算法 1

插入排序 1

伪代码的使用约定 3

练习 4

1.2分析算法 4

插入排序算法的分析 5

最坏情况和平均情况分析 6

增长的量级 7

练习 7

1.3设计算法 8

1.3.1分治法 8

1.3.2分治算法分析 10

合并排序算法的分析 10

练习 10

1.4小结 11

练习 12

问题 12

1-1运行时间的比较 12

1-2合并排序中插入排序在短数组上的应用 12

1-3逆序对 13

第一部分 数学基础 14

引言 14

第二章 函数的增长 15

2.1渐近记号 15

Θ-记号 15

O-记号 17

Ω-记号 18

方程中的渐近记号 18

o-记号 19

ω-记号 19

不同函数间的比较 20

练习 21

2.2标准记号体系和通用函数 21

单调性 21

底(Floor)和顶(Ceiling) 21

多项式 22

指数式 22

对数式 23

阶乘 24

多重对数函数 24

斐波那契数 24

练习 25

问题 26

2-1多项式的渐近性态 26

2-2相对渐近增长 26

2-3根据渐近增长率排序 26

2-4渐近记号的性质 27

2-5 O和Ω的一些变形 27

2-6多重函数 27

第三章 求和运算 29

3.1求和公式和性质 29

线性性质 29

算术级数 30

几何级数 30

调和级数 30

积分级数与微分级数 30

套迭级数 31

积 31

练习 31

3.2和式的界 32

数学归纳法 32

对项的限界 33

分解和式 34

积分近似公式 35

练习 36

问题 37

3-1和式的界 37

第四章 递归式 38

4.1替换方法 39

作一个好的猜测 39

一些细微问题 40

避免陷井 40

改变变量 41

练习 41

4.2迭代方法 41

递归树 42

练习 44

4.3主方法 44

主定理 44

主方法的应用 45

练习 45

4.4主定理的证明 46

4.4.1取整数幂时的证明 46

递归树 47

4.4.2底函数和顶函数 50

练习 52

问题 52

4-1递归式的例子 52

4-2找出所缺的整数 53

4-3参数传递的代价 53

4-4进一步的递归式的例子 53

4-5 Sloppincss条件 54

4-6斐波拉契数 54

4-7 VLSI芯片测试 55

第五章 集合、关系、函数、图和树 56

5.1集合 56

练习 59

5.2关系 59

练习 61

5.3函数 61

练习 63

5.4图 63

练习 66

5.5树 67

5.5.1自由树 67

5.5.2有根树和有序树 69

5.5.3二叉树和位置树 69

练习 71

问题 72

5-1图的着色问题 72

5-2友好图 72

5-3二分树 72

第六章 计数和概率 73

6.1计数 73

和规则与积规则 73

串 73

排列 74

组合 74

二项系数 74

二项界 75

练习 76

6.2概率 77

概率公理 77

离散概率分布 78

连续一致概率分布 78

条件概率和独立性 79

贝叶斯定理 80

练习 81

6.3离散随机变量 82

随机变量的期望值 83

方差和标准差 84

练习 84

6.4几何分布与二项分布 85

几何分布 85

二项分布 86

练习 89

6.5二项分布的尾 90

练习 94

6.6概率分析 95

6.6.1生日悖论 95

另一种分析方法 96

6.6.2球与盒子 97

6.6.3序列 98

练习 99

问题 99

6-1球和盒子 99

6-2 max程序的分析 100

6-3雇用问题 100

6-4概率计数 101

第二部分 排序和顺序统计学 102

引言 102

输入数据的结构 102

排序算法 102

顺序统计学 103

第七章堆排序 104

7.1堆 104

练习 105

7.2保持堆的性质 105

练习 106

7.3建堆 106

练习 109

7.4堆排序算法 109

练习 110

7.5优先级队列 111

练习 112

问题 113

7-1由插入而建堆 113

7-2对d叉堆的分析 113

第八章 快速排序 114

8.1对快速排序的描述 114

对数组进行划分 114

练习 116

8.2快速排序的性能 116

最坏情况划分 116

最佳情况划分 117

对称划分 118

关于平均情况的直觉考虑 118

练习 119

8.3快速排序的随机化版本 120

练习 121

8.4快速排序分析 121

8.4.1最坏情况分析 121

8.4.2平均情况分析 122

关于划分过程的分析 122

关于平均情况性态的递归式 123

解递归式 123

上述和式的紧确界 124

练习 124

问题 125

8-1划分的正确性 125

8-2 Lomuto划分算法 125

8-3 Stooge排序 126

8-4快速排序中的堆栈深度 126

8-5“三数取中”划分 127

第九章 线性时间排序 128

9.1排序算法的下界 128

决策树模型 128

最坏情况下界 129

练习 130

9.2计数排序 130

练习 132

9.3基数排序 132

练习 134

9.4桶排序 134

练习 136

问题 136

9-1比较排序的平均情况下界 136

9-2以线性时间做原地置换排序 137

第十章 中位数和顺序统计学 138

10.1最大元素和最小元素 138

同时找最小元素和最大元素 139

练习 139

10.2以线性期望时间做选择 139

练习 141

10.3最坏情况线性时间的选择 141

练习 142

问题 143

10-1已排序的i个最大数 143

10-2带权中位数 143

10-3小型顺序统计 144

第三部分 数据结构 146

引言 146

动态集合的元素 146

动态集合上的操作 146

第三部分纵观 147

第十一章 基本数据结构 148

11.1栈和队列 148

栈 148

队列 149

练习 150

11.2.链表 151

查找链表 152

对链表的插入操作 152

对链表的删除操作 152

哨兵 153

练习 154

11.3指针和对象的实现 155

对象的多重数组表示 155

对象的单数组表示 155

分配和释放对象 156

练习 158

11.4有根树的表示 158

二叉树 158

无界分叉的有根树 159

其他树的表示 160

练习 160

问题 161

11-1表的比较 161

11-2用链表实现可合并性 161

11-3查找一紧凑的排序链表 161

第十二章 杂凑表 163

12.1直接寻址表 163

练习 164

12.2杂凑表 165

通过拉链法来解决碰撞 166

对带拉链杂凑的分析 166

练习 168

12.3杂凑函数 168

好的杂凑函数的特点 169

将关键字解释为实数 169

12.3.1除法杂凑法 169

12.3.2乘法杂凑法 170

12.3.3全域杂凑 171

练习 172

12.4开放地址法 173

线性探查 174

二次探查 175

双重杂凑 176

对开放地址杂凑的分析 176

练习 179

问题 179

12-1最长探查的界 179

12-2查找静态集合 180

12-3拉链法中槽的大小 180

12-4二次探查 180

12-5 K-全域杂凑 181

第十三章 二叉查找树 182

13.1二叉查找树 182

练习 183

13.2查询二叉查找树 184

查找 184

最大元素和最小元素 185

前趋和后继 185

练习 186

13.3插入和删除 187

插入 187

删除 188

练习 189

13.4随机构造的二叉查找树 190

练习 194

问题 194

13-1具有相同关键字的二叉查找树 194

13-2基数树 195

13-3随机构造的二叉查找树中平均节点深度 195

13-4不同的二叉树个数 196

第十四章 红-黑树 197

14.1红-黑树的性质 197

练习 198

14.2旋转 199

练习 200

14.3插入 201

练习 204

14.4删除 204

练习 208

问题 209

14-1持久动态集合 209

14-2红-黑树上的连接操作 210

第十五章 数据结构的扩张 211

15.1动态顺序统计 211

检索具有给定秩的元素 212

确定一个元素的秩 213

对子树规模的维护 213

练习 214

15.2如何扩张数据结构 215

对红-黑树的扩张 216

练习 217

15.3区间树 217

练习 221

问题 222

15-1最大重迭点 222

15-2 Joscphus排列 222

第四部分 高级设计和分析技术 223

引言 223

第十六章 动态程序设计 224

16.1矩阵链乘法 224

计算括号化的重数 225

最优括号化的结构 226

一个递归解 226

计算最优代价 227

构造一个最优解 229

练习 229

16.2动态程序设计基础 230

最优结构 230

重迭子问题 231

记忆化 232

练习 234

16.3最长公共子序列 234

对最长公共子序列进行刻划 234

子问题的递归解 235

计算LCS的长度 236

构造一个LCS 237

对代码的改进 237

练习 238

16.4最优多边形三角剖分 238

与括号化的对应 239

最优三角剖分的子结构 241

一个递归解 241

练习 241

问题 242

16-1 Bitonic欧几里德货郎担问题 242

16-2优美打印 243

16-3编辑距E离 243

16-4 Vitcrbi算法 244

第十七章 贪心算法 245

17.1活动选择问题 245

证明贪心算法的正确性 247

练习 248

17.2贪心策略的基本内容 248

贪心选择性质 249

最优子结构 249

贪心法与动态程序设计 249

练习 250

17.3哈夫曼编码 251

前缀编码 252

构造哈夫曼编码 253

哈夫曼算法的正确性 254

练习 256

17.4贪心法的理论基础 257

17.4.1矩阵胚 257

17.4.2关于加权矩阵胚的贪心算法 258

练习 261

17.5一个任务调度问题 262

练习 264

问题 264

17-1找换硬币 264

17-2无环子图 264

17-3调度问题的变形 265

第十八章 平摊分析 266

18.1聚集方法 266

栈操作 267

二进计数器 268

练习 269

18.2会计方法 270

栈操作 270

二进计数器的增值 271

练习 271

18.3势能方法 271

栈操作 272

二进计数器的增值 273

练习 274

18.4动态表 274

18.4.1表的扩张 275

18.4.2表扩张和收缩 276

练习 281

问题 281

18-1按位反序二进计数器 281

18-2使二叉查找动态化 282

18-3平摊权平衡树 282

第五部分 高级数据结构 284

引言 284

第十九章 B-树 286

辅存上的数据结构 286

19.1 B-树的定义 288

B-树的高度 289

练习 290

19.2 B-树上的基本操作 290

查找B-树 290

创建一棵空B-树 291

B-树中节点的分裂 292

向B-树中插入一关键字 293

练习 296

问题 299

19-1辅存中的栈 299

19-2联结与分裂2-3-4树 299

第二十章 二项堆 301

20.1二项树与二项堆 302

20.1.1二项树 303

20.1.2二项堆 304

二项堆的表示 305

练习 305

20.2二项堆上的操作 306

创建一个新的二项堆 306

寻找最小关键字 306

合并两个二项堆 306

插入一个节点 311

抽取具有最小关键字的节点 312

对一个关键字减值 313

删除一个关键字 313

练习 314

问题 315

20-1 2-3-4堆 315

20-2 采用可合并堆的最小生成树算法 316

第二十一章 斐波那契堆 317

21.1斐波那契堆的结构 318

势函数 319

最大度数 319

21.2可合并堆操作 319

创建一个新的斐波那契堆 320

插入一个节点 320

寻找最小节点 321

合并两个斐波那契堆 321

抽取最小节点 322

练习 326

21.3减小一个关键字与删除一个节点 326

减小一个关键字 326

删除一个节点 329

练习 329

21.4最大度数的界 329

练习 332

问题 332

21-1删除的另一种实现 332

21-2另一些斐波那契堆操作 332

第二十二章 用于分离集合的数据结构 334

22.1分离集合的操作 334

分离集合数据结构的一个应用 335

练习 336

22.2分离集合的链表表示 337

UNION的一个简单实现 337

一种加权合并启发式 337

练习 338

22.3分离集合森林 339

改进运行时间的启发式 339

分离集合森林的伪代码 340

启发式知识对运行时间的影响 341

练习 341

22.4关于带路径压缩的按秩合并的分析 342

Ackerman 数与其逆函数 342

秩的性质 344

时间界的证明 345

练习 348

问题 348

22-1脱机最小值 348

22-2深度确定 349

22-3 Tarjan的脱机最小公共祖先算法 350

第六部分 图的算法 351

引言 351

第二十三章 图的基本算法 352

23.1图的表示 352

练习 354

23.2宽度优先搜索 354

分析 357

最短路径 357

宽度优先树 359

练习 360

23.3深度优先搜索 361

深度优先搜索的性质 363

边的分类 365

练习 366

23.4拓扑排序 367

练习 368

23.5强连通支 369

练习 373

问题 374

23-1通过宽度优先搜索对边进行分类 374

23-2挂接点、桥以及双连通子图 374

23-3欧拉回路 375

第二十四章 最小生成树 376

24.1最小生成树的形成 377

练习 379

24.2Kruskal算法和Prim算法 380

Kruskal算法 381

Prim算法 382

练习 384

问题 385

24-1次最小生成树 385

24-2稀疏图的最小生成树 385

第二十五章 单源最短路径 387

变体 387

负权边 388

最短路径的表示方法 389

本章概述 389

25.1最短路径和松弛技术 390

最短路径的理想基础 390

松弛 391

松弛的性质 392

最短路径树 394

练习 396

25.2 Dijkstra算法 397

分析 399

练习 400

25.3 Bcllman-Ford算法 400

练习 403

25.4有向无回路图中的单源最短路径 403

练习 405

25.5差分约束与最短路径 405

线性规划 406

差分约束系统 406

约束图 407

差分约束系统问题的求解 409

练习 409

问题 410

25-1对Bcllman-Ford算法的Yen氏改进 410

25-2嵌套框 411

25-3套汇问题 411

25-4关于单源最短路径的Gabow定标算法 411

25-5Karp最小平均权回路算法 412

第二十六章 每对结点间的最短路径 414

本章概述 415

26.1最短路径与矩阵乘法 415

最短路径的结构 416

解决每对结点间的最短路径问题的一种递归方法 416

自底向上计算最短路径的权 416

算法运行时间的改进 419

练习 419

26.2 Floyd-Warshall算法 420

最短路径的结构 421

解决每对结点间最短路径问题的一种递归方案 421

自底向上计算最短路径的权 423

建立最短路径 423

有向图的传递闭包 424

练习 425

26.3关于稀疏图的Johnson算法 426

通过重赋权保持最短路径 427

通过重赋权产生非负的权 429

计算每对结点间的最短路径 429

练习 430

26.4解决有向图中路径问题的一般性框架 430

闭半环的定义 430

有向图中路径的计算 431

闭半环的实例 433

关于有向图标示的一个动态规划算法 433

练习 435

问题 435

26-1动态图的传递闭包 435

26-2ε-稠密图中的最短路径 436

26-3作为一个闭半环的最小生成树 436

第二十七章 最大流 437

27.1流网络 437

流网络与流 438

网络流的一个实例 439

多个源和多个汇的网络 441

对流的处理 441

练习 442

27.2 Ford-Fulkcrson方法 443

残留网络 443

增广路径 445

流网络的割 446

基本的Ford-Fulkcrson算法 448

Ford-Fulkcrson算法的分析 449

练习 452

27.3最大偶匹配 452

最大偶匹配问题 453

寻求最大偶匹配 453

练习 455

27.4先流推进算法 455

直觉知识 456

基本的操作 457

一般性算法 458

先流推进方法的正确性 459

先流推进方法的分析 460

练习 463

27.5向前提升算法 463

容许边和容许网络 464

相邻表 465

溢出结点的释放 465

向前提升算法 458

算法分析 470

练习 471

问题 471

27-1逃脱问题 471

27-2最小路径覆盖 472

27-3航天飞机进行的实验 472

27-4最大流的更新 473

27-5用定标法计算最大流 473

27-6具有容量上限和下限的最大流 473

第七部分 论题选编 475

引言 475

第二十八章 排序网络 477

28.1 比较网络 477

练习 480

28.2 0-1原则 480

练习 482

28.3 双调排序网络 483

半清洁器 483

双调排序程序 484

练习 485

28.4 合并网络 485

练习 487

28.5 排序网络 487

练习 488

问题 489

28-1 转置顺序网络 489

28-2 Batcher奇偶合并网络 489

28-3 排列网络 490

第二十九章 运算电路 491

29.1 组合电路 491

组合电路 492

全加器 493

电路深度 494

电路规模 494

练习 495

29.2加法电路 495

29.2.1行波进位加法 495

29.2.2先行进位加法器 496

完成先行进位加法器的构造 496

29.2.3保留进位加法 501

练习 502

29.3乘法电路 504

29.3.1阵列乘法器 504

分析 507

29.3.2华莱士树型乘法器 507

分析 508

练习 509

29.4时钟电路 509

29.4.1位串行加法 509

分析 511

行波进位加法与位串行加法 511

29.4.2线性阵列乘法器 511

一种慢速线性阵列实现方法 513

一种快速的线性阵列实现方法 513

练习 514

问题 515

29-1除法电路 515

29-2关于对称函数的布尔公式 515

第三十章 关于并行计算机的算法 517

PRAM模型 517

并发存储器存取方式与互斥存储器存取方式 518

同步与控制 519

本章概述 519

30.1指针转移 520

30.1.1表排序 520

正确性 521

分析 522

30.1.2列表的并行前缀 522

30.1.3欧拉回路技术 524

练习 526

30.2 CRCW算法与EREW算法 527

并发操作发挥作用的有关问题 527

并发写操作发挥作用的一个问题 529

用EREW算法来模拟CRCW算法 531

练习 533

30.3 Brent定理与工作效率 533

练习 536

30.4工作效率高的并行前缀计算 537

递归的并行前缀计算 537

选择要消除的对象 539

分析 539

练习 541

30.5确定的打破对称性问题 541

着色与最大独立集 542

计算6-着色问题 542

根据6-着色计算出MIS 545

练习 545

问题 546

30-1分段的并行前缀 546

30-2处理器效率的最大值算法 546

30-3连通子图 547

30-4对光栅像进行转置处理 548

第三十一章 关于矩阵的操作 549

31.1矩阵的性质 549

矩阵和向量 549

关于矩阵的操作 552

矩阵的逆矩阵,秩和行列式 553

正定矩阵 555

练习 555

31.2关于矩阵乘法的Strassen算法 556

算法总论 556

确定子矩阵的乘积 557

讨论 560

练习 561

31.3代数系统与布尔矩阵乘法 561

拟环 561

环 562

布尔矩阵的乘法 563

域 564

练习 564

31.4求解线性方程组 565

LUP分解总述 566

正向替换与逆向替换 566

关于LU分解的计算 569

LUP分解的计算 572

练习 575

31.5逆矩阵 575

根据LUP分解来计算逆矩阵 576

矩阵乘法与逆矩阵 576

把求逆矩阵问题转化为矩阵乘法问题 577

练习 578

31.6对称正定矩阵与最小二乘逼近 579

最小二乘逼近 581

练习 584

问题 584

31-1 Shamir布尔矩阵乘法算法 584

31-2三对角线性方程组 585

31-3.样条 585

第三十二章 多项式与快速付里叶变换 587

多项式 587

本章概述 588

32.1多项式的表示 588

系数表示法 589

点值表示法 589

关于系数形式表示的多项式的快速乘法 591

练习 592

32.2 DFT与FFT 593

单位元素的复根 593

DFT 595

FFT 595

对单位元素的复根进行插值 598

练习 599

32.3有效的FFT实现方法 599

FFT的一种迭代实现 600

并行FFT电路 603

练习 604

问题 604

32-1分治乘法 604

32-2Tocplitz矩阵 604

32-3求多项式在某一点的所有阶导数的值 604

32-4多项式在多个点的求值 605

32-5运用模运算的FFT 606

第三十三章 有关数论的算法 607

输入的规模与算术运算的代价 607

33.1基本的数论概念 608

可除性与约数 608

素数与合数 608

除法定理,余数和同模 608

公约数与最大公约数 609

互质数 610

唯一的因子分解 611

练习 611

33.2最大公约数 612

欧几里德算法 613

EUCLID算法的运行时间 613

欧几里德算法的推广形式 615

练习 616

33.3模运算 616

有限群 617

根据模加法与模乘法所定义的群 617

子群 620

由一个元素生成的子群 620

练习 621

33.4求解模线性方程 622

练习 624

33.5中国余数定理 625

练习 627

33.6元素的幂 627

运用反复平方法求数的幂 630

练习 631

33.7 RSA公开密钥加密系统 631

公开密钥加密系统 631

RSA加密系统 632

练习 635

33.8.素数的测试 636

素数的密度 636

伪素数测试过程 637

Miller-Rabin随机性素数测试方法 638

Miller-Rabin素数测试过程的出错率 639

练习 640

33.9整数的因子分解 641

POLLARD的rho启发性方法 641

练习 644

问题 644

33-1二进制的gcd算法 644

33-2欧几里德算法中对位操作的分析 645

33-3关于Fibonacci数的三个算法 645

33-4二次残数 645

第三十四章 串匹配 647

记号与术语 648

34.1朴素的串匹配算法 649

练习 649

34.2 Rabim-Karp算法 650

练习 653

34.3利用有限自动机进行串匹配 654

有限自动机 654

串匹配自动机 655

计算变迁函数 658

练习 658

34.4 Knuth-Morris-Pratt算法 659

关于模式的前缀函数 659

运行时间分析 662

前缀函数计算过程的正确性 662

KMP算法的正确性 664

练习 664

34.5 Boyer-Moore算法 665

坏字符启发性方法 666

好后缀启发性方法 668

练习 670

问题 670

34-1基于重复因子的串匹配算 670

34-2并行串匹配 671

第三十五章计算几何学 672

35.1线段的性质 672

叉积 673

确定连续线段是向左转还是向右转 674

确定两条线段是否相交 674

叉积的其它应用 675

练习 675

35.2确定任意一对线段是否相交 676

排序线段 676

扫除线的移动 677

求线段交点的伪代码 678

正确性 679

运行时间 680

练习 680

35.3寻找凸包 680

Graham扫描法 682

Jarvis步进法 687

练习 688

35.4寻找最近点对 688

分治算法 689

正确性 690

算法实现与运行时间 691

练习 691

问题 692

35-1凸层 692

35-2最大层 692

35-3巨人和鬼 693

35-4稀疏包分布 693

第三十六章NP-完全性 694

36.1多项式时间 695

抽象问题 695

编码 696

形式语言体系 698

练习 699

36.2多项式时间的验证 700

汉密尔顿回路 700

验证算法 701

复杂类NP 701

练习 702

36.3 NP-完全性与可约简性 703

可化简性 703

NP-完全性 705

电路可满足性 705

练习 710

36.4 NP-完全性的证明 710

公式可满足性 711

3-CNF可满足性 713

练习 715

36.5一些NP-完全的问题 716

36.5.1集团问题 716

36.5.2顶点覆盖问题 718

36.5.3子集和问题 720

36.5.4汉密尔顿回路问题 722

36.5.5货郎担问题 726

练习 727

问题 728

36-1独立集 728

36-2图的着色 728

第三十七章 近似算法 730

近似算法的性能界 730

本章内容的安排 731

37.1顶点覆盖问题 731

练习 733

37.2货郎担问题 733

37.2.1带三角不等式的货郎担问题 734

37.2.2一般货郎担问题 736

练习 737

37.3集合覆盖问题 737

一个贪心近似算法 738

分析 739

练习 740

37.4子集和问题 741

一个指数时间算法 741

一个完全多项式时间近似方案 742

练习 744

问题 744

37-1装箱 744

37-2对最大集团规模的近似 745

37-3加权集合覆盖问题 745

相关图书
作者其它书籍
返回顶部