アルゴリズムの基本的な考え方
アルゴリズム:各命令は、1つのまたは複数の動作を表す命令の有限シーケンスであるステップの説明、特定の問題を解決します。
上記の定義によれば、それぞれが特定の命令の動作を示す、次に、それが知られ、アルゴリズムは特定の問題を解決しなければならない、そして第二に、それは有限です。だから我々は、5つの特性のアルゴリズムを知ることができます。
- 有限性:アルゴリズムは有限の終了ステップを実行する必要があり、各ステップは、有限の時間内に完了しなければなりません。無限ループな文がある場合、それはアルゴリズムを呼び出すことはできません。
- 実現可能性:アルゴリズムが実行可能である、すなわち、算術演算を実行することができるが、達成するために実装されている基本的な操作の有限数によって記述されています。各ステップは、達成可能であるアルゴリズムを呼び出すことができます。
- 不確実性:各命令におけるアルゴリズムは、それぞれの文は正確な意味を持っている必要があり、同じ入力は、曖昧さを作り出すことができない、同じ出力に来なければなりません。
- 入力:アルゴリズムは、ゼロ以上の入力を持っています。
- 出力:アルゴリズムは、1つ以上の出力を持つ必要があります。
なぜこのアルゴリズムは有限でありますか?オペレーティングシステムに無限のコードステートメントの多くを使用し、彼らはそれが彼らが何であるかで、彼らはこのアルゴリズムではありません、また、非常に便利ですか!この点で、導入のプログラムコンセプトは、アルゴリズムが何であるかを、プログラムは何ですか
上記で定義されたアルゴリズムは、アルゴリズムは、入力を出力に変換する方法などの問題を解決する方法や手順で、知ることができます。一つの問題は、多くの異なるアルゴリズムを持つことができます。プログラムは、アルゴリズムのプログラミング言語固有の実装です。私たちはあなたにも限り、それはコンピュータ・プログラミング言語内で実行されてすることができ、書き込みにPython言語を使用することができ、書くためにC言語を使用することができます。これは、アルゴリズムとプログラムの簡単な説明です。私たちは、このアルゴリズムは、より多くの問題が「メンター」の解決策のようなもので、プログラムはより多くの「加害者」の具体的な実現のように、アルゴリズムは、プログラムの準備と実施をガイドするために使用することができていることがわかりました。
アルゴリズムおよびプログラムの主な違いは、3つの側面があります。
- 貧しいがあります。このアルゴリズムは、プログラムが無限であり、有限でなければなりませんので、オペレーティングシステム、有用なものが、無限ループは、あなたがプログラムを呼び出すことができます。
- 正確さ:アルゴリズムが正しくなければならない、プログラムが間違っていることができます。アルゴリズムが適切に問題を解決するために設計されなければならない、とプログラムがエラーを書いて、それを変更することができます。
- メソッド説明:擬似コードアルゴリズム、プログラミング言語、自然言語、およびブロック図で説明したように、唯一のプログラムは、プログラミング言語で記述され、実行することができます。
アルゴリズムの効率の尺度
「良い」アルゴリズムを設計するには?
まず、あなたは良いアルゴリズムの正しさを持っている必要があり、我々は問題を修正することができるはずです。アルゴリズムは「司令官」、そうでない場合は実装するための適切な指導「執行者」「指揮官」、それは間違いなく良いアルゴリズムではないです。
二つ目は読みやすいです。アルゴリズムは、人々が理解するために、良い読みやすさを持っている必要があります。人々が変更されたアルゴリズムを読んだとき、人々はすぐに理解し、アルゴリズムを把握することができるはずです。
第三は、堅牢です。ロバスト性が不正な入力データを参照し、アルゴリズムが反応または適応処理することができます。
最後のものは、効率とストレージ容量の要件です。効率は、アルゴリズムの実行時間を指し、記憶容量に対する需要がアルゴリズムの実行中に必要な最大記憶容量です。これは良いアルゴリズムの検討のための最も一般的に使用される標準です。つまり、時間の複雑さとスペースの複雑さ。
時間複雑
学習時間の複雑さの前に、二つの概念を把握するには、次のステートメントの頻度、T(n)
声明周波数:記事の数がの声明を繰り返してもよいです
T(n)
nは問題の規模であり、すべてのステートメントの和の周波数
int sum = 0;
for(int i=1; i<=n; i++)
sum += i;
最初の文が初期化されてsum
0に、それは一度だけ実行されるため、その頻度は、1文です。第二のループ文であるsum += i
ことをn回実行するので、物品声明の周波数がnであることを知ることができ、その決意条件に従って、。そして、文の周波数の和であるコードのセクションT(n)=1+n
。
時間計算:とも称されるT(n) = O(f(n))
、Oを表し、T(n)
及びf(n)
nは正の無限大と同じ順序に無限大になる傾向があるが、することができf(n)
、nが無限大にプラス成長を傾向がある大きさとして理解または。
同じ順序の無限の知識によると、私たちは知っていることができます。
だから、それはだf(n)=n
、それは時間の複雑さですO(n)
。
3つの分類の時間の複雑さがあります。最悪時間計算量、最高の時間の複雑さ、平均時間計算量は、
int sum = 0;
if(n != 0)
for(int i=1; i<=n; i++)
sum += i;
nが0に等しくない場合、このコードでは、それはT(n) = 1 + n
、その時間複雑度がO(n)
0に等しいN場合なら、それはつまり、最初の文を実行しT(n) = 1
、その時間複雑ですO(1)
。だから、異なる判決、時間の複雑さが異なっている、それは最悪と最高のポイントである、平均時間の複雑さは、すべての入力確率の場合で、時間計算量の期待値を見つけます。
アルゴリズムの分析では、多くの場合、最悪時間計算を使用して、これが最も有意義です。
分類時間の複雑さを学んだ後、時間が操作の種類のルールの複雑さを見て。
またルール:ときに操作を合計2時間の複雑さ、コードは、その大きさとして大きな時間複雑であってもよいと、無限の同じ順序によって確認することができます
乗算ルール: 2時間の複雑さの積は、それがステージの数の産物であり、その後、無限大の同じ順序を模索することができます
通常、基本的なコンピューティング周波数アルゴリズムの時間の複雑さを分析するための、基本的なコンピューティング周波数も最内ループ文の周波数を指します。
int sum = 0;
for(int i=1; i<=n; i++)
sum += i;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; i++)
sum += i;
このコードでは、ステートメントの周波数は、ループが実行されるn倍3番目の文、文章周波数が第五の文は第二サイクルの文であり、nは、サイクルは、このようにn倍であり、1でありますそれは、N-ステートメント周波数で2ため、T(N)。1 = + + N-N-のコード2。添加の規則に従って、その時間複雑度は、O(Nである2)。その最深ループの時間複雑度はO(N-ある2動作時間計算の頻度を分析するための基本的なアルゴリズムを使用して)、それを描画することができる時間の複雑さはO(Nである2)。
共通の時間複雑
宇宙複雑
アルゴリズムの空間の複雑さによって示されるアルゴリズムによって消費される記憶空間を意味するS(n) = O(g(n))
無限の同じ順番のためにO、G(n)は段の数を表し、nは問題の大きさを表します。
アルゴリズムは、空間的複雑度を計算する場合には、収納スペースは、命令自体、定数、変数、入力データに使用される二次空間に加えて、あるものによって消費されることに留意されたいです。
補助スペースに必要なアルゴリズムを指すことはアルゴリズムが動作したときに所定の位置に示され、一定であり、 O(1)