13.1. CS50 术语表¶
本术语表按英文词条排序,收录 CS50 课程讲义中的核心概念,释义均为中文改编版用词;英文词条与正文中的术语、代码关键字一一对应。
- abstraction(抽象)¶
抽象。把复杂细节藏在简化模型或接口之后的思维方式。本课中我们不断「剥开一层」(unpack a level of abstraction):字符串背后是内存地址,二进制背后是电压。
- algorithm(算法)¶
算法。解决问题的具体步骤。同一问题可用不同算法求解,效率可以天差地别——例如在电话簿中找名字,可从一页页翻(线性),也可每次对半砍(二分)。算法通常用 pseudocode 描述,并用 big O notation 分析。
- array(数组)¶
数组。在内存中 连续 存放同类型元素的数据结构,可按偏移量访问。
- artificial intelligence(人工智能)¶
人工智能(AI)。让计算机表现出接近人类的智能行为的技术总称。
- ASCII(ASCII 编码)¶
美国信息交换标准编码。把英文字母、数字与符号映射为 0–127 的数值,每字符占一字节;是 Unicode 的前身子集。
- attention(注意力)¶
注意力。谷歌 2017 年论文提出的机制,让模型聚焦于不同词汇之间的关系,是 large language model 的基石。
- base case(基本情况)¶
递归基(终止情形)。使 recursion 停止继续自我调用、防止无限循环的条件。
- base-1(一元计数法)¶
一元计数法。只用一种记号逐个数数的计数系统(如扳手指头),课程用它作为「基数」概念的引子,与计算机采用的 base-2 相对照。
- base-16(十六进制)¶
十六进制。拥有 16 个计数值(0–9 与 A–F)的计数系统,每一列都是 16 的幂;常用于速记颜色值与内存地址。
- base-2(二进制)¶
二进制。以 2 为基数的计数系统,只有 0 与 1 两个数字,是计算机内部的表示方式;见 binary。
- big O notation(大 O 记号)¶
大 O 记号。描述算法运行时间随问题规模增长的 阶 ,忽略常数与低阶项;用于比较 algorithm 的效率。
- binary(二进制)¶
二进制。只含 0 与 1 的计数系统,是计算机中一切数据(数字、文本、图像)的底层表示。
- binary search(二分查找)¶
二分查找。在 已排序 数据中每次排除一半候选的查找方法,阶为 \(O(\log n)\)。
- binary search tree(二叉搜索树)¶
二叉搜索树。每个结点都满足「左子树 < 根 < 右子树」的二叉树,使查找能像二分一样缩小范围; 平衡的二叉搜索树被称为查找结构的「圣杯」。
- bit(比特)¶
比特。最小的信息单位,一个 0 或 1。
- bubble sort(冒泡排序)¶
冒泡排序。反复比较并交换相邻逆序元素使大值「冒」到末尾的排序算法,最坏阶 \(O(n^2)\)。
- bug(缺陷)¶
缺陷(bug)。程序中导致错误结果的毛病;找出并移除它的过程叫 debugging。
- byte(字节)¶
字节。8 个比特组成的存储单位,通常恰好存放一个字符。
- collision(冲突)¶
哈希冲突。经 hash function 映射后落入同一个桶(数组下标) 的不同数据;本课用
apple与a的例子说明。- compiler(编译器)¶
编译器。把 source code 一次性翻译为 machine code 的程序,C 语言经编译后再运行;与 Python 这类解释执行的语言相对。
- CSS(层叠样式表)¶
层叠样式表(Cascading Style Sheets)。描述网页视觉呈现(布局、颜色、字体)的语言。
- data structure(数据结构)¶
数据结构。数据的组织与存储形式。本课依次比较 array、linked list、queue、stack、hash table 与 trie 的时间/空间权衡。
- database(数据库)¶
数据库。有组织存储、可高效查询的数据集合。
- debugging(调试)¶
调试。定位并移除 bug 的过程,包括打印调试值与 rubber duck debugging。
- decision tree(判定树)¶
决策树。机器学习模型:通过一连串「是/否」问题把输入归类。
- deep learning(深度学习)¶
深度学习。用多层神经网络从数据中学习模式的机器学习分支。
- DNS(域名系统)¶
域名系统(Domain Name System)。互联网上的服务器集合,把人类可读的域名映射为 IP 地址。
- DOM(文档对象模型)¶
文档对象模型(Document Object Model)。浏览器在内存中把 HTML 页面表示成的树状结构,JavaScript 可随用户输入动态更新它。
- dynamic memory allocation(动态内存分配)¶
动态内存分配。程序运行时在 heap 上按需申请内存的机制,C 语言中由 malloc 完成,须与释放配对以免 memory leak。
- embedding(嵌入)¶
嵌入。把词汇编码为数值向量,使词与词之间的关系可被计算。
- exception(异常)¶
异常。程序运行期发生的错误状况;Python 用
try/except捕获并处理。- final project(期末项目)¶
期末项目。课程结尾按自己的规格与设计构建作品的机会,展示与 hackathon 相关。
- Flask¶
Flask。基于 Python 的轻量 Web 框架,用「路由」把 URL 绑定到处理函数。
- flat-file database(平面文件数据库)¶
平面文件数据库。全部数据存于单张表(如
csv文件)的数据形式;简单但写入效率低、冗余多,见 relational database。- foreign key(外键)¶
外键。指向另一张表 primary key 的字段,用来在 relational database 的表之间建立关联(如
ratings的show_id指向shows的id)。- garbage collection(垃圾回收)¶
垃圾回收。运行时自动回收不再使用的内存;Python 等高级语言内置,C 需程序员手动释放。
- generative AI(生成式人工智能)¶
生成式人工智能。能够生成文本、图像等内容的人工智能。
- GPT(生成式预训练变换模型)¶
生成式预训练变换模型(Generative Pre-trained Transformer)。基于词汇间关系训练的 large language model 架构。
- hackathon(黑客松)¶
黑客松。通宵达旦共同完成项目的活动;CS50 用其作为期末项目的展示环节。
- hallucination(幻觉)¶
幻觉。large language model 一本正经地输出错误信息的现象。
- hash function(哈希函数)¶
哈希函数。把任意形态的数据映射为数组下标(桶位)的函数,如取首字母编码对桶数取模。
- hash table(哈希表)¶
哈希表。用 hash function 把键值对存入数组的数据结构,可牺牲更多内存换取更快查找。
- header file(头文件)¶
头文件。C 语言中声明库功能的文件(如
stdio.h、cs50.h),#include之后才能使用其中的函数。- heap(堆)¶
堆。存放 dynamic memory allocation 所得内存的区域,与存放函数调用帧的 stack 相对。
- HTML(超文本标记语言)¶
超文本标记语言(HyperText Markup Language)。用标签定义网页内容的标记语言。
- HTTP(超文本传输协议)¶
超文本传输协议(HyperText Transfer Protocol)。浏览器与服务器之间的应用层协议。
- index(索引)¶
索引。①数组中元素的位置编号;②数据库中用空间换时间的辅助结构(形如 hash table),加速查询。
- interpreter(解释器)¶
解释器。逐行直接执行源代码的程序(如 Python),区别于先整体翻译的编译。
- JavaScript¶
JavaScript。运行在浏览器中的脚本语言,为网页添加交互逻辑。
- large language model(大语言模型)¶
大语言模型(LLM)。基于海量文本训练、以预测下一个词为核心的庞大模型;可能产生 hallucination。
- linked list(链表)¶
链表。由 node 经指针串联而成的线性数据结构;头部插入为常数时间,查找为 \(O(n)\)。
- machine code(机器码)¶
机器码。CPU 能直接执行的指令形式,由源代码经编译得到。
- machine learning(机器学习)¶
机器学习。让计算机从数据中学习规律,而非由人显式编写规则。
- malloc¶
malloc。C 标准库函数,向 heap 申请指定字节数的内存。
- memory leak(内存泄漏)¶
内存泄漏。动态分配的内存不再使用却未被释放,导致可用内存逐渐耗尽。
- merge sort(归并排序)¶
归并排序。把数据对半递归排序再合并的「分而治之」算法,阶为 \(O(n \log n)\)。
- Minimax(极小极大)¶
极小极大。二人对抗博弈的搜索策略:把走法与结局化为数学分值,己方取最大、对手取最小。
- node(结点)¶
结点。linked list 或树中的单个元素,包含数据与指向下一元素的指针。
- NUL character(NUL 字符)¶
NUL 字符(
'\0')。字符串的结束标志。注意与有两个 L 的NULL区分:NULL是空指针值。- null pointer(空指针)¶
空指针。不指向任何有效内存地址的指针(
NULL);对其解引用通常触发 segmentation fault。- object-oriented programming(面向对象编程)¶
面向对象编程(OOP)。把数据与操作数据的方法封装为类与对象的编程范式。
- pixel(像素)¶
像素。图像上的一个色点,由红、绿、蓝三通道数值表示;图像本质上就是像素的集合。
- pointer(指针)¶
指针。存放内存地址的变量——「指针就是地址」。C 语言中字符串与 array 的底层即指针运算。
- primary key(主键)¶
主键。表中唯一标识一条记录的字段(如
id)。- prompt(提示词)¶
提示词。用户向 AI 提出的问题或指令文本。
- prompt engineering(提示词工程)¶
提示词工程。向人工智能提出优质问题的方法与技艺。
- pseudocode(伪代码)¶
伪代码。用人类可读文字描述算法步骤的记法,不拘泥于具体语言语法。
- queue(队列)¶
队列。先进先出(FIFO)的数据结构:先来先服务。
- race condition(竞态条件)¶
竞态条件。并发访问下结果取决于操作交错顺序的缺陷;经典例证是同时转账导致钱凭空产生或消失。
- recursion(递归的)¶
递归。函数以修改后的输入调用自身来逼近 base case 的求解方式。
- relational database(关系数据库)¶
关系数据库。数据存于多张相互关联的表(通过 primary key 与 foreign key),比 flat-file database 高效且少冗余。
- route(路由)¶
路由。Flask 中 URL 与处理函数的对应关系(
@app.route)。- rubber duck debugging(橡皮鸭调试法)¶
橡皮鸭调试法。向无生命的对象(或身边的任何人)逐行讲解代码以发现问题的调试技巧。
- running time(运行时间)¶
运行时间。算法耗时随问题规模的增长方式,用 big O notation 表述。
- scope(作用域)¶
作用域。变量可以被访问的程序范围;C 函数的局部变量在调用结束后即离开作用域。
- segmentation fault(段错误)¶
段错误。程序访问了非法内存地址(如解引用空指针)被操作系统强制终止。
- selection sort(选择排序)¶
选择排序。每轮从未排序部分选出最小值放到前端的排序算法,阶 \(O(n^2)\)。
- source code(源代码)¶
源代码。程序员用高级语言书写、人类可读的程序文本。
- SQL(结构化查询语言)¶
结构化查询语言(Structured Query Language)。操作关系数据库的语言:
SELECT查询、INSERT插入、DELETE删除、UPDATE更新。- SQL injection(SQL 注入)¶
SQL 注入。把恶意用户输入伪装成 SQL 命令诱使服务器执行(如
Robert'); DROP TABLE Students;--);防御之道是参数化查询与最小权限。- stack(栈)¶
栈。①后进先出(LIFO)的数据结构;②内存中记录函数调用及其局部变量的区域。
- string(字符串)¶
字符串。以 NUL character 结尾的字符数组。
- template(模板)¶
模板。服务端存放的含占位符的 HTML 骨架,由 Flask 填入数据后渲染成页面。
- trie(字典树)¶
字典树。每层为一个数组的树形结构,按字符逐层存储;查找恒为常数时间,但很耗内存。
- Unicode(统一码)¶
统一码。覆盖全世界文字与表情的字符编码标准,UTF-8 用 1–4 字节为字符变长编码,向下兼容 ASCII。
- variable(变量)¶
变量。内存中一个具名的取值位置。
