データ構造研究ノート - はじめに

リファレンスブック「投稿&テレコムプレスのデータ構造C言語第二版」

第一章:はじめに

主なポイント:
研究1.1データ構造
1.2基本的な概念と用語
1.3抽象データ型とその実現
1.4アルゴリズムとアルゴリズム分析を

1.1研究データ構造
、3レベルのプログラムの設計
1、ローレベル(プログラミング):数値的な問題を解決します。
要求分析-全体的なデザイン-セグメント化モジュール-数学的モデリング-設計アルゴリズム-プログラミング- -デバッグの変更は、結果を取得する
に関連する:確立し、対応するアルゴリズム数学モデルの実装
プログラム言語+アルゴリズム=
2、中間レベル(データ構造):解決を非数値的な問題やデータ型の拡張
プログラム言語+ =データ構造+アルゴリズム
3、シニア(アルゴリズム設計):の特殊な問題に対処するための戦略を
プログラム言語を+データ構造= +効率的なアルゴリズム

第二のデータ構造例
1、直鎖状構造:1
2、ツリー構造:多くの
3、図構造:多対

第三に、「データ構造」コースの状態
、ハードウェアとソフトウェアとの間の数学のコアカリキュラムの間に
コース状況
第四に、「データ構造、」コースの目的
に応じて、その論理構造へのアクセスをコンピュータ処理の研究の対象の特性を分析することができる1、ニーズは、適切なストレージ構造と対応するアルゴリズムを選択し、
図2に示すように、いくつかの一般的に使用されるアルゴリズムを学ぶ;
3、トレーニングプログラムの設計プロセスを正しく読み取ることが明確かつ容易なプログラム構造を必要とする、複雑で、
4時間アルゴリズム解析と空間分析予備マスターテクノロジー

1.2基本的な概念と用語
まず、基本的な考え方
1、データ:物事の客観的兆候は、情報の現れである、との情報が、データの意味合いである、と述べました。
データ-データ処理-情報
2、データ要素:データの基本単位は、通常、全体として処理しました。
図3に示すように、データ項目:データの最小単位。関係:データ>データ要素>商品
例:学生TABLE>個人レコード>番号、名前......
4、データオブジェクトは:同じ性質のデータ要素のセットは、データのサブセットです。
図5は、データ構造は、各セットの間の特定の関係の一個の以上のデータ要素の存在です。「構造」データ要素の集合を有するデータ構造である、「構造」データ要素間の関係を指します

第二に、の論理構造データ
の定義は:データ要素間の関係は、「構造」と呼ばれる、相互に特定の関係、の一個の以上のデータ要素の集まりがある
構造= +エンティティ関係の
セット:データ要素が属しています一連の
線形構造:隣接の配列との間に1対1の関係
木構造:多くの関係階層関係の
グラフ状の構造(ネットワーク構造):多くの関係が任意に存在する
2を、正式な定義:2元基(D、S)
Dは、データ要素の有限集合であり、Sは関係の有限集合であり、は、D
デカルト積のサブセットである任意の関係を
DS =(D、S)

第三に、データの物理的な構造
図1に示すように、物理的構造:論理構造がメモリ内に表されている
データ要素との関係を示す表現含む
2を表すデータ要素
データ要素-要素またはノード
のデータ項目を-データフィールド
ノード連続データフィールドに格納され、ノード間でメモリ連続的または離散することができる
ショーの関係、3
番組の位置との関係:順次記憶構造
記憶構造:ポインタが示す関係
インデックス格納され
たハッシュメモリ
4、仮想記憶構造の概念:データ記憶構造は、タイプが定義され記載
のデータ構造分割は、4つの
区画のデータ構造の性質に応じて、1の
論理構造:数学的モデル-アルゴリズムの設計
物理的構造:ストレージ構造-アルゴリズム
データ構造=論理構造(定義およびソフトウェア)+ 物理的構造(ハードウェア&表さ)+演算子セット(&数学的実装)
2は、データ構造に応じて分割
シーケンシャルストレージ構造:データ要素間の論理的関係を表す相対位置メモリ要素によって。
格納構造:要素を示す格納アドレスポインタの手段は、データ要素間の論理関係を示します。
インデックス格納方法:キーワード+アドレス:また、追加のインデックステーブルを確立しながら、ストレージノードで、インデックステーブルは、各フォームのインデックスエントリと呼ばれる
ハッシュ保存方法:ダイレクト・ストレージ・アドレスは、ノードのノード鍵に基づいて算出されます

