hello-algo 数据结构与算法术语对照指南:128 个核心英文术语分类全解析
【免费下载链接】hello-algo《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持简中、繁中、English、日本語,提供 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 等代码实现项目地址: https://gitcode.com/GitHub_Trending/he/hello-algo
本篇以仓库英文术语表 en/docs/chapter_appendix/terminology.md 为骨架(简体中文版见 docs/chapter_appendix/terminology.md),将书中全部术语按「算法基础—复杂度—数据结构—算法策略」的章节脉络重新组织为带定义、带原文出处的分类索引。读完你将能:① 把英文术语准确对应回《Hello 算法》正文与源码;② 建立阅读英文教材/论文所需的专业词汇体系;③ 在需要检索某个概念时,通过术语直达其所属章节与代码实现。
术语表在本书中的定位
《Hello 算法》(hello-algo) 是一套以「动画图解 + 一键可运行代码」讲解数据结构的开源教程。由于其正文涉及大量中英对照的专业名词(如 complement、chaining、probing、heapify、pruning 等),书末特意在附录中维护了一张全量术语表,帮助读者:
- 在读正文遇到某个术语时快速定位其英文/中文标准叫法;
- 在阅读英文文献、查阅英文 API 文档、参与英文技术社区讨论时使用统一词汇;
- 在跨语言版本(简体中文、繁体中文、English、日本語、俄语等)间对照时保持一致口径。
当前仓库的多个语言版本目录下均维护了同结构的chapter_appendix/terminology.md(如 en/docs/chapter_appendix/terminology.md、docs/chapter_appendix/terminology.md),作为 mkdocs 导航(见 en/mkdocs.yml)中附录章节的组成部分。需要说明的是,术语表是「名词速查索引」而非算法教程,因此本文在展示全量词条的同时,会为每个分类补充书中出处与仓库内可验证的实现依据,让每条术语都能「追回正文」。
一、基础概念与编程术语
这类术语构成全书一切讨论的通用语言,正文在 chapter_introduction(绪论)与 chapter_data_structure(数据结构绪论)中反复使用:
| English | 简体中文 |
|---|---|
| algorithm | 算法 |
| data structure | 数据结构 |
| code | 代码 |
| file | 文件 |
| function | 函数 |
| method | 方法 |
| variable | 变量 |
其中algorithm与data structure是全书核心定义:算法是求解问题的步骤/方法,数据结构是数据的组织与存储方式,二者共同决定了程序的正确性与效率(详见 docs/chapter_introduction/what_is_dsa.md)。function 与 method的区别常被初学者混淆:在面向对象语境下,定义在类内部的函数习惯称为「方法」,这点在阅读 Java/C++/C# 等面向对象语言的示例代码时尤其常见。
二、复杂度分析(第一章核心词)
| English | 简体中文 |
|---|---|
| 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 | 补码 |
讲解出处:docs/chapter_computational_complexity/time_complexity.md、docs/chapter_computational_complexity/space_complexity.md、docs/chapter_computational_complexity/iteration_and_recursion.md。要点辨析:
- time complexity / space complexity是「渐近复杂度分析」的一对结果:只关心 $n \to \infty$ 时的增长趋势,用大 $O$ 记号(big-$O$ notation)表示渐近上界(asymptotic upper bound),因此实际写作 $O(\cdot)$ 时舍去常数与低阶项。
- loop / iteration / recursion:循环是语法结构,迭代与递归是两种「重复执行」的实现策略。正文指出递归调用产生函数调用栈开销,而**尾递归(tail recursion)**把递归调用放在函数返回前的最后一步,理论上编译器/解释器可以将其优化为与迭代同级的空间效率——正文同时特别注明 Python 默认并不支持尾递归优化(iteration_and_recursion.md)。
- recursion tree:当一个函数内部发起多次递归调用时(如斐波那契),一次调用会分叉出两个调用分支,反复分叉最终形成一棵 n 层的「递归树」,这正是分析递归时间复杂度的直观工具。
- sign-magnitude / 1’s complement / 2’s complement即原码/反码/补码,属于 docs/chapter_data_structure/number_encoding.md(计算机中整数与浮点数的二进制表示)的术语。三者中唯有补码使加减法可以统一用加法电路实现,这也是现代计算机普遍采用补码存储有符号整数的原因。
三、数组、链表与存储层次
| English | 简体中文 |
|---|---|
| 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 | 缓存命中率 |
出处:docs/chapter_array_and_linkedlist/array.md、linked_list.md、list.md、ram_and_cache.md。要点:
- **array(数组)**把同类元素连续存放,通过 **index(索引)**实现 $O(1)$ 随机访问;**linked list(链表)**由一个个 **node(节点)**通过引用串成,访问需从头遍历,但插入/删除只改引用。head node / tail node(头/尾节点)分别指链表第一与最后一个节点。
- list 与 dynamic array(列表与动态数组):编程语言中的
list(如 Python 的 list、C++ 的 vector、Java 的 ArrayList)本质是基于数组的动态扩容容器,属于动态数组。仓库中 codes/c/chapter_array_and_linkedlist/my_list.c 等实现即为手写动态数组的完整示例。 - hard disk / RAM / cache memory构成存储金字塔:硬盘容量大速度慢、内存(RAM)居中、cache(缓存)是 CPU 与内存间的高速小容量缓冲。数组因空间局部性好而缓存命中率高;cache miss / cache hit rate(缓存未命中/命中率)是衡量程序访存效率的关键指标,正文用它们解释「为何数组比链表在工程中常常更快」。
四、栈、队列与双向队列
| English | 简体中文 |
|---|---|
| stack | 栈 |
| top of the stack | 栈顶 |
| bottom of the stack | 栈底 |
| queue | 队列 |
| double-ended queue | 双向队列 |
| front of the queue | 队首 |
| rear of the queue | 队尾 |
出处:docs/chapter_stack_and_queue/stack.md、queue.md、deque.md。栈是「后进先出」(LIFO)结构,进出都发生在top(栈顶),与 **bottom(栈底)**相对;队列是「先进先出」(FIFO)结构,从 **rear(队尾)**入队、从 **front(队首)**出队。**double-ended queue(双向队列)**则在两端都能插入与删除。仓库在 codes/c/chapter_stack_and_queue/ 下提供了array_stack.c、linkedlist_queue.c、array_deque.c、linkedlist_deque.c等基于数组与链表的两种实现对照。
五、哈希表相关术语
| English | 简体中文 |
|---|---|
| hash table | 哈希表 |
| hash set | 哈希集合 |
| bucket | 桶 |
| hash function | 哈希函数 |
| hash collision | 哈希冲突 |
| load factor | 负载因子 |
| separate chaining | 链式地址 |
| open addressing | 开放寻址 |
| linear probing | 线性探测 |
| lazy deletion | 懒删除 |
出处:docs/chapter_hashing/hash_map.md、hash_collision.md、hash_algorithm.md。这是术语最密集也最容易混淆的一组,正文辨析非常细致:
- **hash table(哈希表)**底层是一个数组,数组的每个位置称为一个bucket(桶);**hash function(哈希函数)**把 key 映射到桶下标。当多个 key 落入同一桶即为hash collision(哈希冲突)——由于输入空间通常远大于输出空间,冲突在理论上不可避免。
- 两类主流解决思路:
- separate chaining(链式地址):让每个桶退化为一条链表,冲突元素都挂到同一条链表上。仓库实现见 codes/c/chapter_hashing/hash_map_chaining.c。当链过长时可进一步转成 AVL 树/红黑树以把查询降到 $O(\log n)$。
- open addressing(开放寻址):不引入额外结构,冲突时沿数组继续探测,最常见的是以步长 1 顺序后移的linear probing(线性探测),实现见 codes/c/chapter_hashing/hash_map_open_addressing.c。由于直接删除会切断探测链,需要以
TOMBSTONE常量打标记,即lazy deletion(懒删除)。
- load factor(负载因子)= 已存储元素数 / 桶数量,是触发扩容的阈值指标。正文给出的链式地址哈希表以「负载因子超过 $2/3$ 时扩容为原容量 2 倍」为例(hash_collision.md)。
六、树结构术语(全书词条最多的一组)
| English | 简体中文 |
|---|---|
| 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 tree | AVL 树 |
| red-black tree | 红黑树 |
| level-order traversal | 层序遍历 |
| breadth-first traversal | 广度优先遍历 |
| depth-first traversal | 深度优先遍历 |
| pre-order traversal | 前序遍历 |
| in-order traversal | 中序遍历 |
| post-order traversal | 后序遍历 |
| balanced binary search tree | 平衡二叉搜索树 |
| balance factor | 平衡因子 |
出处:docs/chapter_tree/binary_tree.md、binary_tree_traversal.md、binary_search_tree.md、avl_tree.md。需重点厘清的定义(正文有精确定义,binary_tree.md):
- 结构名词:**root node(根节点)**在最顶层(第 1 层),无父节点;**leaf node(叶节点)**无子节点;**level(层)**自上而下递增;**degree(度)**指节点的子节点个数,二叉树中度只能为 0、1、2;**height(高度)**与 **depth(深度)**在本书中均按「经过的边数」计量(根高度即树高),但正文注明部分教材按「路径上节点数」计量,此时数值会大一——这正是中文「高度/深度」术语在文献间最易踩的坑。
- 特殊二叉树:**perfect binary tree(完美二叉树)**每层全满,高为 $h$ 时节点总数 $2^{h+1}-1$(正文注明中文社区常称其为「满二叉树」,存在命名混用);**complete binary tree(完全二叉树)**只允许最底层不满且节点从左到右连续填充,堆的数组存储正是基于它;**full binary tree(完满二叉树)**指所有非叶节点都有两个子节点。三者概念正交、务必区分。图源对照可参考 docs/chapter_tree/binary_tree.assets/ 下 perfect/complete/full/balanced 四图。
- **balanced binary tree(平衡二叉树)**要求任一节点左右子树高度之差的绝对值不超过 1;AVL 树在此基础上显式维护balance factor(平衡因子)(本书定义为左子树高度减右子树高度,见 docs/chapter_tree/avl_tree.md,实现见 codes/c/chapter_tree/avl_tree.c),通过旋转保持balanced binary search tree。**red-black tree(红黑树)**是另一类常见平衡二叉搜索树,其约束更宽松、插入删除旋转更少——它在仓库正文中作为对比参照出现(avl_tree.md),也是 Java
HashMap桶链表过长时的转换目标。 - 遍历术语:**level-order / breadth-first traversal(层序/广度优先遍历)**按层逐行扫描,借助队列实现;pre/in/post-order(前/中/后序)遍历是深度优先的三种变体,前序「根左右」、中序「左根右」(二叉搜索树中序得到递增序列)、后序「左右根」,实现见 codes/c/chapter_tree/binary_tree_dfs.c。
七、堆结构术语
| English | 简体中文 |
|---|---|
| heap | 堆 |
| max heap | 大顶堆 |
| min heap | 小顶堆 |
| priority queue | 优先队列 |
| heapify | 堆化 |
| top-$k$ problem | Top-$k$ 问题 |
出处:docs/chapter_heap/heap.md、build_heap.md、top_k.md。**heap(堆)**在本书指基于完全二叉树实现的优先队列式结构:max heap堆顶为最大值、min heap堆顶为最小值;**priority queue(优先队列)**是抽象接口,堆是其最常见的底层实现。**heapify(堆化)**指自底向上/自顶向下调整节点以恢复堆序的过程,分「从顶至底堆化」与「从底至顶堆化」。top-$k$ 问题(求前 k 大/小元素)的堆解法只需 $O(n \log k)$,是堆「只关心极值」特性的典型应用。实现见 codes/c/chapter_heap/my_heap.c(大顶堆)与top_k.c。
八、图相关术语
| English | 简体中文 |
|---|---|
| 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 | 深度优先搜索 |
出处:docs/chapter_graph/graph.md、graph_operations.md、graph_traversal.md。**vertex(顶点)**与 **edge(边)**是图的基本组成;边无方向为undirected graph,有方向为directed graph;有向图里以某顶点为终点的边数称为in-degree(入度),为起点的边数称为out-degree(出度)。按是否带权、是否连通再区分为weighted / connected / disconnected graph。图的存储有两大方案:**adjacency matrix(邻接矩阵)占用 $O(n^2)$ 空间但判断任意两点是否adjacent(邻接)**为 $O(1)$;**adjacency list(邻接表)**更省空间但需遍历,其结构与哈希表的链式地址高度相似,链过长时同样可转 AVL 树/红黑树(graph.md)。BFS/DFS(广度优先搜索/深度优先搜索)是两大遍历算法,注意与树的 level-order/DFS 遍历术语呼应。实现见 codes/c/chapter_graph/graph_adjacency_matrix.c、graph_adjacency_list.c、graph_bfs.c、graph_dfs.c。
九、搜索算法术语
| English | 简体中文 |
|---|---|
| binary search | 二分查找 |
| searching algorithm | 搜索算法 |
出处:docs/chapter_searching/binary_search.md、searching_algorithm_revisited.md。**binary search(二分查找)**针对有序数组,通过每轮将搜索区间减半实现 $O(\log n)$ 查找,前提是数据有序且支持随机访问;以此为基点,书中还讨论了二分查找的边界问题(binary_search_edge.md)、插入点问题(binary_search_insertion.md)以及「用哈希代替线性查找」的工程思路(replace_linear_by_hashing.md)。实现见 codes/c/chapter_searching/binary_search.c。
十、排序算法术语
| English | 简体中文 |
|---|---|
| sorting algorithm | 排序算法 |
| selection sort | 选择排序 |
| bubble sort | 冒泡排序 |
| insertion sort | 插入排序 |
| quick sort | 快速排序 |
| merge sort | 归并排序 |
| heap sort | 堆排序 |
| bucket sort | 桶排序 |
| counting sort | 计数排序 |
| radix sort | 基数排序 |
出处:docs/chapter_sorting/。这些术语既是算法名也是章节名,每一类都有对应 markdown 讲解与多语言代码:冒泡/选择/插入属于 $O(n^2)$ 的简单排序,快排/归并/堆排属于 $O(n \log n)$ 的高级排序(快排注意其最差 $O(n^2)$ 退化,见 quick_sort.md),桶/计数/基数属于以空间换时间、可突破 $O(n \log n)$ 下界的非比较排序。排序章节开篇的 sorting_algorithm.md 会对比各种排序的稳定性、时间复杂度、空间复杂度与自适应特性,术语表正是阅读那张对比表的词汇前提。
十一、分治与汉诺塔
| English | 简体中文 |
|---|---|
| divide and conquer | 分治 |
| hanota problem | 汉诺塔问题 |
出处:docs/chapter_divide_and_conquer/divide_and_conquer.md、hanota_problem.md。**divide and conquer(分治)**把原问题分解为若干规模更小的子问题、递归求解再合并结果,典型应用即归并排序、快速排序与二分查找。汉诺塔问题是展示分治思想的经典递归例题,其最优策略恰为子问题分解的递归过程,代码见 codes/c/chapter_divide_and_conquer/hanota.c。
十二、回溯算法术语
| English | 简体中文 |
|---|---|
| backtracking algorithm | 回溯算法 |
| constraint | 约束 |
| solution | 解 |
| state | 状态 |
| pruning | 剪枝 |
| permutations problem | 全排列问题 |
| subset-sum problem | 子集和问题 |
| $n$-queens problem | $n$ 皇后问题 |
出处:docs/chapter_backtracking/backtracking_algorithm.md。回溯是「走不通就回头」的深度优先搜索策略,其关键词体系为:每个分支点是一个state(状态);每一步的可行选择受 **constraint(约束)**限制;走到尽头得到的完整状态序列即为一个solution(解);在进入某分支前提前判断其不可能产生合法解并跳过,称为pruning(剪枝)。三个经典问题分别来自独立章节:全排列(permutations_problem.md)、子集和(subset_sum_problem.md)、$n$ 皇后(n_queens_problem.md)。注意「state」在本书中横跨回溯(docs/chapter_backtracking/backtracking_algorithm.md)与动态规划两大章节,但含义侧重不同(DP 的 state 指子问题的状态定义)。
十三、动态规划术语
| English | 简体中文 |
|---|---|
| dynamic programming | 动态规划 |
| initial state | 初始状态 |
| state-transition equation | 状态转移方程 |
| knapsack problem | 背包问题 |
| edit distance problem | 编辑距离问题 |
出处:docs/chapter_dynamic_programming/。**dynamic programming(动态规划)**的核心方法论是「定义状态 → 推导状态转移方程 → 确定初始状态 → 确定遍历顺序」。术语表中四个关键概念直接对应 DP 解题流水线(dp_solution_pipeline.md):
- **initial state(初始状态)**即最小子问题的解,是递推的起点(如爬楼梯的 $dp[1]$、$dp[2]$);
- **state-transition equation(状态转移方程)**描述如何由更小的子问题推出当前状态(如 $dp[i] = dp[i-1] + dp[i-2]$);
- **knapsack problem(背包问题)**与 **edit distance problem(编辑距离问题)**是书中两大 DP 例题,前者衍生出 0-1 背包、完全背包与「恰好装满」变体(
knapsack_problem.md、unbounded_knapsack_problem.md),后者是二维 DP 的经典代表(edit_distance_problem.md)。
十四、贪心算法
| English | 简体中文 |
|---|---|
| greedy algorithm | 贪心算法 |
出处:docs/chapter_greedy/greedy_algorithm.md。贪心算法的思想是「每步都做当前看起来最优的选择」,并希望局部最优能累积为全局最优——正因如此,它必须通过数学证明或反例验证才能使用(正文举出分数背包可贪心、0-1 背包不可贪心的对照,见fractional_knapsack_problem.md与knapsack_problem.md)。术语表用词条最少的一组收尾,恰与本书「贪心一章相对独立、问题形态多样」的定位相符。
十五、把术语表用起来:三条实践建议
- 以章节为单位成组记忆:术语表按本书章节顺序排列并非偶然——数组/链表、栈/队列、哈希、树、堆、图、排序等每组词条恰好对应一组 mkdocs 章节目录。把上文的 14 个分类当作复习清单,学完一章即可核对一章,未掌握的术语就是需要回看的薄弱点。
- 把词条与仓库代码互相印证:术语不是孤立的名词。例如理解
balance factor就打开 codes/c/chapter_tree/avl_tree.c 看height字段与旋转逻辑;理解separate chaining就对照 codes/c/chapter_hashing/hash_map_chaining.c 的扩容与冲突插入代码。多语言实现(如 codes/python、codes/java 等目录)可横向对比同一术语在不同语言 API 中的落地形态。 - 跨语言对照阅读:遇到「原码/反码/补码」「完满/完全/完美二叉树」这类在中文语境下极易混淆的命名时,可直接查阅仓库其他语言版本的同名术语表(繁体 zh-hant/docs、日文 ja/docs、俄文 ru/docs 下均有
chapter_appendix/目录),通过官方多语言译文校准自己的理解,这也是术语表服务于多语言社区的核心价值。
总而言之,这份 128 词的术语表是整本《Hello 算法》的「概念坐标系」:每一个词条都能在正文章节、随书代码与练习题之间建立可回溯的引用关系。将本文作为你的双语词汇索引与复习清单,配合动画图解逐章阅读,即可在掌握数据结构与算法原理的同时,同步建立起阅读英文技术资料所必需的专业词汇能力。
【免费下载链接】hello-algo《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持简中、繁中、English、日本語,提供 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 等代码实现项目地址: https://gitcode.com/GitHub_Trending/he/hello-algo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考