一起参与创作

由于笔者能力有限,书中难免存在一些遗漏和错误,请您谅解。如果您发现了笔误、链接失效、内容缺失、文字歧义、解释不清晰或行文结构不合理等问题,请协助我们进行修正,以给读者提供更优质的学习资源。

所有撰稿人的 GitHub ID 将在本书仓库、网页版和 PDF 版的主页上进行展示,以感谢他们对开源社区的无私奉献。

!!! success “开源的魅力”

纸质图书的两次印刷的间隔时间往往较久,内容更新非常不方便。

而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。

内容微调

如下图所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。

  1. 点击“编辑图标”,如果遇到“需要 Fork 此仓库”的提示,请同意该操作。
  2. 修改 Markdown 源文件内容,检查内容的正确性,并尽量保持排版格式的统一。
  3. 在页面底部填写修改说明,然后点击“Propose file change”按钮。页面跳转后,点击“Create pull request”按钮即可发起拉取请求。

页面编辑按键

图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。

内容创作

如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。

  1. 登录 GitHub ,将本书的代码仓库 Fork 到个人账号下。
  2. 进入您的 Fork 仓库网页,使用 git clone 命令将仓库克隆至本地。
  3. 在本地进行内容创作,并进行完整测试,验证代码的正确性。
  4. 将本地所做更改 Commit ,然后 Push 至远程仓库。
  5. 刷新仓库网页,点击“Create pull request”按钮即可发起拉取请求。

Docker 部署

hello-algo 根目录下,执行以下 Docker 脚本,即可在 http://localhost:8000 访问本项目:

docker-compose up -d

使用以下命令即可删除部署:

docker-compose down

编程环境安装

安装 IDE

推荐使用开源、轻量的 VS Code 作为本地集成开发环境(IDE)。访问 VS Code 官网,根据操作系统选择相应版本的 VS Code 进行下载和安装。

从官网下载 VS Code

VS Code 拥有强大的扩展包生态系统,支持大多数编程语言的运行和调试。以 Python 为例,安装“Python Extension Pack”扩展包之后,即可进行 Python 代码调试。安装步骤如下图所示。

安装 VS Code 扩展包

安装语言环境

Python 环境

  1. 下载并安装 Miniconda3 ,需要 Python 3.10 或更新版本。
  2. 在 VS Code 的插件市场中搜索 python ,安装 Python Extension Pack 。
  3. (可选)在命令行输入 pip install black ,安装代码格式化工具。

C/C++ 环境

  1. Windows 系统需要安装 MinGW配置教程);MacOS 自带 Clang ,无须安装。
  2. 在 VS Code 的插件市场中搜索 c++ ,安装 C/C++ Extension Pack 。
  3. (可选)打开 Settings 页面,搜索 Clang_format_fallback Style 代码格式化选项,设置为 { BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }

Java 环境

  1. 下载并安装 OpenJDK(版本需满足 > JDK 9)。
  2. 在 VS Code 的插件市场中搜索 java ,安装 Extension Pack for Java 。

C# 环境

  1. 下载并安装 .Net 8.0
  2. 在 VS Code 的插件市场中搜索 C# Dev Kit ,安装 C# Dev Kit (配置教程)。
  3. 也可使用 Visual Studio(安装教程)。

Go 环境

  1. 下载并安装 go
  2. 在 VS Code 的插件市场中搜索 go ,安装 Go 。
  3. 按快捷键 Ctrl + Shift + P 呼出命令栏,输入 go ,选择 Go: Install/Update Tools ,全部勾选并安装即可。

Swift 环境

  1. 下载并安装 Swift
  2. 在 VS Code 的插件市场中搜索 swift ,安装 Swift for Visual Studio Code

JavaScript 环境

  1. 下载并安装 Node.js
  2. (可选)在 VS Code 的插件市场中搜索 Prettier ,安装代码格式化工具。

TypeScript 环境

  1. 同 JavaScript 环境安装步骤。
  2. 安装 TypeScript Execute (tsx)
  3. 在 VS Code 的插件市场中搜索 typescript ,安装 Pretty TypeScript Errors

Dart 环境

  1. 下载并安装 Dart
  2. 在 VS Code 的插件市场中搜索 dart ,安装 Dart

Rust 环境

  1. 下载并安装 Rust
  2. 在 VS Code 的插件市场中搜索 rust ,安装 rust-analyzer

术语表

下表列出了书中出现的重要术语。建议记住各个名词的英文叫法,以便阅读英文文献。

  数据结构与算法的重要名词

English简体中文
algorithm算法
data structure数据结构
code代码
file文件
function函数
method方法
variable变量
asymptotic complexity analysis渐近复杂度分析
time complexity时间复杂度
space complexity空间复杂度
loop循环
iteration迭代
recursion递归
tail recursion尾递归
recursion tree递归树
big-$O$ notation大 $O$ 记号
asymptotic upper bound渐近上界
sign-magnitude原码
1’s complement反码
2’s complement补码
array数组
index索引
linked list链表
linked list node, list node链表节点
head node头节点
tail node尾节点
list列表
dynamic array动态数组
hard disk硬盘
random-access memory (RAM)内存
cache memory缓存
cache miss缓存未命中
cache hit rate缓存命中率
stack
top of the stack栈顶
bottom of the stack栈底
queue队列
double-ended queue双向队列
front of the queue队首
rear of the queue队尾
hash table哈希表
hash set哈希集合
bucket
hash function哈希函数
hash collision哈希冲突
load factor负载因子
separate chaining链式地址
open addressing开放寻址
linear probing线性探测
lazy deletion懒删除
binary tree二叉树
tree node树节点
left-child node左子节点
right-child node右子节点
parent node父节点
left subtree左子树
right subtree右子树
root node根节点
leaf node叶节点
edge
level
degree
height高度
depth深度
perfect binary tree完美二叉树
complete binary tree完全二叉树
full binary tree完满二叉树
balanced binary tree平衡二叉树
binary search tree二叉搜索树
AVL treeAVL 树
red-black tree红黑树
level-order traversal层序遍历
breadth-first traversal广度优先遍历
depth-first traversal深度优先遍历
binary search tree二叉搜索树
balanced binary search tree平衡二叉搜索树
balance factor平衡因子
heap
max heap大顶堆
min heap小顶堆
priority queue优先队列
heapify堆化
top-$k$ problemTop-$k$ 问题
graph
vertex顶点
undirected graph无向图
directed graph有向图
connected graph连通图
disconnected graph非连通图
weighted graph有权图
adjacency邻接
path路径
in-degree入度
out-degree出度
adjacency matrix邻接矩阵
adjacency list邻接表
breadth-first search广度优先搜索
depth-first search深度优先搜索
binary search二分查找
searching algorithm搜索算法
sorting algorithm排序算法
selection sort选择排序
bubble sort冒泡排序
insertion sort插入排序
quick sort快速排序
merge sort归并排序
heap sort堆排序
bucket sort桶排序
counting sort计数排序
radix sort基数排序
divide and conquer分治
hanota problem汉诺塔问题
backtracking algorithm回溯算法
constraint约束
solution
state状态
pruning剪枝
permutations problem全排列问题
subset-sum problem子集和问题
$n$-queens problem$n$ 皇后问题
dynamic programming动态规划
initial state初始状态
state-transition equation状态转移方程
knapsack problem背包问题
edit distance problem编辑距离问题
greedy algorithm贪心算法