图灵奖得主、《龙书》作者最新力作:抽象、算法与编译器
作者|Alfred Aho, Jeffrey Ullman
译文来源|AI科技评论
编译 | bluemin,编辑丨陈彩娴
数据模型包含一种或多种类型的数据以及数据之间可能存在的关系。例如,无向图可以描述为由节点和边组成,每条边连接两个节点。
某些编程语言不进行数据操作。这可能是一种传统的编程语言,也可能只进行一些特定的操作。这种语言总是有一个正式的语义——关于程序如何影响数据的规范。
-
一个全集 U。 -
全集 U 的子集 S,初始化时,S为空。
-
插入(x):如果U的元素x不在集合S中,则将其插入集合S中,即 S: = S ∪ {x}。 -
删除(x):从集合S中去除元素x,S:= S – {x}。 -
查找(x):如果元素x在集合S中返回真,否则为假。
单元格包含值(某个全集U的成员)和指向另一个单元格的链接(可能为空)。
标头,简单命名为指向单元格的链接(可能为空)。
全集 U。
哈希桶数 B,从 0 到 B-1 编号。
从 U 到 {0,1,…,B–1} 的哈希函数 h。每个哈希桶 b 是全集 U 的元素 x 的子集,使得 h(x)=b。
letter = [a-zA-Z]
digit = [0-9]
id = letter (letter+digit)*
-
选择:在关系R的列名上采用条件C,并返回满足条件C的R行。例如,如果将条件「Country=India」应用于图3中的关系状态,会得到一个新的关系,它的列名为State、Country和Pop,但只包含第二行和第六行状态。 -
投影:为一个关系获取一组列名,并生成一个具有相同行集的新关系,但只包含获取的列。 -
连接:接受两个关系和一个涉及两个关系的列名的条件 C,并通过以下方式生成一个新关系:1)考虑到每一对行,每个关系中的某两行;2)如果这两行中的值满足条件 C,则将两行合并后添加到结果关系中。
-
它们的数据模型是传统编程语言的模型,但数据分布在许多不同的任务中,我们称之为「计算节点」。实际上,多个任务可能在同一个处理器上执行,但将这些任务视为处理器本身便于分析问题。 -
程序也用常规语言编写,但同一程序可以在各个节点上同时运行。 -
有一种设备可供节点与其他节点通信。这种通信分阶段进行,并与计算阶段交替进行。