ここに画像を挿入説明

1.3抽象データ型ADT
1、定義:手段タイプの論理データ・モデルに基づいて、モデルの操作のセットを定義
ADT =(D、S、P
) で定義されたその入力と出力によって作動各
2とデータタイプは同じ概念である
データ・タイプ:セット上の総称動作のセットのセットと定義された値
のデータ型のデータ構造を達成することで、データ構造は、拡張データ型である
3、互いに対応の抽象と具体例:INT A、B、
a及びbは+することができ、 - 、*、/計算、および2および6は、特定のデータINTである
4、例えば整数、実数などの固有のデータ・タイプによって抽象データ型(、表現および実装するチャー等)

1.4アルゴリズム解析アルゴリズムと
アルゴリズム
1.定義:特定の問題を解決するための手順の説明、命令の有限のシーケンス
基本的な制御構造(シーケンシャル、分岐およびループ)により、元の操作(操作の固有のデータタイプを参照)の構成。
異なるアルゴリズムおよびプログラム!
図2に示すように、アルゴリズムの重要な特徴
(1)が乏しい特性を有する:端が有限のステップの後に限られた時間内に行うことができる
(2)不確実性:同じパス(3)同じ入力を行うための同じ結果可能性を説明するために使用されます。十分基本動作アルゴリズムが実現され、
(4)複数の入力0:パラメータは受信されたパラメータによって表現する
(5)に出力する複数のない出力が無意味なアルゴリズムです。戻り値または参照型パラメータアルゴリズムの最終結果を表し
3、アルゴリズムとデータ構造との間の関係を、
コンピュータ科学者は、価値を提案した:
アルゴリズム+データ構造を=プログラムは
プログラミングの性質を明らかにする:良好なデータ構造設計を選択します優れたアルゴリズムは、良いプログラムである。
このアルゴリズムは、常に特定のデータ構造に基づいており、逆に、アルゴリズムは必ず、あなたはデータ構造を構築する方法を決定することができないではありません

第二に、アルゴリズムの設計要件
アルゴリズムの1は、しばしば考える:
アルゴリズムは問題が存在を解決するかどうか?
この問題を解決するために、「良い」アルゴリズムとは何ですか?
基本的な問題解決は何である
2、「良い」アルゴリズムは、以下の目的を達成すべきである:
(1)有効性(4の意味)を
(2)読みやすさ:アルゴリズムはポスターです
(3)頑健性(フォールトトレランス)入力データの耐障害性を分析
(4)効率:時間効率および空間効率
3は、アルゴリズムの効率を測定
に必要な限度内のリソースは、アルゴリズムが効率的に呼び出された場合の問題を解決するためのアルゴリズム
の評価基準は:
(1)計算時間は、アルゴリズムに必要な
(2)アルゴリズムによって必要とされる記憶空間
アルゴリズムの単純(3)
アルゴリズムの実行時間を測定するための2つの方法があるが
、(1)その後、統計的方法は、
2つの欠点を有する:プログラムは実行する必要があります;環境要因によって影響を受ける
(2)分析前の推定方法は
、アルゴリズム戦略:いくつかの要因に依存する問題の規模実行速度、品質をコンパイルし、言語プログラミング;
「ワークロードを実行するために、」アルゴリズム・サイズの問題の大きさに依存する:結論
、4時間複雑
ステートメントの頻度は:文の数が繰り返し実行
されるアルゴリズムの実行時間をその本来の動作と実行時間のすべて

for (i=1;i<=n;++i)                    //n+1
	for (j=1;j<=n;++j)                //n*(n+1)
	  { c[i][j]=0;                    //n*n 
		for (k=1;k<=n;++k)            //n*n*(n+1)
			c[i][j]+=a[i][k]*b[k][j] }//n*n*n
         //T(n)=2n3+3n2+2n+1    

