1.7~1.8 算術復習 PART 1

 

偶数番号のノードは左の子、奇数番号のノードは右の子でなければなりません。隣接する 2 つの番号のノードが兄弟であるかどうかを判断するには、それらを 2 で割った結果が同じかどうかだけを確認します。 

 

プレオーダートラバーサルは「ルート-左サブツリー-右サブツリー」であり、ポストオーダートラバーサルは「左サブツリー-右サブツリー-ルート」であるため、バイナリツリーのプレオーダーシーケンスとポストオーダーシーケンスが正確に一致する場合、逆に、バイナリ ツリーは各レベルで左右のサブツリーを 1 つだけ持つことができます。つまり、バイナリ ツリーの高さはノードの数と等しくなければなりません。
 各層にノードが 1 つだけある場合、各層の相対的な順序は変更されず、アクセス順序になります。

 

操作には N 回かかり、その後再帰の終了には 1 回、つまり N+1 回かかります 

 

s の値は等差数列の合計です 

 

  1. 以下の正しい記述は (D) です。
    A) 論理データ構造は 1 つの記憶構造のみを持つことができる
    B) データの論理構造は線形構造であり、記憶構造は非線形構造である
    C) 論理データ構造は複数の記憶構造を持つことができ、さまざまな効率
    D )論理データ構造は複数のストレージ構造を持つことができ、さまざまなストレージ構造がデータ処理の効率に影響します。

 

論理構造: 構造定義は操作オブジェクトの数学的記述であり、データ要素間の論理関係を記述します。例えば、線形構造、木構造、グラフ構造、メッシュ構造などである。それらはすべて論理構造です。

物理構造: ストレージ構造とも呼ばれ、コンピューター内のデータ構造の表現です (イメージとも呼ばれます)。たとえば、配列、ポインタなどです。

線形リスト:論理構造における線形構造であり、シーケンス リストやリンク リストが含まれます。

シーケンシャルテーブル:線形テーブルの一種で、配列を用いて実現された線形テーブルであるため、記憶構造(物理構造)は連続的です。

リンク リスト: 線形リストの一種で、その記憶構造では、任意の記憶単位のセットを使用してデータ要素を記憶します。したがって、そのストレージ構造は連続的であってもなくてもかまいません。一般に、ここで説明するリンク リストは不連続です。連結リストには静的連結リストと呼ばれる配列で表現される種類があり、その記憶構造は連続的である。

アレイ:ストレージユニットが連続している物理構造。
 

 

 

空の場合はチームの先頭とチームの最後尾が一致すると判断し、いっぱいの場合は最後尾+1がチームの先頭であると判断します。 

 

物理構造と同様のストレージ構造 

 

 

ハッシュ関数法、数値解析法、正方形中心法、区分的重ね合わせ法、擬似乱数法、除算剰余法の構築 

単連結リストの先頭ノードを設定する目的は、操作を簡略化することです。

 

 

 

自分と自分を比べなければならない 

 

 

2,4,,7,12 

 

 

 

 

 

最初は 2、5、ans=7、次に 7、7、ans=7+14=21、次に 14、9、ans=21+13=44 

 

ハフマン木の加重パスの長さはルートノードの数と等しくなく、両者は無関係であり、構築時に加重パスの長さが加重パスに加算されていることを意味します。

#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int>>q;
int n,num,ans=0;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>num;
        q.push(num);
    }
    while(q.size()>1){
        int num1=q.top();
        q.pop();
        int num2=q.top();
        q.pop();
        ans+=(num1+num2);
        q.push(num1+num2);
    }
    cout<<ans;
    return 0;
}

 

 

前のノードは後のノードより大きいか小さいかのいずれかです。 

94 は満たされず、91 より小さい 

 

 

 

 

ルート ノードを除く各ツリーには、各ノードにエッジがあり、x 個のツリーがあり、非ルート ノード (いわゆる非終端ノード) の数は nx で、エッジの合計はすべてのツリーの数は nx =k なので、x=nk 

 

 

 

初めて 39 に遭遇した場合は一致せず、その後に出現したすべての数値は 39 より大きい必要があります。101 が再度出現した場合は一致せず、その後に出現したすべての数値は 101 より小さくなります。25 に遭遇した場合は、その後に出現したすべての数値が 39 より大きくなります。 、条件が満たされていないため、検索パスではありません 

 

 

