| 关于   英文版   «  12.1. 第 10 周:结束   ::   目录

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 的计数系统,是计算机中一切数据(数字、文本、图像)的底层表示。

二分查找。在 已排序 数据中每次排除一半候选的查找方法,阶为 \(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(变量)

变量。内存中一个具名的取值位置。

   «  12.1. 第 10 周:结束   ::   目录

关闭窗口