1. 序章

この記事では、二分木を簡単に見て、このデータ構造のいくつかの便利なアプリケーションを確認します。

二分木は、最大2つの子を持つノードで構成されるツリーデータ構造です。 右と左の子供 。 上部のノードはルートと呼ばれます。 子のないノードは、リーフノードと呼ばれます。 ほとんどのアプリケーションは、試行、バイナリ検索ツリー、Bツリーなどのさまざまなバリアントのバイナリツリーを使用します。

コンピューティングでは、バイナリツリーは、データを階層的に格納する手段を提供するため、主に検索と並べ替えに使用されます。 二分木で実行できる一般的な操作には、挿入、削除、トラバーサルなどがあります。

2. ルーティングテーブル

ルーティングテーブルは、ネットワーク内のルーターをリンクするために使用されます。 これは通常、二分木のバリエーションであるトライデータ構造で実装されます。 ツリーデータ構造は、IPアドレスに基づいてルーターの場所を保存します。 同様のアドレスを持つルーターは、単一のサブツリーの下にグループ化されます。

パケットの転送先となるルーターを見つけるには、パケットの送信先となるネットワークアドレスのプレフィックスを使用してツリーをトラバースする必要があります。 その後、パケットは宛先アドレスの最長一致プレフィックスでルーターに転送されます。

3. デシジョンツリー

二分木は分類の目的にも使用できます。 決定木は、教師あり機械学習アルゴリズムです。 ここでは、意思決定プロセスをエミュレートするために二分木データ構造が使用されています

決定木は通常、ルートノードで始まります。 内部ノードは、条件またはデータセット機能です。 ブランチは決定ルールであり、リーブノードは決定の結果です。

たとえば、リンゴを分類したいとします。 この問題の決定木は次のようになります。

4. 発現評価

二分木のもう1つの便利なアプリケーションは、式の評価です。 数学では、式は値を評価する演算子とオペランドを持つステートメントです。 二分木のリーフはオペランドであり、内部ノードは演算子です。

式は、内部ノードの演算子をリーフのオペランドに適用することによって評価されます。

5. 並べ替え

バイナリ検索ツリー。バイナリツリーの変形は、アイテムを並べ替えるための並べ替えアルゴリズムの実装で使用されます。 二分探索木は、左の子の値が親ノードの値よりも小さくなるような、単純に順序付けまたはソートされた二分木です。 同時に、右側のノードの値は親ノードの値よりも大きくなっています。

並べ替え手順を完了するには、最初に並べ替えるアイテムを二分探索木に挿入します。 ソートされたアイテムを取得するには、 in-ordertraversalを使用してツリーをトラバースします。

二分木での並べ替えの詳細については、二分木での要素の並べ替えに関する記事をご覧ください。

6. データベースのインデックス

データベースのインデックス作成では、Bツリーを使用してデータを並べ替え、検索、挿入、削除を簡素化します。 Bツリーはバイナリツリーではありませんが、バイナリツリーのプロパティを取得すると1になる可能性があることに注意してください。

データベースは、データベース内の指定されたレコードごとにインデックスを作成します。 次に、Bツリーはその内部ノードに、リーフノードの実際のデータレコードを含むデータレコードへの参照を格納します。 これにより、データベース内のデータへの順次アクセスが提供されます。

データベースでのBツリーの使用方法の詳細については、データベースのコンテキストでのBツリーに関する記事を確認してください。

7. データ圧縮

データ圧縮では、ハフマン符号化を使用して、データを圧縮できるバイナリツリーを作成します。 データ圧縮とは、使用するビット数を減らすためにデータをエンコードする処理です。 圧縮するテキストが与えられると、ハフマンコーディングはバイナリツリーを構築し、テキスト内の頻度に基づいてノードに文字のエンコーディングを挿入します。

文字のエンコーディングは、ツリーをそのルートからノードまでトラバースすることによって取得されます。 頻繁に出現する文字は、出現頻度の低い文字に比べてパスが短くなります。 これは、頻繁な文字のビット数を減らし、最大のデータ圧縮を保証するために行われます。

ハフマンコードの生成方法の詳細については、キューに関する記事をご覧ください。

8. 結論

この記事では、実際のアプリケーションでのバイナリツリーデータ構造のアプリケーションを確認しました。