第2章 アルゴリズムとプログラミング
リスト
| 単語 | 意味 |
|---|---|
| リストの実現方法 | リスト:「並びを持ったデータの集まり」(例:[A, B, C])。実現は主に2方式: 配列(Array):メモリ上に連続して並べる 連結リスト(Linked List):ポインタ(参照)でつなぐ 📌 選び方のカギ: 追加・削除が頻繁 → 連結リスト ランダムアクセスが頻繁(「5番目を取り出せ」)→ 配列 |
| 配列 | → 同じ型のデータを、メモリ上で連続して格納。 特徴: インデックスで直接アクセス: list[i] は O(1)(定数時間)サイズ固定(動的配列は別) メモリ効率◎(ポインタ不要) 🔹 例(3要素): ![]() → list[2] = アドレス 1000 + 2×4 = 1008 → 即座にC✅ 利点:アクセスが超高速 ❌ 欠点:中央への追加・削除は O(n)(データをずらす必要あり) |
| 連結リスト | → 各要素(ノード)が「データ+次のノードのポインタ」を持つ。 構造(単方向): ![]() ・各ノード: ![]() 特徴: ・追加・削除が O(1)(ポインタ切り替えのみ) ・メモリが飛び飛び → キャッシュ効率↓ ・ランダムアクセスは O(n)(先頭からたどる) ✅ 利点:柔軟なサイズ変更 ❌ 欠点:アクセスが遅い、メモリオーバヘッドあり(ポインタ分) |
| 要素の追加 | ![]() 🔹 連結リストの先頭追加(図): ![]() |
| 要素の削除 | ![]() 🔹 連結リストの削除(Bを削除): ![]() 📌 注意:連結リストでは「削除対象の1つ前」が必要 → 双方向リスト(prevポインタ追加)で改善。 |
| リストによる2分木の表現 | 2分木(Binary Tree)は「ノードが最大2つの子を持つ木」。 リスト(特に連結構造)で自然に表現可能。 ノード構造: ![]() 例(木:Aが根、左にB、右にC): ![]() → メモリ上: ![]() (→B はBノードのアドレス、など) リスト表現のメリット: ・木の形状にかかわらず、必要な分だけメモリ確保 ・挿入・削除が容易(ポインタ変更のみ) ・再帰処理と相性◎( traverse(node.left))✅ 応用: ・ヒープ(完全2分木 → 配列でも可) ・決定木(機械学習) ・構文木(コンパイラ) |
スタックとキュー
| 単語 | 意味 |
|---|---|
| スタック | → 「最後に入れたものが最初に取り出される」(LIFO: Last In, First Out) 操作: ・ push(x):上に乗せる・ pop():一番上のものを取り出す・ top():一番上を覗く(取り出さない)🔹 例(皿の山): ![]() ✅ 応用: ・関数呼び出し(ローカル変数の保存/復元) ・式の評価(逆ポーランド記法) ・深さ優先探索(DFS) |
| キュー | → 「最初に入れたものが最初に取り出される」(FIFO: First In, First Out) 操作: ・ enqueue(x):後ろに並ばせる・ dequeue():先頭から取り出す・ front():先頭を覗く🔹 例(レジの列): ![]() ✅ 応用: ・タスクスケジューリング(OS) ・ネットワークパケットバッファ ・幅優先探索(BFS) |
| グラフの探索 | → グラフの頂点を系統的に訪問する手法。 スタックとキューが、探索の“性格”を決める。 (1)深さ優先探索 DFS(Depth-First Search) 道具:スタック(再帰でも実現可能) 方針:1つのパスを最後まで行く→ 行き止まりで戻る(バックトラック) 🔹 例(グラフ:A–B–C, A–D): ![]() 訪問順:A, B, C, D ✅ 特徴: ・メモリ使用量:現在のパス長(浅い場合◎) ・応用:迷路探索、トポロジカルソート、連結成分検出 (2)幅優先探索 BFS(Breadth-First Search) ・道具:キュー ・方針:出発点から同心円状に広げる 🔹 同じグラフで: ![]() 訪問順:A, B, D, C ✅ 特徴: 最短路(無向/非重み付き)を保証 応用:SNSの「〜さん経由でつながり」、感染拡大シミュレーション |
木構造
| 単語 | 意味 |
|---|---|
| 木の基本構造 | → ルート(根)から枝分かれする階層構造。 ・節点(ノード):データ+子へのリンク ・辺:親と子をつなぐ線 ・葉:子を持たない節点 ・高さ:ルートから最も遠い葉までの辺数 🔹 例: ![]() ✅ 重要性質: ・閉路なし(→ グラフと異なる) ・任意の2節点間に経路は1通りだけ |
| 木の種類 | ![]() |
| 完全2分木 | → ・全レベルが満タン(最後のレベル以外) ・最後のレベルは左から詰められている 🔹 例(高さ2): ![]() → 7節点(満タンなら8だが、右端1つ空きでOK) ✅ 特徴:配列で効率的に表現可能 |
| 完全2分木の葉の個数 | 高さ の完全2分木(全節点数 )について: ・葉の個数 = ・または:最後のレベルの節点数 + 上のレベルの「子なし節点」 🔹 例: (高さ2の満タン)→ 葉=4(底辺) → 葉=3(D, E, F) ![]() |
| 葉以外の節の個数 | → 全節点数 − 葉の数 高さ の満タン2分木()では: 葉の数 = 内部節点(葉以外)= 🔹 例: 葉:4 内部節点(A,B,C):3 = ✅ 一般に、2分木では「内部節点数 = 葉の数 − 1」(辺の数=節点数−1 より導出) |
| 巡回法 | → 木の全節点を系統的に訪問する3方式。再帰で自然に書ける。![]() 🔹 例(木: A(B(D,E), C)):![]() ・行きがけ:A, B, D, E, C ・通りがけ:D, B, E, A, C ・帰りがけ:D, E, B, C, A |
| 幅優先探索(BFS順) | → レベルごとに左→右で訪問。キューで実現。![]() 🔹 上記木で: A → B → C → D → E📌 特徴: ・最短経路(非重み)を保証 ・メモリ使用量は最大幅に比例 |
| 深さ優先探索(DFS順) | → 1本のパスを最後まで→戻って別ルート。スタック or 再帰。![]() 上記の3巡回法はすべてDFSの一種! 行きがけ = DFS(節点処理を最初に) 通りがけ/帰りがけ = DFS(途中/最後に処理) |
| 2分探索木 | → 2分木+並び順のルール: 🔹 例: ![]() ✅ 通りがけ巡回 → 10, 30, 40, 50, 60, 70(昇順!) |
| 2分探索木における探索 | → 大小比較で枝を絞る。 時間計算量:O(高さ) ![]() 🔹 手順(例:60を探す): 50(60 > 50 → 右へ) 70(60 < 70 → 左へ) 60 → 発見! ✅ 平衡なら高さ= → 高速 |
| 2分探索木における節の挿入と削除 | 挿入: 探索と同じ手順で「空の子」位置を見つけ、そこに追加 → 常に葉になる ![]() 削除(3ケース): 1,子なし(葉)→ 単に削除 2.子が1つ→ 親のポインタを孫に飛ばす 3.子が2つ→ ・次節点(通りがけ次:右部分木の最小値) ・または 前節点(左部分木の最大値) → それをコピーして削除 🔹 例(50を削除): ・右部分木の最小=60 ・50を60で上書き → 元の60を削除(子なし) |
| バランス木 | → 高さを O(log n) に保つ2分探索木。 なぜ必要? ・普通のBSTが偏ると(例:昇順挿入)→ 高さ= → 探索が線形に劣化! |
| AVL木 | → 各節点で「左右の高さ差 ≤ 1」 を保つバランス木。 バランス維持:回転(4種) ・左回転(LL) ・右回転(RR) ・左右回転(LR) ・右左回転(RL) 🔹 例(挿入で偏ったとき): ![]() ✅ 特徴: 厳格なバランス → 操作がやや重い(回転頻発) 高さ ≤ |
| B木 | → 多分木(節点が多数の子を持つ)+ バランス保証。 DB・ファイルシステムで多用(HDDのブロックアクセスに最適)。 特徴: ・各節点:最大 2m 個の子(:次数) ・全葉が同じ深さ ・挿入で節点が満杯→分割 ・削除で節点がスカスカ→結合/移動 🔹 例(2-3木:): ![]() ✅ 利点: ディスクI/Oが少ない(1節点=1ブロック) 木の高さが非常に浅い(例:10億件で高さ4~5) |
探索アルゴリズム
| 単語 | 意味 |
|---|---|
| 線形探索法 | → 先頭から順に1つずつ調べる。 入力:並んでいなくてもOK(ソート不要) 出力:見つかった位置 or 見つからない 🔹 例: [3, 1, 4, 1, 5] から 4 を探す→ 3(×)→ 1(×)→ 4(○)→ 3番目 ✅ 利点:実装超簡単、どんなデータでも可 ❌ 欠点:最悪で全件チェック → 遅い |
| 2分探索法 | → ソート済み配列で「真ん中を見て、範囲を半分に絞る」。 手順(昇順配列): 1. left = 0, right = n−12. mid = (left + right) / 23. A[mid] と比較:・等しければ終了 ・小さければ → right = mid − 1・大きければ → left = mid + 14. left > right で終了(不在)🔹 例: [1, 3, 4, 5, 9] で 5 を探す・mid=2 → 4 < 5 → 左半分捨てる・新範囲 [5,9], mid=3 → 5 発見!✅ 時間計算量:O(log n)(100万件でも約20回でOK) ❌ 条件:ソート済み必須 |
| ハッシュ法 | → 「キー → 住所(インデックス)」を即座に計算して直接アクセス。 理想:O(1)(定数時間)で探索・追加・削除! 核心:ハッシュ関数 ・入力:キー(例:文字列 "Alice")・出力:配列の添字(例: h("Alice") = 7)🔹 例(簡易ハッシュ:英字のASCII和 mod 10) "Bob" → B(66)+o(111)+b(98)=275 → 275 mod 10 = 5✅ 利点:理論上最速 ⚠️ 問題:衝突(異なるキーが同じ添字)→ 次の2手法で解決 |
| オープンアドレス法 | → 衝突したら「別の空き箱を探す」方式。 衝突解決戦略: ![]() 🔹 例(線形走査、m=5): ・ h("A")=2 → [ , , A, , ]・ h("B")=2(衝突)→ 次の空き3 → [ , , A, B, ]・探索時も同じ順でたどる ✅ 利点:メモリが連続 → キャッシュ効率◎ ❌ 欠点:詰まると性能劣化(ロードファクタ > 0.7 で再ハッシュ推奨) |
| チェイン法 | → 衝突したデータを同じ添字にリストでつなぐ。 🔹 例(m=3): ![]() ・ h("Bob") = h("Tom") = 0 → 両方0番地にチェイン✅ 利点: ・衝突が増えても安定 ・リストを平衡木に置き換えれば O(log n) 保証可能(Javaの HashMap が採用)❌ 欠点:ポインタオーバヘッド、ランダムアクセス増 |
| O記法 | → 入力サイズ n が大きいときの“増加の速さ” を評価。 定数・低次の項を無視 → 主要項のみ。 ![]() 覚え方(速い→遅い): 🔹 例: ・線形探索:O(n)(全件見る) ・2分探索:O(log n)(毎回半分) ・ハッシュ(チェイン平均):O(1 + α)(α=ロードファクタ) ✅ 応用情報のカギ: 「最悪計算量」と「平均計算量」を区別せよ (例:クイックソート:最悪 O(n2)、平均 O(n log n)) |
整列アルゴリズム
| 単語 | 意味 |
|---|---|
| バブルソート | → 隣同士を比較し、大きい方を後ろへ「浮かせる」。 手順: 1.先頭から順に隣どうし比較 2.左>右なら入れ替え 3.1周で最大値が最後に確定 4.範囲を1つ縮めて繰り返し 🔹 例: [4, 2, 3, 1]・1周目: 4↔2→[2,4,3,1] → 4↔3→[2,3,4,1] → 4↔1→[2,3,1,4](4確定)・2周目: [2,3,1] → 3↔1→[2,1,3,4](3確定)・3周目: [2,1] → 2↔1→[1,2,3,4]✅ 特徴: ・実装超簡単 ・安定(等しい値の順序が保たれる) ・計算量:O(n2)(全ペア比較) |
| 単純選択法 | → 未整列部から最小値を探し、先頭に置く。 手順: 1.全体から最小値を探す 2.先頭と交換 → 先頭1つ確定 3.残りで同様に繰り返し 🔹 例: [4, 2, 3, 1]・最小=1 → 4と交換: [1, 2, 3, 4]・残り [2,3,4]で最小=2(既に先頭)→ 交換なし→ 2周目で終了 ✅ 特徴: ・交換回数が最小(最大 n−1 回) ・不安定(例: [2ₐ, 1, 2ᵦ] → 1, 2ᵦ, 2ₐ)・計算量:O(n2)(毎回最小値探索) |
| 単純挿入法 | → 手札を並べる感覚:1枚ずつ取り、正しい位置に挿入。 手順: 1.先頭1つを「整列済み」とみなす 2.次の要素を「整列済み部分」の適切な位置に挿入 3.繰り返し 🔹 例: [4, 2, 3, 1]・ [4] | 2,3,1 → 2を挿入:[2,4] | 3,1・3を挿入(2と4の間): [2,3,4] | 1・1を先頭に: [1,2,3,4]✅ 特徴: ・ほぼ整列済みデータに超強い(O(n) に近づく) ・安定 ・計算量:平均・最悪 O(n2)、最良 O(n) |
| 整列法 | ![]() 📌 応用情報では「安定性」「計算量」「in-place性」が問われる。 |
| 逐次添加法 | → 1つずつ要素を追加し、都度整列を保つ方式。 代表:挿入ソート 🔹 発想: ・整列済み部分を「完成品」 ・新要素が来たら、完成品の適切な場所に埋め込む ✅ メリット: ・小規模や逐次追加データに適す ・実装が自然(手作業に近い) |
| 分割統治法 | → 大問題を小問題に分割 → 再帰で解く → 結果を統合。 代表:マージソート、クイックソート 3ステップ: 1.分割(Divide):問題を小さな部分問題へ 2.征服(Conquer):再帰的に解く(十分小さければ直接解) 3.結合(Combine):部分解を統合 ✅ メリット: ・再帰的で設計が明快 ・多数の並列処理に適す(部分問題独立) |
| クイックソート | → 分割統治の代表。「基準値(pivot)で分割」を再帰で繰り返す。 手順: 1.pivot(例:末尾)を選ぶ 2.配列を「pivot未満」「pivot以上」に分ける(in-place) 3.pivotの位置が確定 4.左右の部分配列で再帰 🔹 例: [4, 2, 3, 1], pivot=1・分割後: [1] | [4,2,3]・右で pivot=3: [2] | [3] | [4]→ 結合: [1,2,3,4]✅ 特徴: ・平均 O(n log n)、最悪 O(n2)(pivotが極端に偏るとき) ・in-place、実用上最速(キャッシュ効率◎) ・不安定 |
| ヒープソート | → 「ヒープ」という木構造を使って整列。 流れ: 1.配列をヒープ(親≧子の完全2分木)に構築(O(n)) 2.最大値(ルート)を末尾と交換 → 末尾確定 3.ヒープサイズを1減らし、ヒープ再構成 4.繰り返し ✅ 特徴: ・常に O(n log n)(最悪も保証) ・in-place ・不安定 |
| ヒープの再構成 | → ヒープ条件(親≧子)が崩れたとき、根から葉へ値を「沈めて」修復。 手順(根を修復): 1.根と「大きい子」を比較 2.子の方が大きければ交換 3.交換先で再帰的に繰り返し(葉まで) 🔹 例: [1, 4, 3, 2](根=1が小さすぎる)・1と4交換 → [4, 1, 3, 2]・1と2交換 → [4, 2, 3, 1](ヒープ完成)📌 時間計算量:O(log n)(木の高さ分だけ下る) |
| マージソート | → 分割統治のもう1代表。「半分に割って→整列→マージ」を再帰。 手順: 1.配列を半分に分割 2.左右を再帰で整列 3.マージ(2つの整列済み列を併合) 🔹 マージ例: [2,4] と [1,3] →比較しながら:1→2→3→4 → [1,2,3,4]✅ 特徴: ・常に O(n log n) ・安定 ・欠点:O(n) の追加メモリ(マージ用) |
再帰法
| 単語 | 意味 |
|---|---|
| 再帰関数の定義 | 再帰関数とは、自分自身を呼び出す関数のことです。 ただし、ただ呼び出しているだけでは無限ループに落ちるため、2つの必須条件があります: 1.再帰ケース(Recursive Case): 問題を「より小さい(簡単な)同じ問題」に変えて、自分自身を呼び出す部分。 → 例: n! = n × (n−1)!2.基底部(Base Case): これ以上再帰しない「終わりの条件」。 → 例: 0! = 1(これがないと、−1!、−2!…と永遠に続く)📌 核心の発想: 「大きな問題を、自分と同じ形の小さな問題に分解し、 最小の問題(基底部)で答えを返して、それを積み上げる」 |
| 再帰関数の実例 | (1)階乗(n!)![]() 🔹 動作( fact(3)):fact(3) → 3 × fact(2)→ 3 × 2 × fact(1)→ 3 × 2 × 1 × fact(0)→ 3 × 2 × 1 × 1 = 6→ 自分より1小さい問題に置き換え、0で止まる。 (2)フィボナッチ数列( F(n) = F(n−1) + F(n−2))![]() 🔹 動作( fib(4)):fib(4) → fib(3) + fib(2)→ (fib(2)+fib(1)) + (fib(1)+fib(0))→ ((fib(1)+fib(0)) + 1) + (1 + 0)→ ((1+0)+1)+1 = 3⚠️ 注意:この素朴な実装は重複計算が多いため非効率(応用情報では「メモ化再帰」が重要)。 (3)木の深さ(2分木) ![]() 🔹 発想: 「木の深さ」= 1(今いる階層)+「左右の部分木の深さの大きい方」 → まさに「自分と同じ問題(部分木の深さ)」に分解! |
プログラム言語
| 単語 | 意味 |
|---|---|
| プログラム特性 | 応用情報で頻出の4つの「再」。どれも「一度書いたコードを、別の場面で安全・効率的に使い回す」ための性質です。![]() 🔹 例えて言うなら: ・再入可能:1つの教科書を、複数の生徒が同時に借りて読んでも破れない(書き込まない) ・再配置可能:本棚を移動しても、目次(相対ページ番号)で探せる 💡 再入可能 ≠ 再帰可能: 再帰は「時間的に重なる(自分→自分)」、再入は「空間的に重なる(AとBが同時に同じ関数)」 |
| 再入可能 | → 割り込みやマルチスレッドで安全に呼び出せる関数。リエントラントともいう。 条件: ・グローバル変数・静的変数を使わない ・引数やローカル変数(=スタック上)のみを使う 🔹 例(安全): ![]() ❌ 危険(非再入): ![]() ✅ 応用:OSカーネル、割り込みハンドラ、スレッド関数 |
| 再帰 | (前テーマで詳細済みのため、ここでは再入可能との違いに焦点) →リカーシブともいう。 ・再帰:1つの実行流れの中で、関数が自分を呼び出す(深くなる) ・再入:複数の実行流れが同時に同じ関数コードを実行(並列) 📌 関数が「再入可能」であれば、再帰+マルチスレッドでも安全。 |
| 再使用可能 | → 別のプログラムでコピペなしで使える設計。リユーザブルともいう。 実現手段: ・関数・クラスのモジュール化 ・インタフェースの明確化(入力/出力仕様) ・依存の低減(例:ハードコードしない) 🔹 例: sort(arr) 関数 → どのプログラムでも使えれば再使用可能。 |
| 再配置可能 | → ロードアドレスが変わっても動くプログラム(例:共有ライブラリ)。リロケータブルともいう。 実現: ・絶対アドレスを使わず、相対アドレス or アドレス解決を実行時・リンク時に委ねる ・実行形式:ELF(Linux)、DLL(Windows)など ✅ 利点:メモリの好きな場所に配置可能 → 複数プロセスで共有可能(ROM化可) |
| プログラム制御 | → プログラムの実行順序を決める仕組み。主に3種:![]() 📌 応用情報では、「どの制御構造が構造化プログラミングを満たすか」が問われる(→ goto禁止) |
| 手続きの呼出し | → 関数呼び出し時の裏側:コールスタックへの積み上げ。 1回の呼び出しで保存されるもの: ・戻り先アドレス ・引数 ・ローカル変数(=自動変数) ・レジスタ状態(一部) 🔹 例: main → A → B のとき、スタックは:[mainの状態] → [Aの状態] → [Bの状態](Bが終わるとpopしてAに戻る)✅ 再帰・再入の安全性は、このスタック分離に依る。 |
| 変数の記憶期間 | → 変数が「生きている」期間。3種類:![]() ✅ 応用情報頻出: ・静的変数 → 非再入の原因 ・動的確保 → メモリリークに注意 |
| 動的メモリの割当て | → 実行中に必要なだけメモリを確保・解放。 代表関数(C): ・ malloc(size):ヒープから領域確保 → 返り値:ポインタ・ free(ptr):確保した領域を解放🔹 危険なパターン: ・ダングリングポインタ(解放後も参照) ・メモリリーク(解放し忘れ) ・二重解放(2回 free) ✅ 現代言語(Java/Python)ではガベージコレクタが自動回収。 |
| 言語の分割 | プログラミング言語は「どう書くか」の思想(パラダイム)で分類:![]() |
| 手続型言語 | → 命令の列で処理を記述。「何を・どうするか」を順に書く。 🔹 特徴: ・変数に値を代入(状態変化あり) ・for/if で制御 ・モジュール=関数 ✅ 利点:実行効率◎、ハードウェア近い ❌ 欠点:大規模開発で保守性↓ |
| 関数型言語 | → 数学の関数のように、「入力→出力」が決まり、副作用なし。 🔹 特徴: ・変数は immutable(一度決めたら変えない) ・再帰で繰り返し ・関数が値(高階関数: map, filter)🔹 例(Haskell): ![]() ✅ 利点:並列処理に強い、バグが少ない ❌ 欠点:学習曲線が急 |
| 論理型言語 | → 「事実」と「ルール」を登録し、「○○は真か?」と質問して推論させる。 🔹 Prolog 例: ![]() 質問: father(taro, hanako). → Yes✅ 応用:エキスパートシステム、自然言語処理 |
| オブジェクト指向言語 | → 「モノ」をモデル化:データ(属性)と操作(メソッド)を1つにまとめる(カプセル化)。 🔹 4大原則: 1.カプセル化:内部を隠す(例: private 変数)2.継承:共通部分を親クラスに(例: class Dog extends Animal)3.ポリモーフィズム:同じ名前で異なる振る舞い(例: animal.speak() が犬で「ワン」、猫で「ニャー」)4.抽象化:本質だけを取り出す(例: Shape クラスに area())✅ 現代の主力(Java, C#, Python) |
| その他の言語 | ・スクリプト言語:手軽に自動化(Python, JavaScript) ・マークアップ言語:構造を記述(HTML, XML)→ 実行されない ・DSL(ドメイン特化言語):特定用途に最適化(SQL, LaTeX) |
| Javaアプレット | → ブラウザ内で動く小型Javaプログラム(※現在は非推奨・廃止)。 ・特徴:サンドボックス(セキュリティ制限) ・欠点:起動遅い、プラグイン必須 → HTML5/JSに置き換え |
| Javaサーブレット | → Webサーバ上で動くJavaプログラム。 ・入力:HTTPリクエスト(GET/POST) ・出力:HTMLなどのHTTPレスポンス ・役割:動的Webページ生成(例:ログイン処理、DB検索) ・現在はJakarta Servlet(Jakarta EE)に移行 |
| JavaBeans | → Javaの再使用可能なコンポーネント規約。 条件: ・デフォルトコンストラクタあり ・プロパティは getXXX/setXXX でアクセス・ Serializable 実装✅ 応用:GUI部品、EJBの基礎 |
| EJB | → 分散トランザクション処理向けのJavaコンポーネント。 ・種類: ・Session Bean(1回の処理:例:注文受付) ・Entity Bean(永続データ:例:ユーザ情報) ・特徴:コンテナがトランザクション・セキュリティを自動管理 ・現在はJPA(Java Persistence API)が主流 |
| J2EE | → Javaのエンタープライズ(大規模システム)向け標準。 ・含む技術:Servlet, JSP, EJB, JNDI, JTA など ・2018年:OracleからEclipse財団へ移管 → Jakarta EE に改名 |
| Ajax | → ページ全体を再読み込みせず、部分的にデータ更新する技術。 流れ: 1.JavaScriptが裏でHTTPリクエスト( XMLHttpRequest or fetch)2.サーバがJSON/XMLでデータ返す 3.JavaScriptがDOMを書き換え → 画面一部更新 🔹 例:Google Suggest(入力中に候補表示) ✅ 利点:快適なUI、通信量削減 |
| CSS | → HTMLの見た目(色・レイアウト)を分離して記述する言語。 🔹 例: ![]() → 全 <h1> が青・2倍サイズに。✅ 利点:デザイン変更が楽(HTMLいじらずに済む) |
| DTD | → XML文書の構造を定義する規約(※現在はXML Schemaが主流)。 🔹 例(簡易): ![]() → book は title 1つ+author 1個以上で構成。 |
| XSLT | → XMLを別のXML/HTML/テキストに変換する言語。 🔹 例: ![]() → <book><title>ABC</title></book> → <h2>ABC</h2>✅ 応用:レポート生成、データ変換 |
| SMIL | → 時系列でマルチメディア(音声・動画・画像)を同期再生するXMLベース言語。 ・例:「5秒後からBGM開始、10秒で画像フェードアウト」 ・現在はHTML5 <video> + JavaScript に置き換え |
| SVG | → XMLで記述するベクター画像(拡大してもギザギザなし)。 🔹 例: ![]() → 半径40の赤い円 ✅ メリット:解像度非依存、CSS/JSで制御可能、検索エンジンに優しい |
| ebXML | → 企業間取引(EDI)をXMLで標準化する国際規格(UN/CEFACT & OASIS)。 ・目的:異業種・異メーカー間で、注文・請求書などを自動交換 ・含む仕様:メッセージング、ビジネスプロセス、レジストリなど ・現在はUBL(Universal Business Language)が発展形 |
みんなで使おう!Ankiアプリで暗記しよう
Ankiアプリの記事と、現時点までに作成されたAnkiアプリのデータへのリンクを掲載しております。どうぞご利用ください。
本日分までのAnkiアプリデータはこちら。
firestorageダウンロード
パスワードは「shirakawa」です。お間違えのないように。
参考図書
応用情報技術者の資格勉強をするにあたり、科目A対策として以下の教科書を使用しています。できれば、こちらもAnkiアプリと併用しながらご利用いただければと思います。
合わせて読みたい
最後に
いかがでしたでしょうか?
Qwenで「意味」を出力させていますが、出力用のプロンプトを少し見直したほうが良いかなと思ったりもしています。もうちょっと文章でも詳しく解説して欲しいところですよね。
ちょこちょこプロンプトのほうはいじっていきますので、ご期待ください。
応用情報技術者の勉強は難しいと思いますが、皆さん一緒に頑張りましょう!

白川秋
ではでは、参考までに












































コメント