Apa itu 'Kunci' dalam ilmu komputer?

14

Saya agak bingung tentang apa sebenarnya arti 'kunci' dalam ilmu komputer. Saya memahami pasangan nilai kunci, kunci primer, dll ... Tapi saya tidak dapat menemukan definisi dari apa arti istilah 'kunci' dengan sendirinya.

Sejauh yang saya tahu itu hanya sepotong data. Dalam CLRS, data yang terkait dengan simpul pohon disebut sebagai 'kunci'. Data untuk mencari tabel hash disebut 'kunci'. Inikah 'kunci' itu?

TheMax
sumber
18
Tidak ada satu definisi teknis khusus. Penggunaan kata ini biasanya terinspirasi oleh definisi bahasa Inggris yang normal, misalnya merriam-webster.com/dictionary/key Atau lebih tepatnya saya harus mengatakan "definition s ". Secara umum, harapan Anda seharusnya adalah bahwa tidak ada definisi teknis pemersatu untuk kata-kata bahasa Inggris umum yang digunakan dalam berbagai konteks bahkan dalam satu bidang studi.
Derek Elkins meninggalkan SE
4
Bahkan bisa menjadi salah satu hal di keyboard Anda :-)
jamesqf
Ini sebenarnya sama dalam bahasa Inggris normal - angka kunci = orang utama dalam cerita, bukti kunci = bukti utama yang mengarah pada penyelesaian suatu kasus, kunci = mekanisme utama untuk membuka kunci pintu dll. Ini berarti "cara utama untuk mengakses sesuatu "dalam bahasa Inggris. Ini tidak spesifik untuk CS
slebetman
Ada juga "kunci" dalam arti kriptografi, yang saya anggap berbeda dari contoh pencarian data yang telah Anda sebutkan.
200_sukses
@slebetman Walaupun 'key' memang memiliki banyak kegunaan dalam bahasa Inggris, ada banyak penggunaan yang memiliki definisi tepat yang sangat spesifik untuk (subbidang) CS.
Kadal diskrit

Jawaban:

30

Dalam arti paling umum, kunci adalah sepotong informasi yang diperlukan untuk mengambil beberapa data. Namun, makna ini bermain berbeda tergantung pada situasi apa yang Anda hadapi.

Dalam konteks yang Anda sebutkan, kunci adalah pengidentifikasi unik untuk data lengkap yang digunakan untuk mengambilnya dari beberapa lokasi dalam struktur. Setiap kunci dikaitkan dengan hanya satu item, sehingga dapat digunakan untuk menemukan set data tertentu. Struktur data biasanya akan diatur sedemikian rupa sehingga menemukan kuncinya jauh lebih efisien daripada pencarian linear melalui semua data. Terkadang kunci sebenarnya adalah bagian dari data dan disimpan bersama dengannya (seperti kunci primer dalam basis data); di lain waktu, itu dipisahkan dari data itu sendiri (seperti dalam peta hash). Struktur data juga akan sering melakukan pemrosesan ekstra pada kunci (dan hanya kunci) untuk mendukung algoritma pencarian efisien (seperti dalam peta hash, kunci tersebut dikonversi menjadi kode hash, atau database akan mengindeks kunci utama menggunakan a B-tree).

Dalam kriptografi, kunci digunakan dalam arti yang lebih mirip dengan kunci fisik yang digunakan pada kunci. Mereka adalah bagian data yang diperlukan untuk mendapatkan yang asli dari data yang dienkripsi (untuk "membuka" data, jadi untuk berbicara).

jpmc26
sumber
3
Untuk mencegah kemungkinan kebingungan: dalam buku CLRS, kunci biasanya tidak dianggap unik, karena tidak harus untuk banyak struktur data.
Kadal diskrit
Lalu, secara umum, kuncinya adalah data untuk menavigasi struktur data? Itu masuk akal bagi saya, seperti kunci fisik yang digunakan untuk mengambil sesuatu dari kotak yang terkunci.
TheMax
@TheMax Saya tidak akan mengatakan bahwa definisi sesuai dengan kriptografi, karena tidak ada "navigasi" yang harus dilakukan. Itu cocok dengan daftar contoh Anda, tetapi saya tidak melihatnya sebagai paralel dengan kunci fisik dalam kasus tersebut.
jpmc26
@ jpmc26 yang keterangannya tepat, pertimbangkan bitor XOR dari kunci terhadap data,
mckenzm
Pada skala yang kita lihat hari ini, hash yang digunakan untuk kunci sintetis mungkin memang tidak unik, dan mungkin perlu pemutus dasi atau peracikan.
mckenzm
12

Sebuah kunci dalam konteks struktur data (seperti di CLRS buku) adalah nilai (sering integer) yang digunakan untuk mengidentifikasi komponen tertentu dari data struktur. Seringkali, kunci menentukan bagaimana data yang mendasarinya disimpan atau dimanipulasi. Sebagai contoh, di pohon pencarian biner kami memiliki itu untuk setiap node, kunci dari node itu lebih besar dari tombol di sub-tree kiri dan lebih kecil dari yang ada di subtree kanan. Properti ini membuatnya lebih mudah untuk mencari kunci yang diberikan (atau menentukan tidak ada simpul dengan kunci seperti itu).

Dalam praktiknya, data 'aktual' kami sering kali bukan kunci, tetapi sesuatu yang lebih besar dan lebih relevan daripada satu angka. Data ini disebut data satelit dan sebagian besar dapat diabaikan ketika berhadapan dengan manipulasi pada struktur data, selama data satelit bergerak setiap kali kunci dipindahkan (jika tidak, Anda kehilangan jejak data Anda).


Konsep kunci serupa dalam konteks basis data, tetapi sering kali diperlukan kunci itu unik . Kunci utama harus unik, misalnya. Persyaratan ini sering diperlukan dalam konteks struktur data, tetapi kadang-kadang dibuat untuk kesederhanaan.

Dalam kriptografi, kunci biasanya merujuk ke parameter (sering rahasia, tetapi tidak selalu!) Yang diperlukan untuk mengenkripsi atau mendekripsi dengan algoritma en- atau dekripsi yang diberikan. Kunci yang digunakan untuk mengenkripsi dan mendekripsi harus 'terkait' (dalam kriptografi simetris, kebutuhan harus sama) agar proses enkripsi atau dekripsi berhasil.

Kadal diskrit
sumber
Apa perbedaan antara data satelit dan kunci? Dari apa yang saya pahami, data satelit adalah data yang diatur oleh struktur data yang bukan bagian dari struktur aktual. Jadi bisakah saya mengatakan kunci dan data satelit sama-sama data dalam struktur, tetapi kunci adalah bagian dari struktur dan data satelit tidak?
TheMax
1
@TheMax Bisa dibilang, ya. Isi yang tepat dari data satelit tidak relevan untuk operasi pada struktur data (tetapi kemungkinan relevan untuk aplikasi yang menggunakan struktur data). Ini decoupling kunci dan data membuatnya lebih mudah untuk merancang struktur data yang efisien.
Kadal diskrit