つまり、リーフ ノードの場合、出現するリーフ ノードの相対的な順序は固定されており、常に最下層の後に、次に左から右の順になります。

つまり、各層内のノードの相対的な順序は固定されており、走査方法が異なると各層の位置が変わります。 

 

たとえば、最後のノードは右側のサブツリーのルート ノードであり、このルート ノードには左側の子があります。中間順序シードでは、このルート ノードは依然として最後のノードですが、事前順序シードでは、必ずしも最後のノードであるとは限りません。最後のノード。 、その左の子が最後のノードです。 

プレオーダーとミッドオーダーがまったく同じ場合、プレオーダーは左と右のルート、ミッドオーダーは左と右のルート、ポストオーダーは左と右のルートとなるため、どちらにも右のノードはありません。 。 

3 つのノードで 5 つのバイナリ ツリー、3 つの形式のバイナリ ツリーを形成できます

 N はデータの総量を表し、FN は非常に多くのデータがスタックからポップされる可能性の合計を表し、これらの N 個の数値のうちの N 番目...番号が最終的にスタックからポップされると仮定します。スタックが N の場合、前のスタックは次のとおりです。

F(1)=F(0)F(0)=1、F(2)=F(0)F(1)+F(1)F(0)=2、F(3)=F(0) F(2)+F(1)F(1)+F(2)F(0)=5

F(4)=F(0)F(3)+F(1)F(2)+F(2)F(1)+F(3)F(0)=14

F(5)=F(0)F(4)+F(1)F(3)+F(2)F(2)+F(3)F(1)+F(4)F(0)= 28+10+4=42

つまり、K 個の数値がスタックの一番下にプッシュされた操作の合計数は常に F(K-1) でした。つまり、K 個の要素がスタックにプッシュされ、K がスタックにプッシュされましたが、 K-1 個の要素がスタックからポップアウトされ、K が保持され、続いて残りのすべての要素が NK 要素を残して、それらの要素の出入りには F (NK) 通りの方法があり、最後に K から出ます。です

F3=5から 

 

まず第一に、配列の添え字は負の値にすることはできないため、要素を挿入するときは、最初に 1 を追加してから値を格納する必要があります。そうでない場合、最初に値を格納してから 1 を追加すると、配列は範囲外になります。つまり、A[0] はスタックの一番下に格納されます。 

 

 

 

二分探索失敗の場合、100 ノードで完全な二分木が構成されます。高さが 1 の場合、ノードの総数は 1、2 の場合、3、3 の場合、7、N が 2^N-1、N=6 の場合、ノードの総数は 1 になります。 , ノードの総数は 63 で、7 の場合は合計 127 なので不満木となり、探索に失敗した場合は少なくとも 6 回、最大で 7 回の比較が必要になります。

削除された位置もマークする必要があり、空と見なすことはできません。

森が二分木になると、右側が兄弟、左側が子供になります。

 

V はノードの数、E はエッジの数です 

 

 

 

加重平均の長さは、リーフ ノードへのパスを計算するだけでなく、リーフ ノードの重みも考慮する必要があることを意味します。

n 個の頂点を持つツリーが必要な場合は、N-1 個のエッジが必要で、m-(n-1)=m-n+1 個のエッジを減算する必要があります。

 

 

 

 

フォレストの事前順序は二分木の事前順序であり、事後順序は二分木の順序であり、したがって唯一の二分木が決定されます。 

最小の要素は右端のノードでなければなりません。右のサブツリーはありません。つまり、それより小さい要素はありませんが、左のサブツリー、つまり、それに接続されているより大きな要素が存在する可能性があります。A の場合、子が存在しないか、子のみが存在する可能性があります。C の場合、調整が必要な場合があります。最大の要素の場合、左サブツリーがあってはなりません。この質問の左サブツリーはそれよりも大きいことを意味するため、最大の要素には左サブツリーがあってはなりませんサブツリー。B. 理由と同じです。

 

log2n+1 はバイナリ ツリーの高さであり、埋められようとしている高さ、または埋められたばかりの高さです。最小比較数は log2n です (完全なバイナリ ツリーではない場合)

 

K 番目の層には最大 2^(k-1) 個のノードがあり、最大 2^k-1 個のノードが共有されます。

 

