プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

データ構造のセグメントツリー


このセクションでは、セグメントツリーとは何かを確認します。それについて説明する前に、1つの問題を見てみましょう。

配列arr[0、…、n-1]があるとすると、次の操作を実行できます-

  • インデックスlからrまでの要素の合計を求めます。ここで0≤l≤r≤n-1

  • 配列の指定された要素の値を新しい値xに変更します。 arr [i]=xを実行する必要があります。 0からn–1の範囲のi。

この問題は、セグメントツリーを使用して解決できます。セグメントツリーは、O(log n)時間で合計とクエリを取得するのに役立ちます。では、これを表現する方法を見てみましょう-

  • リーフノードは、指定された配列の要素です

  • 各内部ノードは、リーフノードのマージを表しています。マージは、場合によって異なる場合があります。ここでのマージは、ノードの下のリーフの合計です。

[1、3、5、7、9、11]のような配列があるとします。したがって、セグメントツリーは

データ構造のセグメントツリー


  1. データ構造の範囲ツリー

    範囲ツリーは、ポイントのリストを保持するための順序付けられたツリーデータ構造として定義されます。これにより、特定の範囲内のすべてのポイントを効率的に取得でき、通常は2次元以上で実装されます。 O(log d のクエリ時間が速いことを除いて、kdツリーと同じです。 n + k)が、O(n log d-1 のストレージが悪い n)、dはスペースの次元を示し、nはツリー内のポイントの数を示し、kは特定のクエリで取得されたポイントの数を示します。範囲ツリーは、間隔ツリーで区別できます。ポイントを格納して特定の範囲内のポイントを効率的に取得できるようにする代わりに、間隔ツリーは間隔を保存し、特定のポ

  2. データ構造内の高さが制限されたハフマンツリー

    高さ制限または深さ制限のハフマンツリーの図を以下に示します ツリーの深さの制限は、ほとんどの実際のハフマンの実装が対処しなければならない重要な問題です。 ハフマン構造は高さや深さを制限しません。もしそうなら、それが「最適」である可能性はありません。確かに、ハフマンツリーの最大の深さはフィボナッチ数列によって制限されますが、それは必要以上の深さのための十分な余地を残します。 ハフマンツリーの深さを制限する理由は何ですか?高速ハフマンデコーダーはルックアップテーブルを実装します。メモリコストを軽減するために複数のテーブルレベルを実装することは可能ですが、Huff0などの非常に高速なデコ