Що таке "ключ" в інформатиці?


14

Я трохи розгублений, що саме означає "ключ" в інформатиці. Я розумію пари ключ-значення, первинні ключі тощо ... Але я не можу знайти визначення поняття "ключ" саме по собі.

Наскільки я можу сказати, це означає лише частину даних. У CLRS дані, пов'язані з деревами, називаються "ключами". Дані для пошуку хеш-таблиці називаються "ключами". Це що таке «ключ»?


18
Немає одного конкретного технічного визначення. Вживання цього слова, як правило, надихає його нормальним, англійським визначенням, наприклад, merriam-webster.com/dictionary/key Або, скоріше, я повинен сказати "визначення s ". Загалом, ваше сподівання має бути таким, що не існує уніфікуючого технічного визначення для загальних англійських слів, які вживаються в декількох контекстах навіть у межах однієї галузі дослідження.
Дерек Елкінс виїхав

4
Це може бути навіть одна з таких речей на вашій клавіатурі :-)
jamesqf

Насправді те саме в звичайній англійській мові - ключова фігура = первинний чоловік у історії, ключовий доказ = первинні докази, які призводять до вирішення справи, ключ = первинний механізм відчинення дверей тощо. Це означає "головний спосіб отримати доступ до чогось "англійською мовою. Це не характерно для CS
slebetman

Існують також "ключі" в криптографічному сенсі, які я вважаю б різними від згаданих вами прикладів пошуку даних.
200_успіх

@slebetman Хоча "ключ" справді має багато вживань в англійській мові, існує багато звичаїв, які мають чітке визначення, яке дуже специфічно для (підполя) CS.
Дискретна ящірка

Відповіді:


30

У найзагальнішому сенсі ключовим є інформація, необхідна для отримання деяких даних. Однак це значення розігрується по-різному, залежно від того, з якою ситуацією ви маєте справу.

У згаданих вами контекстах ключ - це унікальний ідентифікатор для повних даних, які використовуються для вилучення їх з якогось місця в структурі. Кожна клавіша пов'язана лише з одним елементом, тому її можна використовувати для пошуку певного набору даних. Структура даних зазвичай буде організована таким чином, що пошук ключа є набагато ефективнішим, ніж лінійний пошук по всіх даних. Іноді ключ насправді є частиною даних і зберігається разом з ним (як первинні ключі в базі даних); в інших випадках він відокремлюється від самих даних (як на хеш-карті). Структура даних також часто виконуватиме додаткову обробку ключа (і лише ключа) для підтримки його ефективного алгоритму пошуку (наприклад, у хеш-карті, ключ перетворюється в хеш-код, або база даних індексує первинні ключі за допомогою B-дерево).

У криптографії ключ використовується в сенсі, більш схожим на фізичні ключі, що використовуються в замках. Вони є частинами даних, необхідними для отримання оригіналу із зашифрованих даних (щоб, так би мовити, "розблокувати" дані).


3
Для запобігання можливої ​​плутанини: у книзі CLRS ключі, як правило, не вважаються унікальними, оскільки вони не повинні бути для багатьох структур даних.
Дискретна ящірка

Тоді, загалом, ключовим є дані для навігації в структурі даних? Це має сенс для мене, як фізичний ключ використовується для отримання чогось із замкненого вікна.
TheMax

@TheMax Я б не сказав, що визначення відповідає криптографії, оскільки "навігації" робити не можна. Це відповідає вашому списку прикладів, але я не вважаю це паралельним фізичному ключу в тих випадках.
jpmc26

@ jpmc26, що опис є місцем, вважайте побіжно XOR ключа проти даних,
mckenzm

На масштабах, які ми бачимо сьогодні, хеші, які використовуються для синтетичних ключів, справді можуть бути не унікальними, і вони можуть потребувати вимикачів або складок.
mckenzm

12

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

На практиці наші "фактичні" дані часто не є ключовими, а чимось більшими та більш актуальними, ніж одне число. Ці дані називаються супутниковими даними, і їх можна здебільшого ігнорувати при роботі з маніпуляціями над структурами даних, якщо супутникові дані рухаються щоразу, коли ключ переміщується (інакше ви втрачаєте інформацію про свої дані).


Поняття ключа схоже в контексті баз даних, але там часто потрібно, щоб ключ був унікальним . Первинний ключ, наприклад, повинен бути унікальним. Ця вимога часто несекретна в контексті структур даних, але іноді робиться для простоти.

У криптографії ключ зазвичай посилається на (часто секретний, але не завжди!) Параметр, необхідний для шифрування чи розшифрування за допомогою заданого алгоритму шифрування чи дешифрування. Ключі, які використовуються для шифрування та розшифрування, повинні бути "пов'язаними" (у симетричній криптографії, щоб бути успішним процес шифрування чи розшифрування).


Яка різниця між супутниковими даними та ключами тоді? Як я розумію, супутникові дані - це дані, організовані структурою даних, яка не є частиною фактичної структури. Тож чи можу я сказати, що ключі та супутникові дані є обома даними в структурі, але ключі є частиною структури, а супутникові дані - ні?
TheMax

1
@TheMax Певним чином, так. Точний вміст супутникових даних не має значення для операцій над структурою даних (але, ймовірно, стосується програми, що використовує структуру даних). Така розв'язка ключа та даних полегшує розробку ефективних структур даних.
Дискретна ящірка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.