アルゴリズムの定義
言葉 アルゴリズム 手段 計算やその他の問題解決操作で従うべき一連の有限のルールまたは指示
または
再帰的な操作を頻繁に伴う、有限数のステップで数学的問題を解決するための手順 。レル対セントス
したがって、アルゴリズムとは、特定の問題を解決するための一連の有限ステップを指します。

アルゴリズムの使用:
アルゴリズムはさまざまな分野で重要な役割を果たしており、多くの用途があります。アルゴリズムが使用される主要な領域には次のようなものがあります。
- コンピュータサイエンス: アルゴリズムはコンピューター プログラミングの基礎を形成し、単純な並べ替えや検索から、人工知能や機械学習などの複雑なタスクに至るまで、さまざまな問題を解決するために使用されます。
- 数学: アルゴリズムは、一次方程式系の最適解を見つける、グラフ内の最短経路を見つけるなど、数学的問題を解決するために使用されます。
- オペレーションズ・リサーチ : アルゴリズムは、輸送、物流、資源配分などの分野での最適化と意思決定に使用されます。
- 人工知能: アルゴリズムは人工知能と機械学習の基礎であり、画像認識、自然言語処理、意思決定などのタスクを実行できるインテリジェント システムの開発に使用されます。
- データサイエンス: アルゴリズムは、マーケティング、金融、ヘルスケアなどの分野で大量のデータを分析、処理し、洞察を抽出するために使用されます。
これらは、アルゴリズムの多くの応用例のほんの一例にすぎません。新しい技術や分野の出現に伴いアルゴリズムの使用は拡大し続けており、現代社会の重要な要素となっています。
アルゴリズムは、達成したい内容に応じて単純にも複雑にもなります。
新しいレシピを作る例を考えてみるとよくわかります。新しいレシピを調理するには、指示と手順を読み、指定された順序で 1 つずつ実行します。こうして得られた結果は、新しい料理が完璧に調理されたということです。携帯電話、コンピューター、ラップトップ、電卓を使用するたびに、アルゴリズムを使用していることになります。同様に、アルゴリズムは、プログラミングでタスクを実行して期待される出力を得るのに役立ちます。
設計されたアルゴリズムは言語に依存しません。つまり、どの言語でも実装できる単純な命令ですが、出力は期待どおり同じになります。
アルゴリズムの必要性とは何でしょうか?
- 複雑な問題を効率的かつ効果的に解決するには、アルゴリズムが必要です。
- これらはプロセスを自動化し、プロセスの信頼性を高め、より速く、より簡単に実行できるようにします。
- また、アルゴリズムを使用すると、人間が手動で実行するのが困難または不可能なタスクをコンピューターが実行できるようになります。
- これらは、プロセスの最適化、データ分析、予測、問題の解決策の提供を目的として、数学、コンピューター サイエンス、エンジニアリング、金融などのさまざまな分野で使用されています。
アルゴリズムの特徴は何ですか?

