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

データ構造における配列の倍増


動的メモリ割り当てを使用して配列を作成する場合があります。動的メモリ割り当て手法を使用してアレイを割り当てる場合、いくつかの操作を実行することでアレイのサイズを2倍にすることができます。

初期配列サイズが5だったとします。

配列
0
1
2
3
4
要素1
要素2
要素3
要素4
要素5

配列を2倍にした後、サイズは-

0
1
2
3
4
5
6
7
8
9
要素1
要素2
要素3
要素4
要素5
要素6
要素7
要素8
要素9
要素10

サイズnの配列arrのサイズを2倍にするには、arr[0…n-1]。最初に、mなどのサイズの新しい配列を1つ作成する必要があります。次に、n個の要素をarrから新しい配列にコピーします。最後に、arrの値を変更して、新しい配列を指すようにします。

サイズmの配列を作成するには、θ(m)の時間がかかります。これは、いくつかのデフォルト値で初期化されるためです。次に、古いアレイから新しいアレイにコピーするために、追加のθ(n)時間が必要になります。したがって、操作にはθ(m + n)の時間がかかります。この操作は、アレイがいっぱいになったときに実行されます。そして通常、m値は2nと同じです。したがって、複雑さはθ(2n + n)=θ(3n)であり、θ(n)に相当します。ただし、この操作はコストがかかると見なされます。ただし、この操作はサブシーケンスn回の反復で償却され、反復ごとにθ(1)時間しか追加されません。したがって、一定の係数で配列サイズを増やしても、漸近的な複雑さに悪影響を及ぼさないことが理解できます。


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

    このセクションでは、セグメントツリーとは何かを確認します。それについて説明する前に、1つの問題を見てみましょう。 配列arr[0、…、n-1]があるとすると、次の操作を実行できます- インデックスlからrまでの要素の合計を求めます。ここで0≤l≤r≤n-1 配列の指定された要素の値を新しい値xに変更します。 arr [i]=xを実行する必要があります。 0からn–1の範囲のi。 この問題は、セグメントツリーを使用して解決できます。セグメントツリーは、O(log n)時間で合計とクエリを取得するのに役立ちます。では、これを表現する方法を見てみましょう- リーフノードは、

  2. ハーフエッジデータ構造

    はじめに テンプレートパラメータまたはハーフエッジデータ構造(HalfedgeDSと略記)のHDSは、平面マップ、多面体、またはその他の方向付け可能な2次元など、頂点、エッジ、および面の入射情報を維持できるエッジ中心のデータ構造として定義されます。ランダムな次元に埋め込まれたサーフェス。各エッジは、反対方向の2つのハーフエッジに分割されます。各ハーフエッジには、1つの入射面と1つの入射頂点が格納されます。各面と各頂点に1つの入射ハーフエッジが格納されます。ハーフエッジデータ構造のバリエーションを減らすと、面のハーフエッジポインタや面の保存など、この情報の一部を削除できます。 ハーフエッジデ