つまり、6 回目に葉ノードがあります。6 回目が最下層であるかどうかは定かではありません。埋められる層です。次の層である可能性もあります。6 回目の層は徐々に覆われます。塗りつぶされたレイヤーの場合、2^5-1+8=39 となります。

カバーされている場合、6 番目の層には 2^(6-1)=32 個のノードがあり、葉ノードはまだ 8 個あり、24 個のノードが 7 番目の層まで埋められたことを示します。 . 非リーフノードには子が 1 つまたは 2 つありますが、詳しく言えば、2^6-1+24*2=63+48=111 というように 2 つの子があるものとみなされます。

 

p の右側のサブツリーのノードの数は n です

フォレストをバイナリ ツリーに変換し、子が左ノード、兄弟が右ノードになるようにします。 

最初のステップは、子を左ノードとして使用して各ツリーをバイナリ ツリーに変換し、次に兄弟のみを右ノードとして使用して各バイナリ ツリーをマージすることです。最初のステップで取得されたバイナリ ツリーでは、それらのルート ノードは次のとおりです。子供たち 

変換された二分木の左部分木のノード数にルートノードの数を加えたものが最初の木のノード数、つまりmnとなり、残りがルートノードと左部分木のノードの数となる。

つまり、元の n ターンの後でも、n 個の数値が残ります。One more は、最後のツリーに兄弟がないことを意味するため、One More の右ポインタ フィールドは空です。 

 

単純なパスではすべての頂点が反復しないことが必要であり、単純なループでは始点と終点を除くすべての頂点が反復ではないことが必要です。 

末尾ポインタを持つ循環単一リンク リストに注目してください。末尾ポインタの次のポインタは先頭ポインタであるため、二重リンク リストの役割を果たすことができます。

二重リンクリストにより、最初のポインタが前方の末尾ポインタを見つけやすくなるからです。 

ハフマン ツリーの場合、それは完全な 2 分木です (完全 ≠ 完全であることに注意してください)。各ノードの次数は 0 または 2 で、任意のノードの左の子の重みは右の子の重み以下です。子 非リーフ ノードの重みは、その左の子の重みと右の子の重みの合計に等しくなります。

完全な二分木とは、次数 1 のノードが存在しないことを意味します。これは、順番に保存できることを意味しており、この場合、ツリーの重みがリーフ ノードよりも大きくなる可能性があり、左側のサブツリーがリーフ ノード、右側のサブツリーがツリーとなるツリーが生成されます。完全な二分木ではありません。

 

 

 

 

 つまり、すべての同義語の場合、後方にスタックされます。その後、削除するときに、前の同義語が最初に削除されます。空として直接マークされている場合、後続の同義語を検索するときに、直接空としてマークされます。事前に失敗し、もう検索は続行されないため、削除は削除マークを付けることを意味します。検索する場合は、削除マークに遭遇した場合でも逆方向に検索を続ける必要があります。しかし、挿入の場合は削除マークに遭遇するため、挿入する必要があります。

つまり、その後のハッシュ テーブルに入力されるシノニム ノードの検索パスのいわゆる切り詰めです。

 

 

これには 2 つの状況が含まれることに注意してください。同義語の競合は、非同義語のスペースを占有します。つまり、競合が発生すると、同義語のスペースも占有します。

 

一般的なハッシュ関数には、直接アドレス指定法、デジタル解析法、平均化法、剰余法、フォールディング法、ランダム法などがあります。 

 

つまり、最初に 5 つのノードで完全に接続されたグラフを形成し、次に任意のエッジを追加します。ここで述べられていることは少なくとも保証されていることに注意してください。

これは最小要件ではなく、エッジが 11 個ある場合は、どのように配置しても接続されたグラフになります。

 

 

FN=FN-1+FN-2+1,F1=1,F2=2,F3=4,F4=7,F5=12.F6=20 なので、最大高さは 6 です。

 

2人相当、左右が決まって残り4人、全員AB間に配置

 

 

 

これはソートされたツリーであり、必ずしもバランスの取れたツリーではないことに注意してください。そのため、最悪のケースは歪んだツリーの ON であり、バランスの取れたツリーの場合は LOGN になります。

ここでは、前の分数の結果を計算するのではなく、/ が * よりも高い優先順位を持つと見なされます。つまり、* が分母にあります。

