Che cos'è una "chiave" nell'informatica?


14

Sono un po 'confuso su quale sia esattamente il significato di una "chiave" nell'informatica. Comprendo coppie chiave-valore, chiavi primarie, ecc ... Ma non riesco a trovare una definizione di cosa significhi da solo il termine "chiave".

Per quanto ne so, significa solo un dato. In CLRS, i dati associati ai nodi dell'albero sono denominati "chiavi". I dati per la ricerca in una tabella hash sono chiamati 'chiave'. È questa una 'chiave'?


18
Non esiste una definizione tecnica specifica. L'uso della parola è di solito ispirato alla sua normale definizione inglese, ad esempio merriam-webster.com/dictionary/key O piuttosto dovrei dire "definizione s ". In generale, ci si aspetta che non ci sia una definizione tecnica unificante per le parole inglesi comuni che vengono utilizzate in più contesti anche all'interno di un singolo campo di studio.
Derek Elkins lasciò il

4
Potrebbe anche essere una di quelle cose sulla tua tastiera :-)
jamesqf

In realtà è lo stesso nell'inglese normale - figura chiave = la persona principale nella storia, prova chiave = l'evidenza primaria che porta alla risoluzione di un caso, chiave = il meccanismo principale per aprire una porta, ecc. Significa "la via principale per accedere a qualcosa "in inglese. Non è specifico per CS
slebetman

Esistono anche "chiavi" in senso crittografico, che considererei diverse dagli esempi di ricerca dei dati che hai citato.
200_successo

@slebetman Mentre 'key' ha davvero molti usi nella lingua inglese, ci sono molti usi che hanno una definizione precisa che è molto specifica per (un sottocampo di) CS.
Lucertola discreta

Risposte:


30

Nel senso più generale, una chiave è un'informazione necessaria per recuperare alcuni dati. Tuttavia, questo significato si manifesta in modo diverso a seconda della situazione che stai affrontando.

Nei contesti menzionati, una chiave è un identificatore univoco per i dati completi utilizzati per recuperarlo da una posizione nella struttura. Ogni chiave è associata a un solo elemento, quindi può essere utilizzata per trovare un determinato set di dati. La struttura dei dati sarà di solito organizzata in modo tale che trovare la chiave sia molto più efficiente di una ricerca lineare attraverso tutti i dati. A volte la chiave fa effettivamente parte dei dati e viene archiviata insieme ad essa (come le chiavi primarie nel database); altre volte, è separato dai dati stessi (come in una mappa hash). La struttura dei dati eseguirà spesso anche elaborazioni extra sulla chiave (e solo sulla chiave) per supportare il suo algoritmo di ricerca efficiente (come in una mappa hash, la chiave viene convertita in un codice hash o un database indicizzerà le chiavi primarie usando un albero B).

Nella crittografia, una chiave viene utilizzata in un certo senso più simile alle chiavi fisiche utilizzate sulle serrature. Sono pezzi di dati necessari per ottenere l'originale dai dati crittografati (per "sbloccare" i dati, per così dire).


3
Per evitare possibili confusioni: nel libro CLRS, le chiavi di solito non sono considerate uniche, in quanto non devono esserlo per molte strutture di dati.
Lucertola discreta

Quindi, in generale, una chiave sono i dati per navigare in una struttura di dati? Questo ha senso per me, come una chiave fisica viene utilizzata per recuperare qualcosa da una scatola chiusa a chiave.
TheMax

@TheMax Non direi che la definizione si adatta alla crittografia, in quanto non c'è "navigazione" da fare. Si adatta al tuo elenco di esempi, ma in questi casi non lo vedo come parallelo a una chiave fisica.
jpmc26,

@ jpmc26 che la descrizione è esatta, considera XOR bit a bit di una chiave rispetto ai dati,
mckenzm

Sulle scale che vediamo oggi, gli hash usati per i tasti sintetici potrebbero non essere unici e potrebbero aver bisogno di pareggi o compounding.
mckenzm,

12

Una chiave nel contesto delle strutture di dati (come nel libro CLRS) è un valore (spesso un numero intero) che viene utilizzato per identificare un determinato componente di una struttura di dati. Spesso le chiavi determinano il modo in cui i dati sottostanti vengono archiviati o manipolati. Ad esempio, negli alberi di ricerca binari abbiamo che per ogni nodo, la chiave di quel nodo è più grande delle chiavi del sottoalbero di sinistra e più piccole di quelle del sottotree di destra. Questa proprietà semplifica la ricerca di una determinata chiave (o determina che non esiste un nodo con tale chiave).

In pratica, i nostri dati "reali" spesso non sono una chiave, ma qualcosa di più grande e più rilevante di un singolo numero. Questi dati sono chiamati dati satellitari e possono essere ignorati principalmente quando si tratta di manipolazioni su strutture di dati, purché i dati satellitari si spostino ogni volta che si sposta la chiave (altrimenti, si perde traccia dei dati).


Il concetto di chiave è simile nel contesto dei database, ma spesso è necessario che sia una chiave unica . Una chiave primaria deve essere univoca, ad esempio. Questo requisito è spesso essenziale nel contesto delle strutture di dati, ma a volte è reso semplice.

Nella crittografia, una chiave di solito si riferisce a un parametro (spesso segreto, ma non sempre!) Necessario per crittografare o decrittografare con un determinato algoritmo di crittografia o decrittografia. Le chiavi utilizzate per crittografare e decrittografare devono essere "correlate" (nella crittografia simmetrica, la necessità di essere la stessa) affinché il processo di crittografia o decrittografia abbia esito positivo.


Qual è la differenza tra i dati satellitari e le chiavi allora? Da quanto ho capito, i dati satellitari sono dati organizzati dalla struttura dei dati che non fa parte della struttura effettiva. Quindi posso dire che una chiave e i dati satellitari sono entrambi dati nella struttura, ma le chiavi fanno parte della struttura e i dati satellitari non lo sono?
TheMax

1
@TheMax In un certo senso, sì. Il contenuto preciso dei dati satellitari è irrilevante per le operazioni sulla struttura dei dati (ma probabilmente rilevante per l'applicazione che utilizza la struttura dei dati). Questo disaccoppiamento di chiavi e dati semplifica la progettazione di strutture dati efficienti.
Lucertola discreta
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.