0

学生 ID 番号やその他の情報を含む、ソートされていない学生情報のリストを含むファイルがあるとします。

学籍番号から学生情報を取得するプログラムを作りたいです。効率的にするために、学生 ID を B ツリーに格納します。

そのため、学籍番号を入力すると、B ツリーを検索して、そこにあるかどうかを確認します。また、もう 1 つのことを行います。学生 ID 番号が見つかった場合は、その学生の情報がファイル内のどこにあるかも返します。これが二次キーです。プログラムはこの情報を使用して残りの生徒の情報を見つけ、画面に出力します。

これはできますか?これがbツリーの仕組みですか?

4

3 に答える 3

1

B ツリーは、キーに対して値を格納し、指定されたキーとそれに関連付けられた値を対数時間で検索できるようにすることで機能します。したがって、2 番目のものはセカンダリ キーとは呼ばれず、単なる値です。この場合、これはファイルへのオフセットであり、本質的に値へのポインターになります。

これは、B ツリーを使用する完全に合理的で非常に一般的な方法です。

于 2010-05-08T08:27:03.687 に答える
1

あなたが説明することは、特にBツリーとは何の関係もありません(ところで、Bツリーが何であるかを本当に理解していますか?多くの人がそれらをバイナリツリーと混同しています)、ファイルの位置は「セカンダリキー」ではありません。学生 ID がマップされる値。

ただし、リレーショナル データベースが内部で説明したものと非常によく似た方法で動作することは事実です。データベース レコードは空き領域がある場所に保存され、インデックスはインデックス付きの列からレコードの場所に値をマップします。

于 2010-05-08T08:30:43.540 に答える
0

Bツリーはインデックスです。Bツリーを使用すると、インデックスを使用して非常に効率的に値を見つけることができます。インデックス自体にはノードとリーフがあります。各ノードには、ツリーのコンテンツを整理するためのノードがあります。ノードポインタは他のノードを指しています。または葉。したがって、ノードはいくつかの値といくつかのポインターを保持しています。ノードポインターは、インデックスファイルを参照するオフセットです。リーフには、値とポインターも含まれます。違いは、リーフ内のポインターは、データファイルのオフセットであり、実ファイル。

したがって、実際のレコードが保存されているファイルオフセットを返すためにインデックスを使用している値を検索する場合、たとえばID = 1のレコードを検索すると、オフセット10240が取得されます。 1KBのブロックがある場合は、データファイルを開いてブロック10を読み取ります。次に、このオフセットから、ユーザー名などのオフレコのすべてのデータにアクセスできます。

別の実装は、Leafsが他のファイルを指していないが、2番目の列を保持しているBTreeを使用することです。たとえば、IDを使用してユーザー名を検索する必要がある場合は、Leafsが次の構造を持つBTreeを作成できます。はIDで、2番目はユーザー名なので、インデックスからユーザー名を取得できます。

B +ツリーを使用することもできます。B+ツリーはBツリーのように実装されますが、リストにリーフを保持しているため、>、<などの操作者にインデックスを使用できます。

于 2011-09-02T21:36:34.313 に答える