問題サイズN:入力アルゴリズム問題解決
OとT(n)を、N3を同じ順序、同じ大きさのオーダーを表し、
T(N)= O(F(N))= O(N3):で表される
O(N)アルゴリズムの漸近的時間計算量は、短時間の複雑さが言及
通常時間計測アルゴリズムの基本的な動作周波数として実行されます

A)周波数++ xは1であり、一定の順序O(1)

{++x; s=0}

B)Nの周波数 - ++ X;線形順序O(N)

for (i=1; i<=n; ++i) 
	{++x; s+=x;}

C)N2 ++ xの頻度;乗オーダーO(N2)

for (j=1;j<=n;++j) 
	for (k=1;k<=n;++k) 
		{++x; s+=x;}

図5に示すように、計算方法の時間計算量
(1)最良の場合の複雑さ
(2)最悪の場合の複雑さ
(3)一般的な最悪の場合の複雑さの平均的ケースの複雑さは、しばしば使用されます。
それは正確に関数f(n)を与えることが困難である場合、ちょうどn個の順序で取得します

実施例1:N×N行列乗算

for(i=1;i<=n;i++) 
	for(j=1;j<=n;j++) 
	{ c[i][j]=0; 
		for(k=1;k<=n;k++) 
			c[i][j]=c[i][j]+a[i][k]*b[k][j]; 
	}

ここに画像を挿入説明
例2:

for( i=1; i<=n; i++) 
	for (j=1; j<=i; j++) 
		for (k=1; k<=j; k++) 
			x=x+1;

ここに画像を挿入説明
実施例3:プログラムセグメントの時間複雑さの解析

i=1;// ① 
while(i<=n) 
	i=i*2; //②

ここに画像を挿入説明
実施例4:[I]は、eの値を見つけるための要素と同じである配列aには、その位置を返します

for (i=0;i<n;i++) 
	if (a[i]==e) 
		return i+1; 
return 0;

最良の場合:1;のような最悪の状況:N倍
複雑である最悪時間:O(N)
結論:いくつかの場合には、回数基本動作アルゴリズムは、繰り返しデータセットが異なる入力にさらなる問題を行います

例5つの計算F = 1!2!3!+ ... + nは!

int f=0; 
for (i=1;i<=n;++i) 
	{ w=1; 
	for (j=1;j<=i;++j) 
		w=w*j; 
	f=f+w; }

分析:T(N)= O(N 2):基本的な動作は乗算演算では、周波数f(N)= 1 + 2 + 3 + ... + N = N(N + 1)/ 2従ってを行います

(実施例5)(改善された方法)を算出F = 1!2!3!+ ... + N!

w=1; f=0; 
for (i=1;i<=n;++i) 
{ w=w*i; f=f+w; }

T(N)= O(N )
結論:アルゴリズムの時間複雑さが簡単に依存
ここに画像を挿入説明
ここに画像を挿入説明
関係が指数関数時間である:O(2N)<O( !N)<O(NN)
N大きい取得し、多項式時間アルゴリズムと要する時間が指数関数的時間アルゴリズムが非常に貧弱である
F(n)が対数関数、指数関数、またはそれらの製品である場合(1)は、アルゴリズムの実行時間が許容される、これらのアルゴリズムは、有効と呼ばれアルゴリズム;
F(n)を関数や指数関数階乗である場合、時間を実行することは許容されない、これらのアルゴリズムは、無効なアルゴリズムと呼ばれます。
nの値として(2)増加し、nは十分な大きさである場合には成長速度が、変化し、以下の関係が存在する:対数<電力機能を<指数関数

図6に示すように、スペースであっアルゴリズムメモリの複雑さによって占有:
スペースアルゴリズム(1)店舗自体によって占有
アルゴリズム/データを出力する(2)入力空間占有
動作アルゴリズム中補助スペース(3)一時的に占有

原理:入力データのフットプリントは、唯一の問題自体に依存し、解析アルゴリズム単に補助スペースを何の関係もありません場合は、それ以外の場合も、必要な入力データ空間考慮しなければならない
仕事の場所を:入力補助スペースに対して一定であるデータの量が、呼び出された場合このアルゴリズムは、職場で
必要なメモリの量は、最悪の場合の分析によると、特定の入力に依存する場合

リリース元の2件の記事 ウォンの賞賛0 ビュー39

おすすめ

転載: blog.csdn.net/weixin_44043952/article/details/104211917