'Chìa khóa' trong khoa học máy tính là gì?


14

Tôi hơi bối rối về ý nghĩa chính xác của 'chìa khóa' trong khoa học máy tính. Tôi hiểu các cặp khóa-giá trị, khóa chính, v.v ... Nhưng tôi không thể tìm thấy định nghĩa về thuật ngữ 'khóa' nghĩa là gì.

Theo như tôi có thể nói nó chỉ có nghĩa là một phần dữ liệu. Trong CLRS, dữ liệu được liên kết với các nút cây được gọi là 'khóa'. Dữ liệu để tìm kiếm bảng băm được gọi là 'khóa'. Đây có phải là "chìa khóa" không?


18
Không có một định nghĩa kỹ thuật cụ thể. Việc sử dụng từ này thường được lấy cảm hứng từ định nghĩa tiếng Anh thông thường của nó, ví dụ merriam-webster.com/dipedia/key Hay đúng hơn tôi nên nói "định nghĩa s ". Nói chung, kỳ vọng của bạn là không có một định nghĩa kỹ thuật thống nhất cho các từ tiếng Anh thông dụng được sử dụng trong nhiều ngữ cảnh ngay cả trong một lĩnh vực nghiên cứu.
Derek Elkins rời SE

4
Nó thậm chí có thể là một trong những thứ trên bàn phím của bạn :-)
jamesqf

Nó thực sự giống nhau trong tiếng Anh thông thường - hình chính = người chính trong câu chuyện, bằng chứng chính = bằng chứng chính dẫn đến việc giải quyết vụ án, khóa = cơ chế chính để mở khóa cửa, v.v. Nó có nghĩa là "cách chính để truy cập một cái gì đó "bằng tiếng Anh. Nó không dành riêng cho CS
slebetman

Ngoài ra còn có "khóa" theo nghĩa mật mã, mà tôi sẽ coi là khác với các ví dụ tra cứu dữ liệu mà bạn đã đề cập.
200_success

@slebetman Mặc dù 'key' thực sự có nhiều cách sử dụng trong ngôn ngữ tiếng Anh, có nhiều cách sử dụng có định nghĩa chính xác rất cụ thể đối với (một trường con) CS.
Thằn lằn rời rạc

Câu trả lời:


30

Theo nghĩa chung nhất, khóa là một phần thông tin cần thiết để lấy một số dữ liệu. Tuy nhiên, ý nghĩa này diễn ra khác nhau tùy thuộc vào chính xác tình huống bạn đang xử lý.

Trong các bối cảnh bạn đề cập, khóa là một mã định danh duy nhất cho dữ liệu hoàn chỉnh được sử dụng để truy xuất nó từ một số vị trí trong cấu trúc. Mỗi khóa chỉ được liên kết với một mục, vì vậy nó có thể được sử dụng để tìm một tập hợp dữ liệu cụ thể. Cấu trúc dữ liệu thường sẽ được tổ chức theo cách mà việc tìm khóa hiệu quả hơn nhiều so với tìm kiếm tuyến tính thông qua tất cả dữ liệu. Đôi khi khóa thực sự là một phần của dữ liệu và được lưu trữ cùng với nó (như các khóa chính trong cơ sở dữ liệu); đôi khi, nó được tách riêng khỏi dữ liệu (như trong bản đồ băm). Cấu trúc dữ liệu cũng sẽ thường thực hiện xử lý bổ sung trên khóa (và chỉ khóa) để hỗ trợ thuật toán tìm kiếm hiệu quả của nó (chẳng hạn như trong bản đồ băm, khóa được chuyển đổi thành mã băm hoặc cơ sở dữ liệu sẽ lập chỉ mục các khóa chính bằng cách sử dụng một cây B).

Trong mật mã học, một khóa được sử dụng theo nghĩa gần giống với các khóa vật lý được sử dụng trên các khóa. Chúng là những phần dữ liệu cần thiết để có được bản gốc từ dữ liệu được mã hóa (để "mở khóa" dữ liệu, có thể nói).