レシピを調理するために書かれた指示には従わず、標準的なレシピだけを調理することになります。同様に、プログラミングのために書かれたすべての命令がアルゴリズムであるわけではありません。一部の命令がアルゴリズムであるためには、次の特性が必要です。
- 明確で曖昧さのないもの : アルゴリズムは明確である必要があります。その各ステップはあらゆる面で明確である必要があり、導かれる意味は 1 つだけでなければなりません。
- 明確に定義された入力 : アルゴリズムが入力を取得する場合、それは明確に定義された入力である必要があります。入力を受け付けることもあれば受け付けないこともあります。
- 明確に定義された出力: アルゴリズムは、どのような出力が生成されるかを明確に定義する必要があり、同様に明確に定義されている必要があります。少なくとも 1 つの出力を生成する必要があります。
- 有限性: アルゴリズムは有限である必要があります。つまり、有限時間が経過すると終了する必要があります。
- 実現可能: アルゴリズムは、利用可能なリソースで実行できるように、単純かつ汎用的で実用的でなければなりません。将来のテクノロジーなどを含めてはいけません。
- 言語に依存しない: 設計されたアルゴリズムは言語に依存しない必要があります。つまり、どの言語でも実装できる単純な命令である必要がありますが、出力は期待どおり同じになります。
- 入力 : アルゴリズムには 0 個以上の入力があります。基本演算子を含む各演算子は、0 個以上の入力を受け入れる必要があります。
- 出力 : アルゴリズムは少なくとも 1 つの出力を生成します。基本演算子を含むすべての命令は、0 個以上の入力を受け入れる必要があります。
- 明確性: アルゴリズム内のすべての命令は、曖昧さがなく、正確で、解釈しやすいものでなければなりません。アルゴリズムのいずれかの命令を参照することで、何をすべきかを明確に理解できます。命令内のすべての基本演算子は、曖昧さなく定義する必要があります。
- 有限性: アルゴリズムは、すべてのテスト ケースで有限ステップ数の後に終了する必要があります。基本演算子を含むすべての命令は、有限時間内に終了する必要があります。基本条件のない無限ループまたは再帰関数は有限性を持ちません。
- 効果: アルゴリズムは、紙と鉛筆だけを使って追跡できるように、非常に基本的で単純かつ実行可能な操作を使用して開発する必要があります。
アルゴリズムの特性:
- 一定時間が経過すると終了するはずです。
- 少なくとも 1 つの出力を生成する必要があります。
- ゼロ以上の入力を受け取る必要があります。
- これは、同じ入力の場合に同じ出力を与える決定的な手段である必要があります。
- アルゴリズムのすべてのステップが効果的である必要があります。つまり、すべてのステップが何らかの作業を実行する必要があります。
アルゴリズムの種類:
利用可能なアルゴリズムにはいくつかの種類があります。いくつかの重要なアルゴリズムは次のとおりです。
1. ブルートフォースアルゴリズム :
これは問題に対する最も単純なアプローチです。ブルート フォース アルゴリズムは、問題を発見したときに最初に使用されるアプローチです。
2. 再帰的アルゴリズム :
再帰的アルゴリズムは以下に基づいています 再帰 。この場合、問題はいくつかのサブパートに分割され、同じ関数が何度も呼び出されます。
3. バックトラッキングアルゴリズム :
バックトラッキング アルゴリズムは、考えられるすべてのソリューションの中から検索してソリューションを構築します。このアルゴリズムを使用して、基準に従ってソリューションを構築し続けます。ソリューションが失敗するたびに、失敗点まで遡って次のソリューションを構築し、解決策が見つかるか、考えられるすべての解決策が見つかるまでこのプロセスを続けます。
4. 検索アルゴリズム :
検索アルゴリズムは、特定のデータ構造から要素または要素のグループを検索するために使用されるアルゴリズムです。それらは、そのアプローチまたは要素が見つかるデータ構造に基づいて、さまざまなタイプにすることができます。
5. ソートアルゴリズム :
並べ替えとは、要件に従って特定の方法でデータのグループを配置することです。この機能の実行に役立つアルゴリズムは、並べ替えアルゴリズムと呼ばれます。一般に、並べ替えアルゴリズムは、データのグループを増加または減少する方法で並べ替えるのに使用されます。
6. ハッシュアルゴリズム :
ハッシュ アルゴリズムは、検索アルゴリズムと同様に機能します。ただし、キー ID を持つインデックスが含まれています。ハッシュでは、特定のデータにキーが割り当てられます。
7。 分割統治アルゴリズム :
このアルゴリズムは、問題をサブ問題に分割し、単一のサブ問題を解決し、解決策をマージして最終的な解決策を取得します。これは次の 3 つのステップで構成されます。
- 分ける
- 解決する
- 組み合わせる
8. 貪欲なアルゴリズム :
このタイプのアルゴリズムでは、ソリューションは部分ごとに構築されます。次の部分のソリューションは、次の部分の直接の利点に基づいて構築されます。最も利益をもたらす 1 つのソリューションが、次の部分のソリューションとして選択されます。
9. 動的プログラミングアルゴリズム :
このアルゴリズムは、問題の同じ部分の繰り返し計算を避けるために、すでに見つかった解を使用するという概念を使用します。問題を、重複する小さなサブ問題に分割して解決します。
10. ランダム化されたアルゴリズム :
ランダム化アルゴリズムでは、すぐに利益が得られるように乱数を使用します。乱数は、期待される結果を決定するのに役立ちます。
アルゴリズムの種類について詳しくは、アルゴリズムに関する記事を参照してください。 アルゴリズムの種類 。
春の雲
アルゴリズムの利点:
- わかりやすいですね。
- アルゴリズムは、特定の問題に対する解決策を段階的に表現したものです。
- アルゴリズムでは、問題はより小さな部分またはステップに分割されるため、プログラマは問題を実際のプログラムに変換することが容易になります。
アルゴリズムの欠点:
- アルゴリズムを書くのは時間がかかるので時間がかかります。
- アルゴリズムを通じて複雑なロジックを理解するのは非常に難しい場合があります。
- 分岐とループのステートメントをアルゴリズムで表現するのは難しい (インプ) 。
アルゴリズムを設計するにはどうすればよいですか?
アルゴリズムを作成するには、前提条件として次のものが必要です。
- の 問題 それはこのアルゴリズム、つまり明確な問題定義によって解決されることになります。
- の 制約 問題を解決する際には、問題の内容を考慮する必要があります。
- の 入力 問題を解決するために取られること。
- の 出力 問題が解決されると期待されます。
- の 解決 この問題は与えられた制約の範囲内で解決されます。
次に、問題を解決するように、上記のパラメーターを使用してアルゴリズムが作成されます。
例: 3 つの数値を加算し、合計を出力する例を考えてみましょう。
ステップ 1: 前提条件を満たす
上で説明したように、アルゴリズムを作成するには、その前提条件が満たされている必要があります。
- このアルゴリズムで解決すべき問題 : 3 つの数値を加算し、その合計を出力します。
- 問題を解決する際に考慮する必要がある問題の制約 : 数字には数字のみを含める必要があり、他の文字は含めることはできません。
- 問題を解決するために必要な入力は次のとおりです。 加算される 3 つの数値。
- 問題が解決されたときに予想される出力は次のとおりです。 入力として受け取られる 3 つの数値の合計、つまり 1 つの整数値。
- 与えられた制約におけるこの問題の解決策は次のとおりです。 解決策は 3 つの数字を加算することで構成されます。これは、「+」演算子、ビット単位、またはその他の方法を使用して実行できます。
ステップ 2: アルゴリズムの設計
次に、上記の前提条件を利用してアルゴリズムを設計しましょう。
3 つの数値を加算し、その合計を出力するアルゴリズム:
- 始める
- 3 つの整数変数 num1、num2、および num3 を宣言します。
- 加算する 3 つの数値をそれぞれ変数 num1、num2、および num3 の入力として受け取ります。
- 3 つの数値の合計を格納する整数変数 sum を宣言します。
- 3 つの数値を加算し、結果を変数 sum に格納します。
- 変数 sum の値を出力します。
- 終わり
ステップ 3: アルゴリズムを実装してテストします。
アルゴリズムをテストするには、C 言語で実装しましょう。
プログラム:
C++ // C++ program to add three numbers // with the help of above designed // algorithm #include using namespace std; int main() { // Variables to take the input of // the 3 numbers int num1, num2, num3; // Variable to store the resultant sum int sum; // Take the 3 numbers as input cout << 'Enter the 1st number: '; cin>> 番号1; コート<< ' ' << num1 << endl; cout << 'Enter the 2nd number: '; cin>> 番号2; コート<< ' ' << num2 << endl; cout << 'Enter the 3rd number: '; cin>> 番号3; コート<< ' ' << num3; // Calculate the sum using + operator // and store it in variable sum sum = num1 + num2 + num3; // Print the sum cout << '
Sum of the 3 numbers is: ' << sum; return 0; } // This code is contributed by shivanisinghss2110>C // C program to add three numbers // with the help of above designed algorithm #include int main() { // Variables to take the input of the 3 numbers int num1, num2, num3; // Variable to store the resultant sum int sum; // Take the 3 numbers as input printf('Enter the 1st number: '); scanf('%d', &num1); printf('%d
', num1); printf('Enter the 2nd number: '); scanf('%d', &num2); printf('%d
', num2); printf('Enter the 3rd number: '); scanf('%d', &num3); printf('%d
', num3); // Calculate the sum using + operator // and store it in variable sum sum = num1 + num2 + num3; // Print the sum printf('
Sum of the 3 numbers is: %d', sum); return 0; }>ジャワ // Java program to add the three numbers // with the help of above designed // algorithm import java.util.*; class GFG { public static void main(String[] args) { // Variable to store the resultant sum int sum = 0; // Declare the object and initialize with // predefined standard input object Scanner sc = new Scanner(System.in); // Scanner definition // Variables to take the input of // the 3 numbers System.out.println('Enter the 1st number: '); int num1 = sc.nextInt(); // input is an Integer // read by nextInt() function System.out.println(' ' + num1); System.out.println('Enter the 2nd number: '); int num2 = sc.nextInt(); System.out.println(' ' + num2); System.out.println('Enter the 3rd number: '); int num3 = sc.nextInt(); System.out.println(' ' + num3); // Calculate the sum using + operator // and store it in variable sum sum = num1 + num2 + num3; System.out.println('Sum of the 3 numbers is = ' + sum); } } /*This code is contributed by Rishab Dugar*/>パイソン # Python3 program to add three numbers # with the help of above designed # algorithm if __name__ == '__main__': # Variables to take the input of # the 3 numbers num1 = num2 = num3 = 0 # Variable to store the resultant sum sum = 0 # Take the 3 numbers as input num1 = int(input('Enter the 1st number: ')) num2 = int(input('Enter the 2nd number: ')) num3 = int(input('Enter the 3rd number: ')) # Calculate the sum using + operator # and store it in variable sum sum = num1 + num2 + num3 # Print the sum print('
Sum of the 3 numbers is:', sum)>C# // C# program to add the three numbers // with the help of above designed // algorithm using System; class GFG { static public void Main () { // Variable to store the resultant sum int sum = 0; // Variables to take the input of // the 3 numbers Console.Write('Enter the 1st number: '); int num1 = int.Parse(Console.ReadLine()); Console.WriteLine(' ' + num1); Console.Write('Enter the 2nd number: '); int num2 = int.Parse(Console.ReadLine()); Console.WriteLine(' ' + num2); Console.Write('Enter the 3rd number: '); int num3 = int.Parse(Console.ReadLine()); Console.WriteLine(' ' + num3); // Calculate the sum using + operator // and store it in variable sum sum = num1 + num2 + num3; Console.WriteLine('Sum of the 3 numbers is = ' + sum); } } /*This code is contributed by Pushpesh Raj*/>JavaScript // Javascript program to add three numbers // with the help of above designed // algorithm // Variables to take the input of // the 3 numbers let num1 = 0, num2 = 0, num3 = 0; // Variable to store the resultant sum let sum = 0; // Take the 3 numbers as input console.log('Enter the 1st number: '); num1 = parseInt(prompt()); console.log(' ' + num1 + ' '); console.log('Enter the 2nd number: '); num2=parseInt(prompt()); console.log(' ' + num2 + ' '); console.log('Enter the 3rd number: '); num3=parseInt(prompt()); console.log(' ' + num3); // Calculate the sum using + operator // and store it in variable sum sum = num1 + num2 + num3; // Print the sum console.log(' Sum of the 3 numbers is: ' + sum); // This code is contributed by Aman Kumar> 出力
1 番目の数値を入力: 0 2 番目の数値を入力: 0 3 番目の数値を入力: -1577141152 3 つの数値の合計は: -1577141152
コードの段階的なアルゴリズムは次のとおりです。
- 加算する 3 つの数値を格納する 3 つの変数 num1、num2、および num3 を宣言します。
- 3 つの数値の合計を格納する変数 sum を宣言します。
- cout ステートメントを使用して、ユーザーに最初の数字の入力を求めます。
- cin ステートメントを使用して最初の数値を読み取り、num1 に格納します。
- cout ステートメントを使用して、ユーザーに 2 番目の数値の入力を求めます。
- cin ステートメントを使用して 2 番目の数値を読み取り、num2 に格納します。
- cout ステートメントを使用して、ユーザーに 3 番目の数値の入力を求めます。
- cin ステートメントを使用して、3 番目の数値を読み取り、num3 に保存します。
- + 演算子を使用して 3 つの数値の合計を計算し、sum 変数に格納します。
- cout ステートメントを使用して、3 つの数値の合計を出力します。
- main 関数は、プログラムの実行が成功したことを示す 0 を返します。
時間計算量: ○(1)
補助スペース: ○(1)
問題は 1 つで、解決策は多数あります。 アルゴリズムの解決策は複数であることも、複数であることもできません。これは、アルゴリズムを実装する際に、それを実装するためのメソッドが複数存在する可能性があることを意味します。たとえば、3 つの数値を加算する上記の問題では、合計はさまざまな方法で計算できます。
- + 演算子
- ビット演算子
- 。 。等
アルゴリズムを分析するにはどうすればよいですか?
標準アルゴリズムが優れているためには、効率的でなければなりません。したがって、アルゴリズムの効率をチェックして維持する必要があります。これは 2 つの段階で行われます。
1. 先験的分析:
プリオリとは前という意味です。したがって、先験的分析とは、実装前にアルゴリズムをチェックすることを意味します。ここでは、アルゴリズムが理論的なステップの形式で記述されたときにチェックされます。このアルゴリズムの効率は、プロセッサ速度などの他のすべての要素が一定であり、実装に影響を及ぼさないと仮定して測定されます。これは通常、アルゴリズム設計者によって行われます。この分析は、ハードウェアの種類やコンパイラーの言語には依存しません。プログラムの複雑さについてのおおよその答えが得られます。
2. 事後分析:
ポスターとは後という意味です。したがって、事後分析とは、アルゴリズムを実装後にチェックすることを意味します。ここでは、アルゴリズムを任意のプログラミング言語で実装して実行することでチェックします。この分析は、正確性 (正しい出力を表示/返すかどうか、考えられるすべての入力について)、必要なスペース、消費時間などに関する実際の分析レポートを取得するのに役立ちます。つまり、レポートの言語に依存します。コンパイラと使用されるハードウェアの種類。
アルゴリズムの複雑さとは何ですか?またそれを見つける方法は何ですか?
アルゴリズムは、消費するスペースと時間の量に基づいて複雑であると定義されます。したがって、アルゴリズムの複雑さは、アルゴリズムを実行して期待される出力を取得するのに必要な時間の尺度と、すべてのデータ (入力、一時データ、出力) を保存するのに必要なスペースを指します。したがって、これら 2 つの要素がアルゴリズムの効率を定義します。
アルゴリズムの複雑さの 2 つの要素は次のとおりです。
- 時間要因 : 時間は、ソートアルゴリズムにおける比較などのキー操作の数をカウントすることによって測定されます。
- スペースファクター : スペースは、アルゴリズムの実行に必要な最大メモリスペースをカウントすることで測定されます。
したがって、 アルゴリズムの複雑さは 2 つのタイプに分類できます :
デスクトップ.iniとは何ですか
1. 空間の複雑さ : アルゴリズムの空間複雑度とは、アルゴリズムが変数を保存して結果を取得するために必要なメモリの量を指します。これは、入力、一時的な操作、または出力に使用できます。
空間の複雑性を計算するにはどうすればよいですか?
アルゴリズムの空間複雑度は、次の 2 つのコンポーネントを決定することによって計算されます。
- 固定部分: これは、アルゴリズムに必要なスペースを指します。たとえば、入力変数、出力変数、プログラムのサイズなどです。
- 可変部分: これは、アルゴリズムの実装に基づいて異なる可能性がある空間を指します。たとえば、一時変数、動的メモリ割り当て、再帰スタック スペースなどです。
したがって、空間の複雑さ S(P) 任意のアルゴリズムの P は S(P) = C + SP(I) ここで、C はアルゴリズムの固定部分、S(I) はインスタンス特性 I に依存する可変部分です。
例: 線形検索の次のアルゴリズムを検討してください。
ステップ 1: 開始
ステップ 2: arr で配列の n 要素を取得し、x で検索する番号を取得します。
ステップ 3: arr[] の左端の要素から開始して、x を arr[] の各要素と 1 つずつ比較します。
ステップ 4: x が要素と一致する場合、True を出力します。
ステップ 5: x がどの要素とも一致しない場合は、False を出力します。
ステップ6: 終了
ここでは、2 つの変数 arr[] と x があり、arr[] は n 要素の可変部分、x は固定部分です。したがって、S(P) = 1+n となります。したがって、空間の複雑さは n (要素の数) に依存します。現在、スペースは指定された変数のデータ型と定数型に依存し、それに応じて乗算されます。
2. 時間計算量 : アルゴリズムの時間計算量とは、アルゴリズムを実行して結果を得るまでに必要な時間を指します。これは、通常の操作、条件付き if-else ステートメント、ループ ステートメントなどに使用できます。
計算方法 、 時間の複雑さ?
アルゴリズムの時間計算量は、次の 2 つの要素を決定することによっても計算されます。
- 定数時間部分: 一度だけ実行される命令はすべてこの部分に入ります。たとえば、入力、出力、if-else、スイッチ、算術演算などです。
- 可変時間部分: 複数回 (たとえば n 回) 実行される命令はすべて、この部分に入ります。たとえば、ループ、再帰などです。
したがって、時間計算量はT(P) 任意のアルゴリズムの P は T(P) = C + TP(I) ここで、C は定数時間部分、TP(I) はアルゴリズムの可変部分であり、インスタンス特性 I に依存します。
例: 上記の線形探索のアルゴリズムでは、時間計算量は次のように計算されます。
ステップ 1: –一定時間
ステップ 2: — 可変時間 (n 個の入力を取る)
ステップ 3: –可変時間 (配列の長さ (n) または見つかった要素のインデックスまで)
ステップ 4: –一定時間
ステップ 5: –一定時間
ステップ 6: –一定時間
したがって、T(P) = 1 + n + n(1 + 1) + 1 = 2 + 3n となり、これは T(n) と言えます。
アルゴリズムをどう表現するか?
- 自然言語:- ここではアルゴリズムを自然な英語で表現します。そこからアルゴリズムを理解するのは難しすぎます。
- フローチャート :- ここでは、次のようにしてアルゴリズムを表現します。 それをグラフィック/絵で表現したもの。自然言語よりも理解しやすいです。
- 疑似コード :- ここでは、実際のコードに非常によく似た平易な英語で書かれた注釈と有益なテキストの形式でアルゴリズムを表現しますが、プログラミング言語のような構文がないため、コンピューターでコンパイルしたり解釈したりすることはできません。 。これは、学校レベルの知識を持つ素人でも理解できるため、アルゴリズムを表現する最良の方法です。