Что такое «ключ» в информатике?

14

Я немного запутался в том, что именно означает «ключ» в компьютерной науке. Я понимаю пары ключ-значение, первичные ключи и т. Д. Но я не могу найти определение того, что сам по себе термин «ключ» означает.

Насколько я могу судить, это просто часть данных. В CLRS данные, связанные с узлами дерева, называются «ключами». Данные для поиска в хеш-таблице называются «ключом». Это то, что является «ключом»?

TheMax
источник
18
Не существует одного конкретного технического определения. Использование слова обычно вдохновлено его обычным английским определением, например, merriam-webster.com/dictionary/key. Вернее, я должен сказать «определение s ». В общем, вы должны ожидать, что не существует единого технического определения для общих английских слов, которые используются в нескольких контекстах, даже в пределах одной области обучения.
Дерек Элкинс покинул SE
4
Это может быть даже одна из тех вещей на вашей клавиатуре :-)
jamesqf
На обычном английском это фактически то же самое - ключевая фигура = основной человек в истории, ключевая часть свидетельства = основное доказательство, которое приводит к раскрытию дела, ключ = основной механизм, чтобы открыть дверь и т. Д. Это означает «основной путь». чтобы получить доступ к чему-то "на английском языке. Это не относится к CS
slebetman
Существуют также «ключи» в криптографическом смысле, которые я считаю отличными от упомянутых вами примеров поиска данных.
200_success
@slebetman В то время как «ключ» действительно имеет много применений в английском языке, есть много случаев, в которых есть точное определение, которое очень сильно зависит от (подполя) CS.
Дискретная ящерица

Ответы:

30

В самом общем смысле ключ - это фрагмент информации, необходимый для извлечения некоторых данных. Однако, это значение играет по-разному, в зависимости от того, с какой именно ситуацией вы сталкиваетесь.

В упомянутых вами контекстах ключ является уникальным идентификатором для полных данных, используемых для извлечения их из некоторого места в структуре. Каждый ключ связан только с одним элементом, поэтому его можно использовать для поиска определенного набора данных. Структура данных обычно организуется таким образом, что поиск ключа намного эффективнее, чем линейный поиск по всем данным. Иногда ключ фактически является частью данных и хранится вместе с ними (например, первичные ключи в базе данных); в других случаях он отделен от самих данных (как в хэш-карте). Структура данных также часто выполняет дополнительную обработку ключа (и только ключа) для поддержки его эффективного алгоритма поиска (например, в хэш-карте, ключ преобразуется в хэш-код или база данных будет индексировать первичные ключи с использованием B-дерево).

В криптографии ключ используется в некотором роде в большей степени, чем физические ключи, используемые в замках. Это фрагменты данных, необходимые для получения оригинала из зашифрованных данных (чтобы, так сказать, «разблокировать» данные).

jpmc26
источник
3
Чтобы избежать возможной путаницы: в книге CLRS ключи обычно не считаются уникальными, поскольку они не должны быть для многих структур данных.
Дискретная ящерица
Тогда, вообще, ключом являются данные для навигации по структуре данных? Это имеет смысл для меня, как будто физический ключ используется для извлечения чего-либо из заблокированного ящика.
TheMax
@ TheMax Я бы не сказал, что определение подходит для криптографии, так как нет никакой «навигации». Это подходит вашему списку примеров, но я не вижу в этом параллели с физическим ключом.
jpmc26
@ jpmc26, на котором описание находится точно, рассмотрите побитовое XOR ключа против данных,
mckenzm
В масштабах, которые мы видим сегодня, хеши, используемые для синтетических ключей, действительно могут быть не уникальными, и для них могут понадобиться средства разбиения связей или составления.
MKKENZM
12

Ключ в контексте структур данных (например, в книге КСПСЕ) представляет собой значение (часто целое число) , который используется для идентификации определенного компонента структуры данных. Часто ключи определяют, как хранятся или обрабатываются базовые данные. Например, в бинарных деревьях поиска мы имеем, что для каждого узла ключ этого узла больше, чем ключи в левом поддереве и меньше, чем ключи в правом поддереве. Это свойство облегчает поиск данного ключа (или определяет, что нет узла с таким ключом).

На практике наши «реальные» данные часто являются не ключевыми, а чем-то большим и более значимым, чем одно число. Эти данные называются спутниковыми данными и могут в основном игнорироваться при работе с структурами данных, если спутниковые данные перемещаются при каждом перемещении ключа (в противном случае вы теряете данные).


Концепция ключа аналогична в контексте баз данных, но там часто требуется, чтобы ключ был уникальным . Например, первичный ключ должен быть уникальным. Это требование часто является необязательным в контексте структур данных, но иногда делается для простоты.

В криптографии ключ обычно относится к (часто секретному, но не всегда!) Параметру, который необходим для шифрования или дешифрования с помощью данного алгоритма шифрования или дешифрования. Ключи, используемые для шифрования и дешифрования, должны быть «связаны» (в симметричной криптографии, должны быть одинаковыми), чтобы процесс шифрования или дешифрования был успешным.

Дискретная ящерица
источник
В чем разница между спутниковыми данными и ключами? Из того, что я понимаю, спутниковые данные - это данные, организованные структурой данных, которая не является частью реальной структуры. Итак, могу ли я сказать, что ключи и спутниковые данные являются данными в структуре, но ключи являются частью структуры, а спутниковые данные - нет?
TheMax
1
@ TheMax В некотором смысле, да. Точное содержание спутниковых данных не имеет значения для операций со структурой данных (но, вероятно, относится к приложению, использующему структуру данных). Такое разделение ключей и данных облегчает разработку эффективных структур данных.
Дискретная ящерица