3
Để ngăn ngừa sự nhầm lẫn có thể xảy ra: trong cuốn sách CLRS, các khóa thường không được coi là duy nhất, vì chúng không phải dành cho nhiều cấu trúc dữ liệu.
Thằn lằn rời rạc

Vậy thì, nói chung, một khóa là dữ liệu để điều hướng một cấu trúc dữ liệu? Điều đó có ý nghĩa với tôi, giống như một khóa vật lý được sử dụng để lấy một cái gì đó từ một hộp bị khóa.
TheMax

@TheMax Tôi sẽ không nói rằng định nghĩa phù hợp với mật mã, vì không có "điều hướng" nào được thực hiện. Nó không phù hợp với danh sách ví dụ của bạn, nhưng tôi không thấy nó là song song với khóa vật lý trong những trường hợp đó.
jpmc26

@ jpmc26 mô tả đó là tại chỗ, hãy xem xét XOR của bitwise đối với dữ liệu,
mckenzm

Trên quy mô chúng ta thấy ngày nay, băm được sử dụng cho các khóa tổng hợp thực sự có thể không phải là duy nhất và có thể cần bộ ngắt kết hợp hoặc ghép.
mckenzm

12

Một chìa khóa trong bối cảnh của cấu trúc dữ liệu (chẳng hạn như trong cuốn sách CLRS) là một giá trị (thường là một số nguyên) được sử dụng để xác định một thành phần nào đó của một cấu trúc dữ liệu. Thông thường, các khóa xác định cách dữ liệu cơ bản được lưu trữ hoặc thao tác. Ví dụ, trong các cây tìm kiếm nhị phân, chúng ta có cái đó cho mọi nút, khóa của nút đó lớn hơn các khóa trong cây con bên trái và nhỏ hơn các cây trong cây con bên phải. Thuộc tính này giúp tìm kiếm một khóa nhất định dễ dàng hơn (hoặc xác định không có nút nào có khóa đó).

Trong thực tế, dữ liệu 'thực tế' của chúng tôi thường không phải là một khóa, mà là một số lớn hơn và phù hợp hơn với một số duy nhất. Dữ liệu này được gọi là dữ liệu vệ tinh và hầu hết có thể bị bỏ qua khi xử lý các thao tác trên cấu trúc dữ liệu, miễn là dữ liệu vệ tinh di chuyển bất cứ khi nào khóa được di chuyển (nếu không, bạn sẽ mất dấu dữ liệu của mình).


Khái niệm về một khóa là tương tự trong bối cảnh của cơ sở dữ liệu, nhưng ở đó thường yêu cầu một khóa là duy nhất . Một khóa chính phải là duy nhất, ví dụ. Yêu cầu này thường không cần thiết trong bối cảnh cấu trúc dữ liệu, nhưng đôi khi được thực hiện để đơn giản.

Trong mật mã học, một khóa thường đề cập đến một tham số (thường là bí mật, nhưng không phải luôn luôn!) Cần thiết để mã hóa hoặc giải mã với thuật toán giải mã hoặc giải mã cụ thể. Các khóa được sử dụng để mã hóa và giải mã phải có 'liên quan' (trong mật mã đối xứng, cần phải giống nhau) để quá trình mã hóa hoặc giải mã thành công.


Sự khác biệt giữa dữ liệu vệ tinh và các khóa sau đó là gì? Theo những gì tôi hiểu, dữ liệu vệ tinh là dữ liệu được tổ chức bởi cấu trúc dữ liệu không phải là một phần của cấu trúc thực tế. Vì vậy, tôi có thể nói một khóa và dữ liệu vệ tinh đều là dữ liệu trong cấu trúc, nhưng khóa là một phần của cấu trúc và dữ liệu vệ tinh thì không?
TheMax

1
@TheMax Theo một cách nào đó, vâng. Nội dung chính xác của dữ liệu vệ tinh không liên quan đến các hoạt động trên cấu trúc dữ liệu (nhưng có thể phù hợp với ứng dụng sử dụng cấu trúc dữ liệu). Việc tách rời khóa và dữ liệu này giúp thiết kế cấu trúc dữ liệu hiệu quả dễ dàng hơn.
Thằn lằn rời rạc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.