このような接尾語表現があります 

つまり、infix を計算するということは、infix を suffix に変換してから suffix 式を計算することを意味します。 

 

 

いわゆる分岐数は実際には次数です 

パスは実際には頂点のシーケンスであり、シーケンスの要素は開始点とソース点の間の中間ノードです。

 

 

 

つまり、最終的なソート結果と直接比較して、最終的な実際の位置に要素が何個あるかを判定するもので、制限以上であれば可能、そうでなければ不可能である。同じ方法が他の並べ替え方法にも適用され、各パスで最終要素が決定されます (ただし、それらは片側にあります)。 

記憶域サイズは m+1 であることに注意してください。また、先頭ポインターと末尾ポインターは両方とも実ポインターであることに注意してください。

 

選択ソートは、最大/最小の要素を毎回選択し、指定された位置に配置することを意味します。単純選択ソートは、毎回配列を走査して決定します。ヒープ ソートは、ヒープを構築して先頭から直接最小の要素を取得します。これを最後に置くと、最小値を見つけるプロセスを最適化するだけの選択ソートになります。

2^10=1024、切り捨て、+1。この +1 は、塗りつぶされているがまだ塗りつぶされていないレイヤーの部分、つまり対数結果の小数部分を表します。最小の高さは a です。完全な二分木、つまり logn+1 、最大のものは傾いた木です

 

 

無向グラフのすべての頂点の次数の合計は偶数ですが、有向グラフでは必ずしも一致するとは限りません。 

データ構造の議論では、データ構造は論理的に次のように分割されます (C)

A 内部構造と外部構造 B 静的構造と動的構造 C 線形構造と非線形構造 D コンパクト構造と非コンパクト構造。

論理的に線形と非線形に分けられる

 

知識のポイント 

データ構造とアルゴリズム評価の基本概念


抽象データ型 (ADT) は、データの論理構造と抽象操作を記述し、通常はトリプル (データ オブジェクト、データ関係、基本操作セット) で表されます (またはデータと操作が含まれます)。そのため、完全なデータ構造を定義できます。

データ構造はタプル (D, R) で、D はデータ要素の有限セット、R は D 上の関係の有限セットです。

抽象データ型は、さまざまな特性に応じて、アトミック型 (int、char)、可変集合体型 (シーケンス、可変長)、および固定集合体型 (2 つの実数を決められた順序で構成した複素数) に分類できます。彼らの価値観。

データにはデータ、データ要素、データ項目の 3 つのレベルがあり、データ要素はデータを構成する基本単位です。

データ構造は、相互に 1 つ以上の特定の関係を持つデータ要素のコレクションです。

データの論理構造はストレージ構造から独立しています。

同じ論理構造内のすべてのデータ要素は同じ特性を持ちます。つまり、データ要素に含まれるデータ項目の数が同じである必要があるだけでなく、対応するデータ項目の型も一貫している必要があります。

データの保存構造はコンピュータ内の論理構造のマッピングであり、コンピュータ言語に依存します。

データ構造には、集合構造、線形構造、ツリー、グラフの4 つの基本構造があります。

隣接リストは線形リストではなく、隣接リストは記憶構造であり、線形リストは論理構造です。

ハッシュ ストレージはハッシュ関数を通じて物理空間にマッピングされ、データ間の論理関係を反映できません。

線形構造では、「最初」と呼ばれるデータ要素が 1 つだけあり、最初の要素を除き、セット内の各データ要素には先行要素が 1 つだけあります。

セットは最も原始的なデータ構造です。

ディクショナリは、線形テーブル、ハッシュ テーブル、およびスキップ テーブルで編成できます。

アルゴリズムの実現可能性とは、アルゴリズム内の演算が、。

入力と出力はアルゴリズムを測定する基準ではありません。

アルゴリズムの時間計算量は、その実行時間の絶対的な尺度として使用できません。

アルゴリズムとプログラムの関係:

アルゴリズムは問題の解決策を表し、プログラムはコンピューター上のアルゴリズムの特定の実装です。
コンピューター プログラムはアルゴリズムを実装する手段ですが、それだけが手段ではなく、暗号マシンもアルゴリズムを実装できます。
インプレース アルゴリズムは、少量の固定量の追加スペースを使用してデータを変換するアルゴリズムです。

