データ構造とアルゴリズム(一):データ構造とは何ですか.


データ構造とは
簡単に言えば、プログラム=データ構造+アルゴリズムです.
従来,データ構造を論理構造と物理構造に分けている.論理構造:データオブジェクトにおけるデータ要素間の相互関係を指し、今後最も注目し、議論する必要がある問題でもある.物理構造:データの論理構造がコンピュータに格納される形式を指す.
論理構造:
  • 集合構造:内部は同じ集合に属する以外に関係がない.
  • 線形構造:線形構造のデータ要素間は一対一の関係である.
  • ツリー:ツリー構造内のデータ要素の間に1対以上の階層関係があります.
  • グラフィック構造:グラフィック構造のデータ要素は多対多の関係である.

  • 物理構造:
    データ要素の格納形式構造には、順序格納とチェーン格納の2つがあります.
  • シーケンス記憶構造:データ要素をアドレス連続記憶ユニットに格納し、そのデータ間の論理関係と物理関係が一致する.たとえば、プログラミング言語の配列構造は、典型的なシーケンスストレージ構造です.
  • チェーンストレージ構造:シーケンスストレージ構造から日常生活の行列を考えたが,現実生活では完全にそうではないことが分かった.例えば、列に並ぶと、列を離れてトイレに行かなければならない人もいれば、基本的な道徳規範を守らずに割り込む人もいます.これらの状況はストレージ構造の基本原則を破壊します.このように常に変化する構造に対して、シーケンスストレージ構造は安全ではないため、チェーンストレージ構造を引き出す.例えば、今の銀行や病院の番号システムでは、列に並ぶときにどこにいても、あなたの「番号」が呼ばれているかどうかに注目する必要があります.チェーンストレージ構造は、データ要素を任意のストレージセルに格納する原理であり、このストレージセルのセットは連続的であっても不連続であってもよい.明らかに、このようにチェーンストレージ構造のデータ要素ストレージ関係は論理関係を反映できないため、1つのポインタでデータ要素のアドレスを格納する必要があり、このようにアドレスを通じて関連データ要素の位置を見つけることができる.

  • アルゴリズム#アルゴリズム#
                1-100     
    
    int i,sum=0,n=100;
    for(i=1;i<=n;i++)
    {	
    	sum=sum+i;
    }
    printf("%d",sum);
    

    対照的にガウスさんのアルゴリズムで
    int i,sum=0,n=100;
    sum=(i+n)*n/2;
    printf("%d",sum);
    

    明らかに、私たちの伝統的なアルゴリズムは、100回反復する必要がありますが、ガウスのアルゴリズムは、1回しか必要ありません.コンピュータの速度は速いですが、条件が大きくなるにつれて、両者の差が現れます.では、アルゴリズムとは何でしょうか.
    ・アルゴリズムは、コンピュータにおいて命令の有限シーケンスとして表現され、各命令は1つ以上の動作を表す特定の問題解決ステップの記述である.
    アルゴリズムの5つの基本的な特徴
    :入力、出力、貧乏性、確定性、実行可能性.
  • 入力:アルゴリズムは0個以上の入力
  • を有する.
  • 出力:アルゴリズムには少なくとも1つ以上の出力がある
  • は、アルゴリズムが限られたステップを実行した後、無限ループが発生することなく自動的に終了する.
  • 決定:アルゴリズムの各ステップは決定された意味を有し、二義性は現れない.アルゴリズムは一定の条件下で実行経路が1つしかなく,同じ入力で一意の出力結果しか得られない.
  • 実行可能性:アルゴリズムの各ステップは実行可能でなければならない.すなわち、各ステップは限られた実行によって完了することができる.

  • アルゴリズム設計の要件
  • の正確性:アルゴリズムは少なくとも入力、出力、加工処理の曖昧性がなく、問題の需要を正しく反応させ、問題の正確な答えを得ることができるべきである.大体以下の4つの階層に分けることができます:
  • アルゴリズムプログラムに構文エラーはありませんアルゴリズムプログラムは、合法的な入力に対して要求を満たす出力を生成することができる.
    アルゴリズムプログラムは、不正入力に対して仕様を満たす説明を生成することができる.
    アルゴリズムプログラムは故意に難癖をつけたテスト入力に対して要求を満たす出力結果がある.
  • 可読性:アルゴリズム設計は、
  • の読み取り、理解、およびコミュニケーションを容易にする.
  • の堅牢性:入力データが合法でない場合、アルゴリズムは異常やクラッシュを投げ出すのではなく、関連処理を行うことができます.
  • 時間効率が高く、ストレージ量が低い