配列の解説(基本情報技術者シラバス用語)
配列とは配列(Array)とは、複数のデータをコンピュータのメモリ上に一列に並べて管理する最も基本的なデータ構造です。配列内の個々のデータを「要素」と呼び、各要素には「0」から始まる「インデックス(添え字)」という番号が割り当てられます。メモリ上で連続した領域に保存されるため、インデックスを指定するだけで、目的のデータへ瞬時にアクセスできる特徴を持っています。具体例1週間の気温データ(月曜〜日曜ま...
Django、Python、AWS、Linux、セキュリティ、CVE、基本情報技術者、応用情報技術者、ITパスポートの用語を、図解と実務手順で解説します。個人開発kurutann.comの検証記録や障害対応事例も公開しています。
タグ「アルゴリズムとプログラミング」の記事を表示中× クリア
配列とは配列(Array)とは、複数のデータをコンピュータのメモリ上に一列に並べて管理する最も基本的なデータ構造です。配列内の個々のデータを「要素」と呼び、各要素には「0」から始まる「インデックス(添え字)」という番号が割り当てられます。メモリ上で連続した領域に保存されるため、インデックスを指定するだけで、目的のデータへ瞬時にアクセスできる特徴を持っています。具体例1週間の気温データ(月曜〜日曜ま...
リストとはリスト(連結リスト:Linked List)とは、データそのものと「次のデータがメモリ上のどこにあるかを示す情報(ポインタ)」をセットにした要素(ノード)を、鎖のようにつなぎ合わせて複数のデータを管理するデータ構造です。配列と違い、データがメモリ上でバラバラの位置にあっても問題なく、データの追加や削除をする際に周りのデータをズラす必要がないため、途中の挿入・削除が非常に素早く行える利点が...
スタックとはスタック(Stack)とは、データを一時的に保存するデータ構造の一種で、最初に入れたデータが最後に出てきて、最後に入れたデータが最初に出てくる「後入れ先出し(LIFO:Last In, First Out)」というルールで管理される仕組みです。データを積み上げるイメージで、一番上にデータを追加する操作を「プッシュ(Push)」、一番上からデータを取り出す操作を「ポップ(Pop)」と呼び...
キューとはキュー(Queue)とは、データを一時的に保存するデータ構造の一種で、最初に入れたデータが最初に出ていき、最後に入れたデータは最後に出ていく「先入れ先出し(FIFO:First In, First Out / 待ち行列)」という規則で管理される仕組みです。列の最後尾にデータを追加する操作を「エンキュー」、列の先頭からデータを取り出す操作を「デキュー」と呼びます。具体例プリンターの印刷処理...
木構造とは木構造(Tree Structure)とは、データ同士のつながりを親子関係(階層的)で表現したデータ構造です。樹木を逆さまにしたような形で表され、最上位にある一番大元の要素を「根(ルーツ)」、そこから枝分かれした途中の要素を「節(ノード)」、枝の最下端にある要素を「葉(リーフ)」と呼びます。上から下へ一方通行の親子関係があるのが特徴です。具体例パソコンのフォルダ(ディレクトリ)管理がもっ...
二分探索木とは二分探索木(Binary Search Tree)とは、木構造の中でも「各ノード(要素)が持つ子供は最大で2つまで(二分木)」であり、かつデータが一定の配置ルールに従って整理された構造です。そのルールとは、「あるノードを基準として、その左側には親より小さい値、右側には親より大きい値のデータだけを置く」というものです。この配置により、目的のデータを検索するスピードが非常に早くなります。...
ヒープとはヒープ(Heap)とは、木構造(特に完全二分木)を利用したデータ構造の一種で、「親ノードの値が、子ノードの値よりも常に大きい(または常に小さい)」という親子関係のルールを木全体で保っている状態のことです。このルールを守ることにより、木の一番上(根)には常に「最大値」または「最小値」のデータが配置されることになります。最大(小)値を素早く取り出す用途に適しています。具体例「優先度付きのタス...
ハッシュ表とはハッシュ表(Hash Table)とは、「ハッシュ関数」と呼ばれる特別な計算式を用いて、探したいデータの「キー(名前など)」から、そのデータが格納されるメモリ上の「アドレス(インデックス番号)」を直接算出して管理するデータ構造です。最初からデータの場所が計算で分かるため、データ数が膨大になっても、データの追加や検索をほぼ一瞬(一定時間)で行うことができます。具体例会員名簿データベース...
グラフとはグラフ(Graph)とは、データ同士の複雑な「つながりや関係性」を表現するためのデータ構造です。個々のデータを「頂点(ノード)」、つながりを示す線を「辺(エッジ)」と呼びます。辺に矢印(向き)があるものを「有向グラフ」と呼び、一方通行のルートなどを表します。向きがないものは「無向グラフ」と呼び、双方向のつながりを表します。具体例電車の路線図が代表的な例です。各駅が「頂点」、駅間をつなぐ路...
線形探索とは線形探索(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...