いわゆる時間計算量とは、最悪の場合の推定アルゴリズム実行時間の上限を指します。

同じアルゴリズムの場合、実行効率は言語レベルとは関係ありません。

アルゴリズムの時間計算量は、処理されるデータの状態と問題のサイズによって異なります。

再帰的に定義されたデータ構造 (リスト、ツリー) は通常、再帰アルゴリズムを使用して操作します。

理論的には、すべての再帰を非再帰に置き換えることができます。

データの上位ビットは下位アドレスに配置され、下位ビットは上位アドレスに配置されます。これがビッグエンディアン モードです。

リニアテーブル


配列は、頻繁に挿入および削除できない構造です。

シーケンス リストでは、論理的に隣接する要素は物理的にも隣接します。

線形リストに n 個の要素があると仮定します。リスト内の 2 つの要素を交換する場合、順次リストの方がリンク リストよりも効率的です。順次リストでは 3 回の交換操作が必要ですが、リンク リストでは要素の先行要素を検索する必要があります。 2つの要素。これらの n 個の要素を順番に出力したい場合、シーケンシャル リストとリンク リストの効率は同じで、どちらも O(n) です。

リンクストレージは論理構造をポインタで表現しており、ポインタの設定は任意であるため、さまざまな論理構造を容易に表現できます。

シーケンシャル ストレージは、線形構造の保存だけでなく、ツリーやグラフなどの非線形構造の保存にも適しています。

シーケンシャルストレージ方式は、さまざまな論理構造のストレージ表現には使用されません。

線形テーブルはヘッド ノードを持つ巡回単連結リストに格納され、ヘッド ポインタは head です。head->next->next==head が true の場合、線形テーブルの長さは 0 または 1 になります。

既知のリンク リストの記憶領域を動的に割り当てる必要はありません (静的リンク リスト)。動的に割り当てる必要があるのは、未知または変化するリンク リストの記憶領域だけです (単一リンク リスト、線形リンク リスト)。

大きな領域を割り当てる必要があり、要素の挿入や削除時に要素を移動する必要がない線形リストの記憶構造は、静的リンク リストです。単一リンク リストの記憶領域は次のとおりであるため、これは単一リンク リストでは不可能です。動的に割り当てられます。

単一リンクリストの先頭ポインタは head で、先頭ノードはなく、null 条件は head==0 です。

静的リンク リストのポインタは、配列内の次の要素の位置を表します。

データ構造には基本的な操作はなく、たとえば、多次元配列には挿入や削除の操作がなく、スタックやキューを検索する必要もありません。

インプレース逆順操作では、配列はリンク リストよりも高速です。

ヘッド ノードに戻ると、配列はリンク リストと同じくらい高速です。

線形テーブル <= 純粋なテーブル (ツリー) <=​​ リエントラント テーブル (兄弟ノード間に接続がある) <= 再帰的テーブル (図)

ヘッド ポインタ≠ヘッド ノードに注意してください。ヘッド ノードは空のノードであり、要素を格納しません。

リンクされたリスト内のすべてのノードに、ポインターが 1 つだけ含まれているわけではありません。

スタックとキュー

再帰的プログラムを非再帰的方法で書き直すには、必ずしもスタックを使用する必要はありません。たとえば、フィボナッチ数列の計算にはループのみが必要です。

単一リンク リストを使用してキューを実装する場合、先頭要素の削除を容易にするために、キューの先頭がリンク リストの先頭に設定されます。

スタックは特殊な線形構造であり、挿入および削除操作をテーブルの末尾に制限する必要があります。

チェーン キューや循環キューなどのデータ構造の場合、キューに最大で格納できる要素の数 (M または M-1) に注意する必要があります。

スタックの適用: 式の評価、ブラケット マッチング、再帰、塩基変換、迷路解決、XML 検証ノードは閉じられています。

キューのアプリケーション: レベル トラバーサル、印刷バッファ、CPU リソースの競合、限定された幅の検索、ページ置換アルゴリズム。

 

このノードに左の子がある場合、その中間の先行ノードにも右の子がある場合、そのノードにはアクセスできないため、中間の先行ノードには右の子があってはなりません。 

写真


