图书目录

目录

第1章算法概述

1.1什么是算法

1.1.1算法概念

1.1.2算法特性

1.1.3算法在问题求解中的地位

1.2如何设计一个算法

1.3怎样描述一个算法

1.3.1自然语言描述法

1.3.2流程图描述法

1.3.3NS图描述法

1.3.4伪代码描述法

1.3.5程序设计语言描述法

1.4怎样评价一个算法

1.4.1算法复杂度分析与评价概述

1.4.2算法复杂度分析与评价的形式化表示

1.4.3算法的时间复杂度

1.4.4算法的空间复杂度

1.5常用算法设计模式

1.6搭建实践环境

1.6.1Anaconda介绍

1.6.2Anaconda安装

1.6.3Jupyter Notebook的使用

1.7作业与思考题

第2章数据结构基础

2.1线性结构

2.1.1什么是线性表

2.1.2怎么存储一个线性表

2.1.3线性表的基本操作

2.2队列

2.2.1什么是队列

2.2.2队列的基本操作

2.3栈

2.3.1什么是栈

2.3.2栈的基本操作

2.4树与二叉树

2.4.1什么是树与二叉树

2.4.2二叉树的性质

2.4.3二叉树的存储结构

2.4.4二叉树的基本操作

2.4.5树的应用案例

2.5图

2.5.1什么是图

2.5.2图的存储结构

2.5.3图的基本操作

2.5.4图应用案例

2.6作业与思考题

第3章排序问题

3.1排序概述

3.1.1什么是排序

3.1.2排序的分类

3.1.3排序算法的性质与性能

3.2插入排序

3.2.1直接插入排序

3.2.2希尔排序

3.3交换排序

3.3.1起泡排序

3.3.2快速排序

3.4选择排序

3.4.1简单选择排序

3.4.2堆排序

3.5归并排序

3.6排序算法的比较

3.7作业与思考题

第4章查找问题

4.1查找概念和性能分析

4.1.1查找的基本概念

4.1.2查找算法的性能

4.2线性表的查找

4.2.1顺序表的查找

4.2.2排序表的查找

4.3树的查找

4.3.1什么是二叉排序树

4.3.2怎么构造一棵二叉排序树

4.3.3二叉排序树的查找与删除

4.3.4二叉排序树查找的性能分析

4.3.5平衡二叉树

4.4散列查找

4.4.1什么是散列查找

4.4.2散列函数的设计

4.4.3处理冲突的方法

4.4.4散列查找性能分析

4.5查找方法的比较分析

4.5.1顺序查找和折半查找的比较分析

4.5.2二叉排序树和线性表的查找比较分析

4.5.3散列查找的比较分析

4.6作业与思考题

第5章图的问题

5.1图的应用背景

5.2图的遍历问题

5.2.1什么是图的遍历

5.2.2图的广度(宽度)优先遍历算法

5.2.3图的深度优先遍历算法

5.2.4图遍历问题的应用案例

5.3最小生成树问题

5.3.1什么是最小生成树

5.3.2克鲁斯卡尔算法

5.3.3普里姆算法

5.3.4最小生成树问题的应用案例

5.4关键路径问题

5.4.1AOV网与拓扑排序

5.4.2拓扑排序算法

5.4.3AOE网与关键路径

5.4.4关键路径问题的应用案例

5.5单源与多源最短路径问题

5.5.1什么是单源与多源最短路径

5.5.2迪杰斯特拉算法

5.5.3弗洛伊德算法

5.5.4最短路径问题的应用案例

5.6作业与思考题

第6章串与序列问题

6.1串

6.1.1什么是串

6.1.2串的存储结构

6.1.3串的基本操作

6.2子串搜索问题

6.2.1什么是子串搜索

6.2.2朴素的串匹配算法

6.2.3无回溯匹配算法

6.2.4改进的串匹配算法

6.3最长公共子串搜索问题

6.3.1什么是最长公共子串搜索

6.3.2后缀数组

6.3.3最长公共子串搜索算法

6.4串与序列问题的应用案例

6.5作业与思考题

第7章组合问题

7.1组合优化问题的应用背景

7.2动态规划算法

7.2.1什么是动态规划算法

7.2.2动态规划算法求解

7.2.3动态规划算法的应用案例

7.3贪心算法

7.3.1什么是贪心算法

7.3.2贪心算法求解

7.3.3贪心算法的应用案例

7.4最优装载问题

7.4.1什么是最优装载问题

7.4.2最优装载问题求解

7.4.3最优装载问题的应用案例

7.5多机调度问题

7.5.1什么是多机调度问题

7.5.2多机调度问题求解

7.5.3多机调度问题的应用案例

7.6组合问题综合比较分析

7.7作业与思考题

第8章概率问题

8.1随机数

8.1.1什么是随机数

8.1.2随机数的生成方法

8.2数值概率问题

8.2.1π值的计算与实现

8.2.2定积分的计算机与实现

8.2.3非线性方程组求解

8.3舍伍德算法

8.3.1什么是舍伍德算法

8.3.2舍伍德算法的应用案例

8.4拉斯维加斯算法

8.4.1什么是拉斯维加斯算法

8.4.2拉斯维加斯算法的应用案例

8.5蒙特卡罗算法

8.5.1什么是蒙特卡罗算法

8.5.2蒙特卡罗算法的应用案例

8.6作业与思考题

第9章经典算法问题

9.1鸡兔同笼问题

9.1.1什么是鸡兔同笼问题

9.1.2鸡兔同笼问题求解

9.2汉诺塔问题

9.2.1什么是汉诺塔问题

9.2.2汉诺塔问题求解

9.3三色球问题

9.3.1什么是三色球问题

9.3.2三色球问题求解

9.4野人与传教士问题

9.4.1什么是野人与传教士问题

9.4.2野人与传教士问题求解

9.5作业与思考题

第10章游戏与算法实践

10.1酷跑游戏

10.1.1酷跑游戏描述

10.1.2酷跑游戏实现

10.2连连看游戏

10.2.1连连看游戏描述

10.2.2连连看游戏实现

10.3五子棋游戏

10.3.1五子棋游戏描述

10.3.2五子棋游戏实现

10.4俄罗斯方块游戏

10.4.1俄罗斯方块游戏描述

10.4.2俄罗斯方块游戏实现

参考文献