什么是计算机科学中的“关键”?


14

我对计算机科学中“键”的确切含义有些困惑。我了解键值对,主键等。但是我找不到“键”一词本身的定义。

据我所知,这仅意味着一条数据。在CLRS中,与树节点关联的数据称为“键”。搜索哈希表的数据称为“键”。这是“钥匙”吗?


18
没有一个具体的技术定义。该词的使用通常是受其正常的英语定义的启发,例如merriam-webster.com/dictionary/key,或者我应该说“ definition s ”。通常,您的期望应该是,即使在单个研究领域内,在多种情况下使用的通用英语单词也没有统一的技术定义。
德里克·埃尔金斯

4
它甚至可能是键盘上的东西之一:-)
jamesqf

这与普通英语实际上是相同的-关键人物=故事中的主要人物,关键证据=导致案件解决的主要证据,关键=解锁门的主要机制等。这表示“主要方式访问某些内容”。它不特定于CS
slebetman

在密码学意义上也有“密钥”,我认为与您提到的数据查找示例不同。
200_success

@slebetman虽然'key'确实在英语中有许多用途,但是有许多用途具有精确的定义,这些定义非常特定于CS(的子字段)。
离散蜥蜴

Answers:


30

从最一般的意义上讲,密钥是检索某些数据所需的一条信息。但是,根据您要处理的具体情况,此含义会有所不同。

在您提到的上下文中,键是用于从结构中某个位置检索它的完整数据的唯一标识符。每个键仅与一个项目相关联,因此可用于查找特定的数据集。数据结构通常以这样的方式组织:找到密钥比线性搜索所有数据要有效得多。有时,密钥实际上是数据的一部分,并与数据一起存储(例如数据库中的主键);其他时候,它与数据本身隔离(就像在哈希图中一样)。数据结构还将经常对键(仅键)执行额外的处理,以支持其有效的搜索算法(例如在哈希图中,将键转换为哈希码,或者数据库将使用B树)。

在密码学中,密钥的使用类似于锁上使用的物理密钥。它们是从加密数据中获取原始数据(所谓的“解锁”数据)所需的数据。


3
为避免可能的混淆:在CLRS一书中,通常认为键是唯一的,因为对于许多数据结构而言,键不一定是唯一的。
离散蜥蜴

那么,通常,关键是数据是否可以导航数据结构?这对我来说很有意义,就像使用物理密钥从锁定的盒子中检索东西一样。
TheMax

@TheMax我不会说定义适合密码学,因为没有“导航”可以完成。它确实适合您的示例列表,但在这些情况下,我认为它与物理密钥并不相同。
jpmc26

@ jpmc26上面有描述,考虑对数据进行密钥的按位XOR
mckenzm

在我们今天看到的规模上,用于合成键的散列确实可能不是唯一的,并且可能需要打破常规或复合。
mckenzm

12

密钥在数据结构(如在书CLRS)的上下文中是用于标识一个数据结构的特定成分的值(通常为整数)。通常,键决定如何存储或操纵基础数据。例如,在二叉搜索树中,对于每个节点,该节点的键大于左子树中的键,小于右子树中的键。通过此属性,可以更轻松地搜索给定的键(或确定不存在具有该键的节点)。

实际上,我们的“实际”数据通常不是关键,而是一些更大,更相关的数据。该数据称为卫星数据,只要处理密钥时只要移动卫星数据(否则,您就无法跟踪数据),则在处理数据结构时几乎可以忽略该数据。


密钥的概念在数据库的上下文中是相似的,但是通常要求密钥是唯一的。例如,主键必须是唯一的。此要求通常在数据结构的上下文中是必要的,但有时是出于简化目的。

在密码术中,密钥通常是指使用给定的加密算法或解密算法加密或解密所需的(通常是秘密的,但并非总是如此!)参数。为了成功进行加密或解密过程,用于加密和解密的密钥必须“相关”(在对称加密中,必须相同)。


那么卫星数据和密钥之间有什么区别?据我了解,卫星数据是由数据结构组织的数据,而不是实际结构的一部分。那么我可以说密钥和卫星数据都是结构中的数据,但是密钥是结构的一部分而卫星数据不是结构中的数据吗?
TheMax

1
@TheMax在某种程度上,是的。卫星数据的准确内容与数据结构上的操作无关(但可能与使用数据结构的应用程序有关)。密钥和数据的这种分离使设计有效的数据结构变得更加容易。
离散蜥蜴
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.