O que é uma 'chave' em ciência da computação?

14

Estou um pouco confuso sobre qual é exatamente o significado de uma 'chave' na ciência da computação. Entendo pares de valores-chave, chaves primárias, etc ... Mas não consigo encontrar uma definição do que o termo 'chave' significa por si só.

Tanto quanto posso dizer, significa apenas um pedaço de dados. No CLRS, os dados associados aos nós da árvore são chamados de 'chaves'. Os dados para pesquisar uma tabela de hash são chamados de 'chave'. É isso que é uma 'chave'?

TheMax
fonte
18
Não há uma definição técnica específica. O uso da palavra é geralmente inspirado por sua definição normal em inglês, por exemplo, merriam-webster.com/dictionary/key Ou melhor, devo dizer "definição s ". Em geral, a sua expectativa deve ser que há não é uma definição técnica unificando para palavras em inglês que são usados em vários contextos, mesmo dentro de um único campo de estudo.
Derek Elkins saiu de SE
4
Pode até ser uma daquelas coisas em seu teclado :-)
jamesqf
Na verdade, é o mesmo no inglês normal - figura-chave = a pessoa principal da história, peça-chave da evidência = a evidência principal que leva à resolução de um caso, chave = o mecanismo principal para destrancar uma porta etc. Isso significa "o caminho principal para acessar algo "em inglês. Não é específico para CS
slebetman
Também existem "chaves" no sentido criptográfico, que eu consideraria diferentes dos exemplos de pesquisa de dados que você mencionou.
200_success 24/04/19
@slebetman Embora 'key' realmente tenha muitos usos no idioma inglês, existem muitos usos que têm uma definição precisa muito específica de (um subcampo) do CS.
Lagarto discreto

Respostas:

30

No sentido mais geral, uma chave é uma informação necessária para recuperar alguns dados. No entanto, esse significado é diferente, dependendo exatamente de qual situação você está lidando.

Nos contextos mencionados, uma chave é um identificador exclusivo para os dados completos usados ​​para recuperá-los de algum local na estrutura. Cada chave está associada a apenas um item, portanto, pode ser usada para encontrar um conjunto específico de dados. A estrutura de dados geralmente será organizada de forma que encontrar a chave seja muito mais eficiente do que uma pesquisa linear em todos os dados. Às vezes, a chave faz parte dos dados e é armazenada junto com ela (como chaves primárias no banco de dados); outras vezes, é segregado dos próprios dados (como em um mapa de hash). A estrutura de dados também costuma executar um processamento extra na chave (e somente na chave) para suportar seu algoritmo de pesquisa eficiente (como em um mapa de hash, a chave é convertida em um código de hash ou um banco de dados indexa as chaves primárias usando uma árvore B).

Na criptografia, uma chave é usada em um sentido mais semelhante às chaves físicas usadas nos bloqueios. São dados necessários para obter o original dos dados criptografados (para "desbloquear" os dados, por assim dizer).

jpmc26
fonte
3
Para evitar possíveis confusões: no livro CLRS, as chaves geralmente não são consideradas únicas, pois não precisam ser para muitas estruturas de dados.
Lagarto discreto
Então, em geral, uma chave é dados para navegar em uma estrutura de dados? Isso faz sentido para mim, como uma chave física é usada para recuperar algo de uma caixa trancada.
TheMax 23/04/19
@ TheMax Eu não diria que a definição se adequa à criptografia, pois não há "navegação" a ser feita. Ele combina com sua lista de exemplos, mas não vejo isso como um paralelo a uma chave física nesses casos.
precisa saber é o seguinte
@ jpmc26 que a descrição está no local, considere XOR bit a bit de uma chave de encontro aos dados,
mckenzm
Nas escalas que vemos hoje, os hashes usados ​​para chaves sintéticas podem de fato não ser únicos e podem precisar de desempate ou composição.
Mckenzm
12

Uma chave no contexto de estruturas de dados (como no livro CLRS) é um valor (geralmente um número inteiro) usado para identificar um determinado componente de uma estrutura de dados. Geralmente, as chaves determinam como os dados subjacentes são armazenados ou manipulados. Por exemplo, nas árvores de pesquisa binária , temos que, para cada nó, a chave desse nó é maior que as chaves na subárvore esquerda e menor que as da subárvore direita. Essa propriedade facilita a pesquisa de uma determinada chave (ou determina se não há um nó com essa chave).

Na prática, nossos dados 'reais' geralmente não são uma chave, mas algo maior e mais relevante que um único número. Esses dados são chamados de dados de satélite e podem ser ignorados principalmente ao lidar com manipulações em estruturas de dados, desde que os dados de satélite sejam movidos sempre que a chave for movida (caso contrário, você perderá o controle de seus dados).


O conceito de uma chave é semelhante no contexto de bancos de dados, mas geralmente é necessário que uma chave seja única . Uma chave primária deve ser única, por exemplo. Esse requisito geralmente não é necessário no contexto das estruturas de dados, mas às vezes é feito para simplificar.

Na criptografia, uma chave geralmente se refere a um parâmetro (geralmente secreto, mas nem sempre!) Necessário para criptografar ou descriptografar com um determinado algoritmo de criptografia ou descriptografia. As chaves usadas para criptografar e descriptografar precisam estar 'relacionadas' (em criptografia simétrica, a necessidade de ser a mesma) para que o processo de criptografia ou descriptografia seja bem-sucedido.

Lagarto discreto
fonte
Qual é a diferença entre dados e chaves de satélite então? Pelo que entendi, dados de satélite são dados organizados pela estrutura de dados que não faz parte da estrutura real. Então, posso dizer que as chaves e os dados de satélite são dados na estrutura, mas as chaves fazem parte da estrutura e os dados de satélite não?
TheMax 23/04/19
1
@TheMax De certa forma, sim. O conteúdo preciso dos dados do satélite é irrelevante para as operações na estrutura de dados (mas provavelmente relevante para o aplicativo que usa a estrutura de dados). Esse desacoplamento de chave e dados facilita o projeto de estruturas de dados eficientes.
Lagarto discreto