概念のレビュー: アーク、単純グラフ、マルチグラフ、完全グラフ、有向完全グラフ、接続グラフ、非接続グラフ、最大/小さな接続サブグラフ、接続コンポーネント、強接続グラフ、最大強接続サブグラフ、強接続コンポーネント、スパニング ツリー、スパニング森林。

グラフは、頂点と隣接する頂点で構成される一連のエッジです。

完全グラフは、有向完全グラフと無向完全グラフに分けられます。

グラフを移動するときは 2 つの点に注意する必要があります: 1. 各頂点は 1 回だけ訪問されます; 2. グラフ内の点は接続されていない可能性があります。

強く接続された有向グラフには、任意の頂点から他のすべての頂点へのパスがありますが、必ずしも円弧である必要はありません。

ループはパスに対応し、単純なループは単純なパスに対応します。

有向グラフの隣接行列の対角より下の要素が 0 の場合、グラフの位相シーケンスが存在する必要があります。

連結成分は、無向グラフの最大連結サブグラフです。連結成分の頂点に接続されているすべてのエッジを追加する必要があるため、連結成分にループが存在する可能性があり、グラフのスパニング ツリーとして使用できません。グラフのスパニング ツリーはグラフであり、 の最小接続部分グラフです。

無向グラフ内の同じ重みを持つエッジの場合、グラフ自体がツリーである可能性があるため、スパニング ツリーは必ずしも一意であるとは限りません。

最短パスは単純なパスでなければなりません。

ダイクストラのアルゴリズムは、ループを使用した重み付きグラフの最短経路を求めるのに適しており、任意の 2 つの頂点の最短経路を解くこともできますが、負の重みをもつ最短経路を求めるには適していません。

有向グラフに周期があるかどうかを判断する方法:

深さ優先トラバーサル: 深さ検索中に、トラバースされた頂点を指すエッジを持つ頂点があり、この頂点が前のステップで訪問した頂点ではない場合、サイクルが存在します。
トポロジカル ソート: トラバーサル プロセス中、グラフにはまだ頂点が存在しますが、トポロジカル シーケンスに追加できる次の頂点が見つかりません。これは、ループがあることを示しています。
共用体ルックアップでは、無向グラフにサイクルがあるかどうかのみを判断できますが、有向グラフにサイクルが存在するかどうかは判断できません。
トポロジカル ソートでは、スタックまたはキューを使用して、次数 0 の頂点を一時的に保存できます。

有向グラフの頂点をトポロジカルな順序で配置できない場合は、グラフ内に 1 より大きい頂点の数を持つループが存在し、このループが強接続コンポーネントを構成していることを意味します。

強接続グラフは有向グラフ用です。n 点の強接続グラフには、少なくとも n 個のエッジ (ループを形成)、最大で n (n-1) 個のエッジがあります。

有向グラフの接続性には、強い接続性、弱い接続性、およびマルチサイド接続性が含まれます。

グラフ構造では、ノード間の関係は任意であり、グラフ内の任意の 2 つのデータ要素を関連付けることができます。

AOE ネットワークでは、特定の主要なアクティビティを加速しても、必ずしも予定より早くプロジェクトが完了するわけではありませんが、主要なアクティビティを遅らせれば、プロジェクトは確実に遅れます。

AOE ネットワークでは、同時に複数のクリティカル パスが存在する可能性があり、すべてのクリティカル パスが通過する有向エッジはブリッジと呼ばれます。

図内の各固定点の番号は人為的なものであり、必要に応じて変更できます。

無向グラフの頂点 vi と vj の間のパスを、vi から vj までの頂点シーケンスとして定義します。

グラフにエッジを持たせることはできませんが、頂点を持たないことはできません。

エッジの重みがすべて等しい場合、BFS アルゴリズムを使用して単一ソースの最短パス問題を解決できます。

どのグラフにも、奇数次数を持つノードが偶数個存在する必要があります。

探す


静的検索には挿入と削除の操作が含まれませんが、動的検索は挿入と削除の操作を目的として設計されているため、2 つの検索方法の基本的な違いは、適用される操作が異なることです。

つまり、二分探索は厳密な二分平衡探索ツリーです。 

長さ 16 の順序付きシーケンス リスト。半分を使用して存在しない要素を検索し、最大 5 回比較します。

log16+1=5、完全な二分木の高さは 5、最悪は 5、少なくとも 4

