私は、コンピュータサイエンスにおける「キー」の正確な意味について少し混乱しています。キーと値のペア、主キーなどを理解しています。しかし、「キー」という用語自体の意味の定義を見つけることができません。
私が知る限り、それは単なるデータを意味します。CLRSでは、ツリーノードに関連付けられたデータは「キー」と呼ばれます。ハッシュテーブルを検索するデータは「キー」と呼ばれます。これは「キー」とは何ですか?
私は、コンピュータサイエンスにおける「キー」の正確な意味について少し混乱しています。キーと値のペア、主キーなどを理解しています。しかし、「キー」という用語自体の意味の定義を見つけることができません。
私が知る限り、それは単なるデータを意味します。CLRSでは、ツリーノードに関連付けられたデータは「キー」と呼ばれます。ハッシュテーブルを検索するデータは「キー」と呼ばれます。これは「キー」とは何ですか?
回答:
最も一般的な意味では、キーはデータを取得するために必要な情報です。ただし、この意味は、あなたがどのような状況で対処しているかによって正確に異なります。
あなたが言及した文脈では、キーは構造内のある場所からそれを取得するために使用される完全なデータの一意の識別子です。各キーは1つのアイテムにのみ関連付けられているため、特定のデータセットを検索するために使用できます。通常、データ構造は、すべてのデータを線形検索するよりもキーを見つける方がはるかに効率的な方法で編成されます。キーは実際にはデータの一部であり、データとともに格納されている場合があります(データベースのプライマリキーなど)。それ以外の場合は、データ自体から分離されます(ハッシュマップなど)。データ構造は、キー(およびキーのみ)で追加の処理を実行して、効率的な検索アルゴリズム(ハッシュマップ、キーがハッシュコードに変換される、またはデータベースがプライマリキーにインデックスを付けるなど) Bツリー)。
暗号化では、キーは、ロックで使用される物理キーに似た意味で使用されます。それらは、暗号化されたデータから元のデータを取得するために必要なデータです(いわば、データを「ロック解除」するため)。
キー(例えば書籍CLRSのように)データ構造の文脈では、データ構造の特定のコンポーネントを識別するために使用される値(しばしば整数)です。多くの場合、キーは、基礎となるデータの格納方法または操作方法を決定します。たとえば、バイナリ検索ツリーでは、すべてのノードについて、そのノードのキーは左側のサブツリーのキーより大きく、右側のサブツリーのキーよりも小さくなっています。このプロパティを使用すると、特定のキーを簡単に検索できます(または、そのようなキーを持つノードがないと判断します)。
実際には、「実際の」データは多くの場合キーではなく、単一の数値よりも大きく関連性の高いものです。このデータはサテライトデータと呼ばれ、キーが移動するたびにサテライトデータが移動する限り、データ構造の操作を処理する場合はほとんど無視できます(そうでなければ、データを追跡できなくなります)。
キーの概念はデータベースのコンテキストでは似ていますが、キーが一意であることがしばしば必要です。たとえば、主キーは一意である必要があります。この要件は、多くの場合、データ構造のコンテキストでは必須ですが、簡単にするために作成されることもあります。
暗号化では、キーは通常、特定の暗号化または暗号化解除アルゴリズムで暗号化または暗号化解除するために必要な(多くの場合、秘密ではありませんが!)パラメーターを指します。暗号化または復号化に使用されるキーは、暗号化または復号化のプロセスが成功するために「関連」する必要があります(対称暗号法では、同じである必要があります)。