線形探索の解説(基本情報技術者シラバス用語)
線形探索とは線形探索(Linear Search / リニアサーチ)とは、データ群の中から目的のデータを探し出すための、最もシンプルで原始的な検索アルゴリズムです。配列やリストの端(先頭など)から順に、1つずつ目的の値と一致するかどうかを比較していきます。データが事前に並べ替えられていなくても探索できる利点がありますが、データ数が多くなると比較回数が増えて時間がかかる欠点もあります。具体例裏向きに...
Django、Python、AWS、Linux、セキュリティ、CVE、基本情報技術者、応用情報技術者、ITパスポートの用語を、図解と実務手順で解説します。個人開発kurutann.comの検証記録や障害対応事例も公開しています。
タグ「基本情報」の記事を表示中× クリア
線形探索とは線形探索(Linear Search / リニアサーチ)とは、データ群の中から目的のデータを探し出すための、最もシンプルで原始的な検索アルゴリズムです。配列やリストの端(先頭など)から順に、1つずつ目的の値と一致するかどうかを比較していきます。データが事前に並べ替えられていなくても探索できる利点がありますが、データ数が多くなると比較回数が増えて時間がかかる欠点もあります。具体例裏向きに...
二分探索とは二分探索(Binary Search / バイナリサーチ)とは、あらかじめ昇順または降順に並べ替え(ソート)されているデータ群から、目的のデータを素早く見つけるためのアルゴリズムです。データ全体の中央にある値を確認し、目的の値がそれより「大きいか」「小さいか」を判断します。それによって探索範囲を半分(二分)に絞り込むことを繰り返し、高速に目的地に到達します。具体例国語辞書で「さくら」と...
バブルソートとはバブルソート(Bubble Sort / 交換法)とは、データ群を並べ替えるソートアルゴリズムの一種で、隣り合う2つのデータの大小を比較し、順序が逆であれば入れ替えるという操作を、配列の端から順に繰り返す方法です。この操作を繰り返すと、軽い(値が小さい)要素が徐々に上に上がり、重い(値が大きい)要素が底へ沈むように並び替わります。泡(バブル)が浮かび上がってくる様子に似ていることか...
選択ソートとは選択ソート(Selection Sort)とは、データ群を並び替えるアルゴリズムの一つで、データの中から「最小値(または最大値)」を見つけ出し、それを未整列の部分の先頭と入れ替える操作を繰り返す手法です。「最小値を選択して前に持ってくる」というルールをシンプルに繰り返すことで、配列の左側から順番に整列されたデータが確定していきます。具体例トランプのカードがバラバラに置かれているとき、...
挿入ソートとは挿入ソート(Insertion Sort)とは、データ群を並び替えるためのアルゴリズムの一つです。配列を「すでに整列し終わった部分」と「まだ整列していない部分」に分け、未整列の部分からデータを1つずつ取り出し、整列済みのデータ群の中の「正しい位置」を探して差し込み(挿入し)ていくことで、全体をソートします。すでにある程度整列されているデータに対して非常に速く動作します。具体例手札のト...
クイックソートとはクイックソート(Quick Sort)とは、実用上で極めて高速に動作する代表的なソートアルゴリズムです。「分割統治法」と呼ばれる考え方に基づいており、まずデータの中から基準値(ピボット)を1つ決めます。次に、基準値より「小さい値のグループ」と「大きい値のグループ」の2つにデータを分けます。分けたそれぞれのグループに対して、再び同じルールでピボットを決めて二分する操作を再帰的に繰り...
マージソートとはマージソート(Merge Sort / 併合ソート)とは、並べ替えアルゴリズムの一つで、データ群を要素が1個になるまで細かく(半分ずつに)分解したあと、並び順が正しくなるように合体(マージ)させながら、元の大きさに戻していくことで整列を行う手法です。常に安定した時間で処理できる性質があり、データの順序が崩れない「安定ソート」であることも特徴です。具体例2つの「すでに数字順に綺麗に並...
ヒープソートとはヒープソート(Heap Sort)とは、「ヒープ」と呼ばれる親子間の値に一定の大小関係ルールがある木構造を利用して、データを並べ替えるアルゴリズムです。ヒープの根(一番上)には必ず最大値(または最小値)が配置されるという特徴を利用し、根にある最大値を取り出して配列の末尾に移動させ、残りのデータで再びヒープを再構築する操作をデータがなくなるまで繰り返します。具体例バラバラに積まれた複...
再帰とは 再帰(さいき)とは、ある関数や処理の中で、自分自身を呼び出すプログラミングの技法のことです。「再帰呼出し」とも呼ばれます。複雑な問題を、より小さな同じ形の問題に分割して解決したいときに非常によく使われます。再帰を使うことで、複雑な繰り返し処理をシンプルで読みやすいコードとして記述することができます。ただし、自分自身を呼び出す処理が無限に続かないよう、処理を終了するための「ベースケース(終...
計算量とは 計算量(けいさんりょう)とは、コンピュータがあるプログラムを実行する際に、どれだけの「時間」や「メモリの量」を必要とするかを表す指標です。プログラムの性能や効率の良さを測るために使われます。データ数が多くなったときに、処理にどれくらい時間がかかるかを示すものを「時間計算量」、どれくらいメモリを消費するかを示すものを「領域計算量」と呼びます。計算量は一般的に「O記法(オー記法)」を用いて...
貪欲法とは 貪欲法(どんよくほう)とは、問題を解決するアルゴリズムの設計手法の一つです。「グリーディ法」とも呼ばれます。この手法の特徴は、問題を解決していく各段階において、将来の影響を一切考えず、その時点で最も有利に見える選択(局所的な最適解)を繰り返し選んでいくことです。全体にとっての最終的な正解(全体最適解)が必ず得られるとは限りませんが、処理が非常にシンプルであり、計算速度が極めて速いという...
動的計画法とは 動的計画法(どうてきけいかくほう)とは、複雑な問題を解くためのアルゴリズム設計手法の一つです。英語では「Dynamic Programming(DP)」と呼ばれます。この手法では、大きな問題をいくつかの小さな問題に分割し、それぞれの小さな問題の答えを一度だけ計算して、その結果をメモリなどに記録しておきます。そして、より大きな問題を解く際に、すでに記録してある計算結果を再利用すること...
幅優先探索とは 幅優先探索(はばゆうせんたんさく)とは、グラフや木構造といったデータ構造のすべての要素を調べる(探索する)ための代表的なアルゴリズムの一つです。英語の「Breadth-First Search」の頭文字をとって「BFS」とも呼ばれます。この探索法の特徴は、出発地点に近い階層から順番に、横方向(同じ深さの要素)をすべて調べ尽くしてから、次の深い階層へと進んでいくことです。スタート地点...
深さ優先探索とは 深さ優先探索(ふかさゆうせんたんさく)とは、グラフや木構造などのデータ構造を探索するための代表的なアルゴリズムの一つです。英語の「Depth-First Search」の頭文字をとって「DFS」とも呼ばれます。この探索法の特徴は、ある経路を選んだら、突き当たり(葉ノード)に達するまでひたすら深く進み、行き止まりになったら一歩戻って(バックトラック)別のルートを探索する、という手順...
疑似言語とは 疑似言語(ぎじげんご)とは、プログラムの処理手順(アルゴリズム)を人間にとって分かりやすく表現するために作られた、架空のプログラミング言語のことです。実際のコンピュータ上でそのまま実行することはできませんが、特定のプログラミング言語(JavaやPython、C言語など)の細かな書き方のルールにとらわれず、アルゴリズムの論理的な構造や流れだけを整理して伝えるために用いられます。日本のI...
変数とは 変数(へんすう)とは、プログラムの中でデータ(数値や文字など)を一時的に記憶しておくために用意する、名前のついた「箱」のようなものです。プログラムは、この箱に値を入れたり(代入)、入っている値を取り出したり(参照)、あるいは値を書き換えたりしながら様々な計算や処理を行います。変数を使うことで、同じ値を何度も使い回すことができ、プログラムの記述をすっきりと整理できます。また、値の中身が途中...
大域変数とは 大域変数(たいいきへんすう)とは、プログラムのどこからでも読み書きができる変数のことです。「グローバル変数」とも呼ばれます。これに対して、特定の関数や処理ブロックの内部だけでしか使えない変数を「局所変数(ローカル変数)」と呼びます。大域変数はプログラム全体の共通データ(アプリの設定やログイン中のユーザー情報など)を管理するのに便利ですが、どこからでも書き換えられてしまうため、意図しな...
引数とは 引数(ひきすう)とは、プログラムの中で関数(特定の処理をまとめた命令セット)を呼び出す際に、呼び出し元から関数へと渡すデータ(値や変数)のことです。関数に処理を依頼する際、「このデータを使って処理してください」と指示するための情報と言えます。関数を定義するときに受け取り側として用意する変数を「仮引数(かりひきすう)」、実引数(じつひきすう)と呼びます。引数を使うことで、一つの関数を様々な...
関数とは 関数(かんすう)とは、特定の目的を持った一連の処理(計算や操作など)をひとまとめにして、名前をつけたプログラムの部品のことです。別の言葉で「手続」や「プロシージャ」とも呼ばれます。同じような処理を何度も行う場合、毎回同じコードを書く代わりに、その処理を関数として定義しておくことで、必要なときにいつでも名前を呼び出すだけで実行できるようになります。関数には、外部からデータを受け取る「引数(...
オブジェクト指向とは オブジェクト指向(オブジェクトしこう)とは、ソフトウェア開発における設計思想(考え方)の一つです。プログラムを単なる命令の並びとして捉えるのではなく、データとそれを操作する処理をひとまとめにした「オブジェクト(モノ)」として定義し、そのオブジェクト同士が互いにメッセージをやり取りしながら全体を動かしていくというアプローチです。現実世界に存在する「車」や「人間」「注文」といった...
クラスとは クラスとは、オブジェクト指向プログラミングにおいて、オブジェクト(モノ)を作り出すための「設計図」や「型」にあたるものです。この設計図に基づいて実際にメモリ上に作成された具体的なモノを「インスタンス」または「オブジェクト」と呼びます。クラスには、そのモノが持つべき情報である「属性(データ・変数)」と、そのモノができる操作である「メソッド(処理・関数)」を定義しておきます。設計図であるク...
継承とは 継承(けいしょう)とは、オブジェクト指向プログラミングにおいて、すでにあるクラス(親クラス / スーパークラス)の機能や特徴を引き継いで、新しく別のクラス(子クラス / サブクラス)を作る仕組みのことです。英語では「インヘリタンス」と呼ばれます。継承を使用することで、親クラスに定義されたデータ(属性)や処理(メソッド)を子クラスで再度記述する必要がなくなり、プログラムのコード量を大幅に削...
カプセル化とは カプセル化(かぷせるか)とは、オブジェクト指向プログラミングにおいて、データ(変数)とそれを操作する処理(メソッド)を一つのオブジェクト(クラス)にまとめ、外部から直接データを覗き見たり、勝手に書き換えたりできないように保護する仕組みのことです。薬のカプセルのように、中身(不要な詳細情報や重要な設定値)を隠蔽して安全に保護します。外部とのやり取りは、専用の公開された窓口(メソッド)...
ポリモーフィズムとは ポリモーフィズムとは、日本語で「多態性(たたいせい)」や「多様性」と呼ばれるオブジェクト指向プログラミングの重要な概念です。これは、異なる種類のオブジェクトに対して同じ名前の命令(メソッド)を送ったとしても、それぞれのオブジェクトが自身の特性に合わせて、異なる動作を行うことができる仕組みを指します。呼び出し側のプログラムは、相手が誰であるかを詳しく知らなくても、共通のインター...