B+ ツリーは順次検索とランダム検索をサポートしますが、B ツリーはランダム検索のみをサポートし、B ツリーと B+ ツリーの両方をファイル インデックス構造として使用できます。

B+ ツリーは、ファイル システムのニーズに応じて作成された B ツリーを変形したものです。前者は、後者よりもオペレーティング システムのファイルのインデックス付けやデータベース ファイルのインデックス付けに適しています。前者の方が、ディスクの読み取りと書き込みのコストが低くなります。クエリ効率がより安定します。

コンパイラの字句解析では、有限オートマトンと構文ツリーが使用されます。

ネットワーク内のルーティング テーブルの高速ルックアップは、主にキャッシュ、ルーティング テーブル圧縮テクノロジー、および高速ルックアップ アルゴリズムに依存しています。

システムは通常、空き領域のリンク リストを使用してディスクの空きブロックを管理します。

オープン アドレッシングにおける同じアドレスへのハッシュによって発生する「スタッキング」問題は、同義語間または非同義語間の競合によって発生します。

オープン アドレス指定方式を使用してハッシュ テーブルの競合を処理する場合、平均検索長はチェーン方式よりも長くなるか、オープン ハッシュ方式の方がクローズド ハッシュ方式よりも効率的になります。

オープン ハッシュ法を使用してハッシュ法内の競合を解決する場合、負荷係数の値が 1 より大きくなる可能性があります。

3 次 B ツリーはバランスの取れた 3 方向探索ツリーである必要がありますが、3 方向探索ツリーは必ずしも 3 次 B ツリーである必要はありません。

B ツリーでは、すべてのリーフ ノードが同じレベルにあり、すべてのリーフ ノードの null ポインターの数は、すべてのキーの合計数 + 1 に等しくなります。(完全な n 分ツリーの非リーフ ノードの数 + 1 = リーフ ノードの数と同様です)。

競合を処理するために再ハッシュを使用すると、クラスタリングが発生する可能性が低くなります。

シノニムの競合は集約とは異なります。チェーン アドレス メソッドが競合を処理する場合、シノニムは同じリンク リストに配置されるため、集約は発生しません。

競合を解決するためにオープン アドレッシングを使用するハッシュ検索では、集約の主な原因は競合解決方法の不適切な選択です。

ハッシュ操作では、ハッシュ値に基づいてデータの保存アドレスを直接特定できます。適切に設計されたハッシュ テーブルは、一定時間内に必要なデータを見つけることができ、メモリ内の検索に適しています。

STL_Map の内部実装はメモリ上に構築される赤黒ツリーであり、ディスク操作には使用できず、検索性能はハッシュ検索ほど良くありません。

B ツリーの挿入プロセス中にルート ノードが分割された場合、ツリーの高さは +1 でなければなりません。

内部仕分け


通常、大量のデータから k 個の最大/最小要素を取得する場合は、ヒープ ソートが優先されます。

10TBのデータファイルをソートするには、マージ方法を使用する必要があります。

内部ソート時に、挿入ソートが選択されておらず、マージ ソートが選択されている場合、マージ ソートの方が効率的であることが考えられます。

基数ソートでは、float 型および double 型の実数をソートできません。

ヒルソートとヒープソートはいずれもシーケンシャルストレージのランダムアクセス特性を利用しているため、シーケンシャルストレージをチェーンストレージに置き換えるとアルゴリズムの時間効率が低下します。

ほとんどの要素がソートされている配列をソートする場合、直接挿入ソートでは要素間にギャップがあるため、単純な選択ソート (最悪の場合 O(n2)) よりも直接挿入ソート (最悪の場合 O(n)) の方が効率的です。比較数が少ない。

クイックソートは、ソートされたデータが完全に乱れている場合に最も効果的ですが、データが基本的に順序付けされている場合、バブルソートに退化します。

半切挿入ソート方式では、ソート処理時の比較回数は固定であり、初期配置とは関係ありません。 

不安定なソート アルゴリズム: 高速、選択、ヒープ、ハッシュ。

マージ パスの数を増やすとマージ パスの数が減り、それによってディスクの読み取りと書き込みの数が減り、外部ソートの速度が向上します。
 

 


 

おすすめ

転載: blog.csdn.net/m0_73553411/article/details/135446887