大阪大学 情報科学研究科 情報工学 2014年8月実施 アルゴリズムとプログラミング
Author
Description
(1) 図1に示す ANSI-C 準拠である C 言語のプログラム (program) は, 重複のない N (自然数, とする) 個の整数を昇順に配列 (array) A の要素 A[1]~A[N] に格納し, 変数 x の値が配列 A の要素に含まれているかどうかを2分探索法 (binary search) を用いて探索するプログラムである. このプログラムは, 探索の途中経過と, x の値が配列 A の要素に含まれる場合はその値が格納されている配列 A のインデックス (index), x の値が配列 A の要素に含まれない場合は 0 を出力する. N の値の設定, 配列 A[1]~A[N] に整数値を設定する処理, 変数 x の値を設定する処理, 及び, これらの値が妥当かどうかを確認する処理は省略している. 以下の各小問に答えよ.
(1-1) 図1のプログラムに対して, N, A[1]~A[N], x を下記のように設定した時の出力結果を書け.
N=8, A[1]=2, A[2]=5, A[3]=8, A[4]=10, A[5]=15, A[6]=20, A[7]=25, A[8]=30, x=8
(1-2) N=1000 で, x の値が A[1]~A[N] のどこかに存在する場合, 図1中の do-while ループが実行される回数は最大何回か. その理由も簡潔に説明せよ.
(1-3) 図1 の do-while ループ中の で囲われた部分を下記のように変更する.
変更前
if (A[mid] < x) left = mid+1;else right= mid-1;変更後
if (A[mid] < x) left = mid;else right= mid;変更前のプログラムは正しく結果が出力されるが, 変更後のプログラムは正しく結果が出力されないことがある. そのような N, A[1]~A[N], x の設定例を一つあげ, 「正しく結果が出力されない」状況がどのようなものかを簡潔に説明せよ.
#include <stdio.h>/* この部分でNの値が設定される. */int main(void){ int A[N+1]; int mid, left, right, x, index;/* この部分に下記の処理が記述されているとする. ・配列A[1]~A[N]の値が設定される. ・変数xに探索すべき値が設定される. ・配列A[1]~A[N], xの値が妥当かどうか確認される.*/ left = 1; right = N; do { mid= (left+right)/2; printf("%d %d %d\n",left,mid,right); if (A[mid]<x) left = mid+1; else right= mid-1; } while (A[mid] != x && left <= right); if (A[mid]==x) index=mid; else index=0; printf("%d\n", index); return 0;}(2) 図2に示す ANSI-C 準拠である C 言語のプログラム (program) は, 0-1 ナップサック問題 (0-1 knapsack problem) の解を求めて表示するプログラムである. なお, 図の左端の数値は行番号を表す. 0-1 ナップサック問題は, ある容量 (capacity) のナップサックが一つと, それぞれ大きさ (size) と価値 (value) が定められた複数の品物が与えられた時, ナップサックの容量を超えない範囲で価値の和が最大となる品物の組み合わせを求める問題である. 本プログラムでは, 四つの品物のそれぞれに他と重複しない番号が与えられており, 番号 i () の品物の大きさと価値が, 配列 size の要素 size[i] と配列 value の要素 value[i] としてそれぞれ格納されている. なお, 各番号の品物はそれぞれ一つしかなく, また, 分割できない. 品物の大きさと価値は自然数とする. 以下の各小問に答えよ.
(2-1) 22 行目の処理を実行する直前の配列 sack の内容を, 解答用紙の表の空欄を埋めることにより答えよ.
| sack[i][j] | j=0 | j=1 | j=2 | j=3 | j=4 | j=5 | j=6 | j=7 | j=8 | j=9 | j=10 | j=11 | j=12 | j=13 | j=14 | j=15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| i=0 | 0 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
| i=1 | 0 | -1 | 20 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
| i=2 | 0 | -1 | 20 | -1 | -1 | -1 | 30 | -1 | 50 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
| i=3 | ||||||||||||||||
| i=4 |
(2-2) 図2のプログラム中の空欄 (ア), (イ) を適切な式 (expression) で埋めよ.
#include <stdio.h>#define capacity 15 /* ナップサックの容量 */#define item 4 /* 品物の個数 */int main(void) { int size[] = {0, 2, 6, 6, 2}; int value[] = {0, 20, 30, 15, 25}; int sack[item+1][capacity+1]; int i, j, max, index;
for (i = 0; i <= item; i++) for (j = 0; j <= capacity; j++) sack[i][j] = -1; /* ナップサックの初期化 */ sack[0][0] = 0; /* 品物が入っていない(大きさの和が0)のナップサックの総価値は0 */
for (i = 1; i <= item; i++) for (j = 0; j <= capacity; j++) if (sack[i-1][j] != -1) { if (sack[i-1][j] > sack[i][j]) sack[i][j] = sack[i-1][j]; if (j + size[i] <= capacity) sack[i][j+size[i]] = sack[i-1][j] + value[i]; }
max = 0; index = 0; for (j = 0; j <= capacity; j++) if (sack[item][j] > max) {max = sack[item][j]; index = j;} for (i = item; i >= 1; i--) if (index >= size[i] && (ア) == (イ) ) { printf("item %d is in a knapsack\n",i); index = index - size[i]; } return 0;}Kai
(1)
(1-1)
, 配列 A が {2, 5, 8, 10, 15, 20, 25, 30}, の時の出力結果は以下の通りです。
1 4 81 2 33 3 33解説:
プログラムの do-while ループの実行過程をトレースします。
left=1,right=8で開始。mid=4。A[4]=10 < 8は偽なので、right=mid-1=3に更新。left=1,right=3でループ。mid=2。A[2]=5 < 8は真なので、left=mid+1=3に更新。left=3,right=3でループ。mid=3。A[3]=8 < 8は偽なので、right=mid-1=2に更新。ここでA[mid] != xが偽になるためループを抜けます。最後にindex=3を出力します。
(1-2)
- 最大実行回数: 10回
- 理由(日本語): 探索対象の配列要素数 であり、ループごとに探索範囲が約半分に縮小されるため。区間の長さが1になるまでの最大分割回数は 回である。最後の1回の確認を含め、
do-whileループは最大で10回実行される。 - Reason (English): The array size is , and the binary search reduces the search space by half in each iteration. The maximum number of divisions required to reduce the interval length to 1 is . Including the final evaluation, the
do-whileloop will execute at most 10 times.
(1-3)
- 設定例: , A[1]=2, A[2]=5, x=5
- 状況の説明(日本語): 変更後のコードでは、
leftとrightの更新がmidそのままになっている。例えば上記の設定で、left=1,right=2のとき、mid=(1+2)/2=1となる。このときA[1] < 5が真となりleft = mid = 1に更新されるが、値が変わらないため探索範囲が一切縮小されない。結果として無限ループに陥り、正しく結果が出力されなくなる。 - Situation Explanation (English): The modified code updates
leftandrightdirectly tomidinstead ofmid + 1andmid - 1. Using the example above, whenleft=1andright=2,midevaluates to 1. SinceA[1] < 5is true,leftis updated tomid = 1. The value remains unchanged, meaning the search interval is never reduced. Consequently, the program gets stuck in an infinite loop and fails to output the correct result.
【別解:配列内の隣接する値の間を探索する場合】
- 設定例: , A が
{2, 5, 8, 10, 15, 20, 25, 30}で、探索対象 の場合。 - 状況の説明(日本語): 目標値が存在せず、かつ
leftとrightが隣接するインデックスになった場合に不具合が顕著に現れる。例えば上記の設定で探索を進めると、最終的にleft=3,right=4となる。このとき、mid = (3+4)/2 = 3が計算される。A[3] = 8 < 9が真であるためleft = mid = 3に更新される。更新後もleftとrightの値が変わらないため、次回のループでも全く同じ計算が繰り返され、3 3 4が無限に出力される死循環に陥る。 - Situation Explanation (English): A critical failure occurs when the target value is not in the array and the search space narrows down to two adjacent indices. For instance, if with the original array, the search eventually reaches
left=3andright=4. The midpoint is calculated asmid = (3+4)/2 = 3. SinceA[3]=8 < 9is true,leftis updated tomid = 3. Becauseleftandrightdo not change, the next iteration will perform the exact same calculation, trapping the program in an infinite loop that repeatedly outputs3 3 4.
(2)
(2-1)
22行目の処理を実行する直前(全ての品物の評価が完了した時点)の配列 sack は以下のようになります。
sack[i][j] | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | |
| 0 | -1 | 20 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | |
| 0 | -1 | 20 | -1 | -1 | -1 | 30 | -1 | 50 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | |
| 0 | -1 | 20 | -1 | -1 | -1 | 30 | -1 | 50 | -1 | -1 | -1 | 45 | -1 | 65 | -1 | |
| 0 | -1 | 25 | -1 | 45 | -1 | 30 | -1 | 55 | -1 | 75 | -1 | 45 | -1 | 70 | -1 |
(2-2) プログラムで品物がナップサックに選ばれたかどうかを判定するための条件式です。
- (ア)
sack[i][index] == - (イ)
sack[i-1][index - size[i]] + value[i]
Summary
NOTE模块一:算法与动态规划 (0-1 背包问题) 💡 核心思想:大问题拆成小问题,查表避免重复计算。
- 贪心算法的失效: 在不可分割的 0-1 背包中,按性价比(价值/重量)贪心会留下无法利用的空间缝隙,导致拿不到全局最优解。
- 状态转移方程(核心公式): 面对第 件物品、剩余容量 时的最大价值:
- 表格初始化: 起点
DP[0][0] = 0,其余无法到达的状态初始化为-1(刷表法技巧,用于剪枝无效计算)。- 回溯找物品(破案法): 倒序遍历。如果
当前总价值 == 扣除该物品重量后的历史价值 + 该物品价值,说明该物品被选中。随后将背包当前重量减去该物品重量,继续往上追查。
大阪大学 情報科学研究科 情報工学 2014年8月実施 計算機システムとシステムプログラム
Author
Description
(1) 浮動小数点数 (floating point number) に関する以下の小問に答えよ. なお x を 2進数 (binary number) として解釈する場合, と表記する. 角括弧 (square bracket) をつけない場合は 10進数と解釈する.
(1-1) 0.625 を 2進数として表記せよ.
(1-2) IEEE 754 で規定された半精度浮動小数点数表現 (representation of half precision floating point number) において, 以下の値に最も近い値を表すビット列を解答用紙に書け. (a) (b) 5 (c) 0.125 (d) 0.1
(1-3) 2進数の浮動小数点数表現では, 0.1 を誤差なく有限桁で表現できない理由を述べよ.
資料: IEEE 754 半精度浮動小数点数表現 簡略版 (simplified version)
符号部 (sign) を 1 ビット, 指数部 (exponent) を 5 ビット, 仮数部 (significand) を 10 ビットで表現. 指数部が表す符号無し整数を , 仮数部のビット列を とすると, この形式が表す値は である. ただし, の時は上式をあてはめない非正規化数 (special value) として扱う. 本問題では非正規化数を扱わないため, その説明を省略する.

図:IEEE754半精度浮動小数点数表現
(2) メモリ管理に関する以下の小問に答えよ. 解答は全て解答欄の太線内に書くこと.
(2-1) 計算機 (computer) においては, 読み書きの速度 (reading and writing speed), 容量 (capacity) が異なる複数種類の記憶素子 (memory device) や記憶装置 (memory unit) を連携動作させて, 高速な読み書きと大容量の両立を図る, 記憶階層 (memory hierarchy) の考え方が導入されている. 以下に示す記憶素子または記憶装置 (ア)~(オ) を有する一般的な計算機において, これらを, 読み書きが速く, 容量の少ない順に整列し, 記号で答えよ. (ア) 主記憶装置 (main memory unit), (イ) 2次キャッシュメモリ (secondary cache memory), (ウ) 補助記憶装置 (auxiliary memory unit), (エ) レジスタ (register), (オ) 1次キャッシュメモリ (primary cache memory)
(2-2) 以下の文章の空欄 (a)~(i) に当てはまる最も適切な語句を, 下記の選択肢から選び, 記号で答えよ. 同じ選択肢を複数回用いても良い.
記憶階層の一部を成す仮想記憶 (virtual memory) では, 主記憶装置に置くべきプログラムやデータ (以下では “情報” と呼ぶ) の一部を [ (a) ] に置く. これにより, 主記憶装置の持つアドレス空間よりもより広いアドレス空間を有するように, ユーザープログラムに見せかける効果がある. 機械語命令 (machine instruction) の中に記載されるアドレスは [ (b) ], アドレスバスに送出されるアドレスは [ (c) ] と呼ばれる. 仮想記憶において, 必要な情報が主記憶装置上に無く, [ (d) ] 上にある場合, この情報は主記憶装置に移動される. この動作は [ (e) ] と呼ばれる. この時, 主記憶装置上に空き領域が無ければ, 使用される可能性が低い情報が主記憶装置から [ (f) ] へ移動され, 空き領域が作られる. この動作は [ (g) ] と呼ばれる. [ (e) ] や [ (g) ] が頻繁に発生すると, 計算機の処理性能が低下する. 仮想記憶の代表的な実現方法として, メモリを固定長 (fixed size) のブロック (block) で管理する [ (h) ] 方式と, 可変長 (variable size) のブロックで管理する [ (i) ] 方式とがある.
【選択肢】
| (ア) レジスタ (Register) | (イ) スワップイン (Swap in) | (ウ) フラグメンテーション (Fragmentation) |
| (エ) キャッシュメモリ (Cache memory) | (オ) 仮想アドレス (Virtual address) | (カ) セグメンテーション (Segmentation) |
| (キ) 補助記憶装置 (Auxiliary memory) | (ク) スワップアウト (Swap out) | (ケ) コンテクストスイッチ (Context switch) |
| (コ) ページング (Paging) | (サ) 実アドレス (Real address) | (シ) 直接マッピング (Direct mapping) |
(2-3) ページ枠 (page frame) 数が 4 のページング方式を採用した仮想記憶を考える. 以下に示すページ番号 (仮想アドレス空間におけるページの番号) の順にメモリ参照が起こった時, ページ置換アルゴリズム (page replacement algorithm) が LRU (least recently used) 法と FIFO (first-in-first-out) 法のそれぞれについて, 主記憶装置上に置かれる各ページ枠が保持するページの番号を答えよ. なお, 初期状態では全てのページ枠は空であるとし, 解答欄に示されている前半の例を参考に, 後半の太線内について解答すること. また, ページフォルト (page fault) が発生する場合はページ番号を◯で囲むこと. 参照ページ番号 : 0, 1, 2, 3, 3, 4, 2, 1, 0, 5, 1, 2
(2-4) ページング方式を採用した仮想記憶を有する計算機で, 主記憶装置に入り切らないサイズの整数型配列 (array) A[W*H] を扱うプログラムを考える. 以下に示す C 言語で書かれた二つのプログラム断片 (ア), (イ) の内, その処理時間が短くなる方を選び, 記号で答えよ. また, その理由を仮想記憶と関連付けて説明せよ. なお, コンパイラ (compiler) による最適化は行われず, キャッシュメモリを有しない計算機で実行するものとする.
(ア)
for (x=0; x<W; x++) { for (y=0; y<H; y++) { sum = sum + x * A[x+(y*W)]; }}(イ)
for (y=0; y<H; y++) { for (x=0; x<W; x++) { sum = sum + x * A[x+(y*W)]; }}Kai
(1)
(1-1)
- 解答:
- 詳細な計算過程 (Detailed Calculation):
10進数の小数部分を2倍していく「乗算推移法」を用います。
- 整数部 1 を取り出す(小数部は )
- 整数部 0 を取り出す(小数部は )
- 整数部 1 を取り出す(小数部は となり終了) 上から順に並べて、2進数表記は となります。 (別解: )
(1-2) 問題の定義に従い、フォーマットは以下の通りです:
- 符号部 (Sign): 1ビット(正なら0、負なら1)
- 指数部 (Exponent): 5ビット(バイアス値は 15)
- 仮数部 (Significand/Fraction): 10ビット(ケチ表現:先頭の
1.は省略) - 公式:
各問題の解答と詳細な変換過程:
-
(a)
- 正規化: すでに と正規化されています。
- 符号部: 正なので
0。 - 指数部: 実際の指数は 0。バイアスを足して 。15を2進数5ビットにすると 。
- 仮数部:
1.を除いた101の後ろに0を補って10ビットにする1010000000。 - 解答:
0 01111 1010000000
-
(b) 5
- 2進数化と正規化: 10進数の 5 は 。正規化すると 。
- 符号部: 正なので
0。 - 指数部: 実際の指数は 2。バイアスを足して 。17を2進数5ビットにすると 。
- 仮数部:
1.を除いた01の後ろに0を補って10ビットにする0100000000。 - 解答:
0 10001 0100000000
-
(c) 0.125
- 2進数化と正規化: 。2進数では 。正規化すると 。
- 符号部: 正なので
0。 - 指数部: 実際の指数は -3。バイアスを足して 。12を2進数5ビットにすると 。
- 仮数部:
1.を除いた0の後ろに0を補って10ビットにする0000000000。 - 解答:
0 01100 0000000000
-
(d) 0.1
- 2進数化: 10進数の 0.1 を2進数に変換すると、無限循環小数 になります。
- 正規化: となります。
- 符号部: 正なので
0。 - 指数部: 実際の指数は -4。バイアスを足して 。11を2進数5ビットにすると 。
- 仮数部の丸め処理 (Rounding): 小数点以下の仮数データは
1001100110 011...と続きます。 仮数部は10ビットしか格納できないため、11ビット目以降を処理します。 11ビット目は0であるため、切り捨て(丸め込みの際に繰り上げが発生しない)となります。 したがって仮数部 は1001100110になります。 - 解答:
0 01011 1001100110
(1-3)
- 理由(日本語): 10進数の0.1(分数で1/10)を2進数に変換しようとすると、分母に素因数5が含まれているため、2進数では無限循環小数()になる。浮動小数点数表現では仮数部に割り当てられたビット数(この設定では10ビット)が有限であるため、表現可能な桁を超えた部分は切り捨てや丸めが行われ、必然的に誤差が生じるからである。
- Reason (English): Converting the decimal number 0.1 (the fraction 1/10) into binary results in an infinitely repeating fraction () because the denominator contains the prime factor 5. Since floating-point representations have a finite number of bits allocated for the significand (10 bits in this specification), the bits extending beyond the representable precision are truncated or rounded, inevitably causing precision errors.
(2)
(2-1)
- 解答: (エ) レジスタ → (オ) 1次キャッシュメモリ → (イ) 2次キャッシュメモリ → (ア) 主記憶装置 → (ウ) 補助記憶装置
(2-2)
- (a) (キ) 補助記憶装置
- (b) (オ) 仮想アドレス
- (c) (サ) 実アドレス
- (d) (キ) 補助記憶装置
- (e) (イ) スワップイン (swap in)
- (f) (キ) 補助記憶装置
- (g) (ク) スワップアウト (swap out)
- (h) (コ) ページング (paging)
- (i) (カ) セグメンテーション (segmentation)
(2-3) ページフォルトが発生するタイミングを太字の〇で表記します。参照ページ番号: 0, 1, 2, 3, 3, 4, 2, 1, 0, 5, 1, 2。
LRU (Least Recently Used) 法
| 参照ページ | 0 | 1 | 2 | 3 | 3 | 4 | 2 | 1 | 0 | 5 | 1 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 枠1 | 〇0 | 0 | 0 | 0 | 0 | 〇4 | 4 | 4 | 4 | 〇5 | 5 | 5 |
| 枠2 | 〇1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
| 枠3 | 〇2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | ||
| 枠4 | 〇3 | 3 | 3 | 3 | 3 | 〇0 | 0 | 0 | 0 |
FIFO (First-In-First-Out) 法
| 参照ページ | 0 | 1 | 2 | 3 | 3 | 4 | 2 | 1 | 0 | 5 | 1 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 枠1 | 〇0 | 0 | 0 | 0 | 0 | 〇4 | 4 | 4 | 4 | 4 | 4 | 〇2 |
| 枠2 | 〇1 | 1 | 1 | 1 | 1 | 1 | 1 | 〇0 | 0 | 0 | 0 | |
| 枠3 | 〇2 | 2 | 2 | 2 | 2 | 2 | 2 | 〇5 | 5 | 5 | ||
| 枠4 | 〇3 | 3 | 3 | 3 | 3 | 3 | 3 | 〇1 | 1 |
(2-4)
- 処理時間が短くなる方: (イ)
- 理由(日本語): C言語のような二次元配列はメモリ上で「行優先(row-major order)」に連続して配置される。プログラム(イ)は内側のループで変数 を増やしてアクセスするため、メモリ上の連続したアドレスを順に読み進めることになり、「空間的局所性(Spatial locality)」が高くなる。これにより、同じページ内のデータを効率的に処理できる。一方、(ア)は内側のループで を増やすため、メモリアクセスが大きく飛び飛びになる。配列サイズが主記憶に収まらない場合、(ア)では参照するページが頻繁に切り替わり、膨大なページフォルト(スワップイン・スワップアウト)が発生する(スラッシング現象)ため、処理時間が著しく長くなってしまう。
- Reason (English): In languages like C, two-dimensional arrays are stored in contiguous memory locations using “row-major order”. Program (イ) increments the variable in its inner loop, meaning it accesses contiguous memory addresses sequentially, which results in high “spatial locality”. This allows data within the currently loaded page to be processed efficiently. On the other hand, program (ア) increments in its inner loop, causing memory access to jump across distant addresses. If the array size exceeds the main memory capacity, program (ア) will cause the referenced pages to switch constantly, triggering massive page faults (swapping in and out, known as thrashing), which significantly increases the processing time.
Summary
NOTE模块二:数据表示与浮点数 (IEEE 754) 💡 核心思想:二进制的科学记数法与精度妥协。
- 十进制转二进制(双轨制):
- 整数部分: 除 2 取余法,一直算到商为 0,余数倒序排列(从下往上读)。
- 小数部分: 乘 2 取整法,一直算到小数为 0,整数部分顺序排列(从上往下读)。
- 为什么 0.1 存不准? 0.1 乘以 2 会陷入无限循环(0.2 0.4 0.8 1.6 1.2 0.2…),由于计算机位数有限,必须截断,必然导致精度丢失。
- IEEE 754 组装三要素(以半精度为例):
- 符号位 (Sign): 正数 0,负数 1。
- 指数部 (Exponent): 实际指数 + 偏移量(Bias,题目中为 15)。
- 尾数部 (Significand): 将二进制写成 的科学记数法后,省略最前面的 1,只存小数点后面的 ,不够的位数补 0。
模块三:内存管理与操作系统 (OS) 💡 核心思想:用最便宜的硬件,造出最快、最大的内存假象。
- 存储器速度阶级(由快到慢): 寄存器 (Register) L1 缓存 L2 缓存 主存 (内存条) 辅助存储 (硬盘)。
- 虚拟内存与地址翻译:
- 程序使用的是虚拟地址,主板认的是实地址(物理地址)。
- 翻译官是 MMU (内存管理单元),它还负责检查越界权限。
- 页面调度机制:
- 缺页中断 (Page Fault): CPU 发现数据不在内存中。
- Swap in (换入): 把数据从硬盘搬进内存。
- Swap out (换出): 内存满了,把旧数据踢回硬盘。
- 页面置换算法:
- FIFO (先进先出): 踢走最早进来的,死板。
- LRU (最近最少使用): 踢走最久没被访问过的,符合时间局部性,聪明。
- 内存碎片与切分方式:
- 外部碎片 (Fragmentation): 内存有总空闲,但都是不连续的小块,大程序塞不进去。
- 分页 (Paging): 按固定大小切块(如 4KB),完美解决外部碎片问题。
- 分段 (Segmentation): 按程序逻辑(可变长度)切块,容易产生碎片。
模块四:计组底层机制与硬件 💡 核心思想:代码的写法必须迎合底层的物理构造。
- 空间局部性与性能雪崩 (Thrashing):
- C 语言二维数组在物理内存中是按行连续存放的。
- 内层循环遍历列 (): 地址连续,顺滑读取缓存,性能极佳。
- 内层循环遍历行 (): 地址大跨度跳跃,疯狂触发缺页中断,导致系统抖动 (Thrashing),卡死。
- 上下文切换 (Context Switch): CPU 在不同进程间切换时,保存旧状态、加载新状态的过程,非常耗费性能。
- 直接映射缓存 (Direct Mapping): 主存块只能放在缓存的固定槽位(主存号 % 槽位数)。优点是找得快,缺点是极易发生冲突(Cache Miss)。
- MAU 的双重含义:
- 内存访问单元(流水线里的搬运工)。
- 最小可寻址单元(通常是 1 Byte,即内存给数据打包的最小单位)。
使用建议: 你可以把这四个模块当成考纲。复习时遮住下面的解释,光看加粗的“核心思想”和“名词”,看自己能不能在脑子里或者草稿纸上复述出后面的逻辑。如果卡壳了,再回来查漏补缺!祝你复习顺利!
大阪大学 情報科学研究科 情報工学 2014年8月実施 離散構造
Author
Description
(1) 一階述語論理 (first-order predicate logic) に関する以下の各小問に答えよ. ただし, 一階述語論理式 (first-order predicate logic formula) の記述には以下の記号を用いる. はそれぞれ全称作用素 (universal quantifier), 存在作用素 (existential quantifier) であり, 全称作用素と存在作用素を併せて限定作用素 (quantifier) と呼ぶ. はそれぞれ等価 (equivalence), 含意 (implication), 論理積 (conjunction, and), 論理和 (disjunction, or), 否定 (negation, not) を表す論理演算子とする. 特に断りのない限り, で変数 (variable) 記号, で定数 (constant) 記号, で関数 (function) 記号, で述語 (predicate) 記号を表わす.
(1-1) 一階述語論理式の解釈 (interpretation) は の4項組で与えられる. ここで, は値集合, は各定数記号への の要素への割り当て, は各 引数関数記号への の要素の割り当て, は各 引数述語記号への の要素の割り当てである. ただし, 真 (true), 偽 (false) を表わす true, false の2値からなる集合を とする.
例えば, 一階述語論理式 に対して, 解釈 として
- を非負整数 (nonnegative integer) 全体からなる集合とし,
- として それぞれへ非負整数値 0, 1 を割り当て,
- として2引数関数記号 へ非負整数上の加算 を割り当て,
- として2引数述語関数 へ非負整数上の比較演算 を割り当てたとき (例えば の値は true である),
式 の解釈 のもとでの評価値は true となる.
以下の (1-1-1)~(1-1-3) の各論理式が, (a) 恒真 (valid), (b) 充足可能 (satisfiable) であるが恒真ではない, (c) 充足不能 (unsatisfiable) のいずれであるか判断し記号で答えよ. また, (b) である場合は, を非負整数 (nonnegative integer) 全体からなる集合として, 真にする解釈と偽にする解釈をそれぞれ一つずつ挙げよ. なお, 定数記号や関数記号が含まれないものは, それぞれ や は考えなくてよい.
(1-1-1)
(1-1-2)
(1-1-3)
(1-2) 以下で与えられる論理式 が恒真 (valid) であることを示すため, まず, の否定をスコーレム化 (Skolemization) し, 次いで, 導出原理 (resolution principle) を適用し, その式が充足不能であることを示す.
以下の (1-2-1)~(1-2-3) に答えよ. それぞれ導出過程も示すこと. なお, 解答には記号 を用いないこと.
(1-2-1) の冠頭標準形 (prenex normal form) を示せ. 冠頭標準形は, すべての限定作用素が先頭にある閉論理式 (closed formula) である. ただし, 閉論理式は連言標準形 (和積標準形 : conjunctive normal form) で示すこと.
(1-2-2) (1-2-1) で得た論理式のスコーレム連言標準形 (Skolem conjunctive normal form) を求めよ.
(1-2-3) (1-2-2) で得た論理式 をもとに, 導出原理を用いて が充足不能であることを示せ.
(2) 有限集合 (finite set) について, の要素数を と書く. のべき集合 (power set) を として, 上の2項関係 (binary relation) を
とする. 以下の各小問に答えよ.
(2-1) 任意の有限集合 について, の以下の各性質が成立するかどうか答えよ. 証明は与えなくてもよい.
(2-1-1) 反射性 (reflexivity)
(2-1-2) 対称性 (symmetry)
(2-1-3) 反対称性 (antisymmetry)
(2-2) の時, を求めよ.
(2-3) の時, を求めよ.
(2-4) の反射的推移的閉包 (reflexive transitive closure) を とする. の時, を求めよ.
Kai
(1) 一階述語論理 (First-order predicate logic)
(1-1) 論理式の判定と解釈 (Judgment and Interpretation of Logical Formulas)
(1-1-1)
-
解答 (Answer): (b) 充足可能であるが恒真ではない (Satisfiable but not valid).
-
真にする解釈 (True Interpretation): を非負整数全体とする。 として を割り当てる。 として述語 に「」を割り当てる。
中文解释: 论域为非负整数,, 表示 。前件 为真,且所有非负整数都 ,后件为真。真 真,命题成立。
English Proof: Let the domain be all non-negative integers. Assign constants . Let the predicate denote "". The premise is true, and since all non-negative integers are , the conclusion is also true. Thus, True True evaluates to True.
-
偽にする解釈 (False Interpretation): を非負整数全体とする。 として を割り当てる。 として述語 に「」を割り当てる。
中文解释: 论域为非负整数,, 表示 。前件 为真,但存在数字 不满足 ,故后件为假。真 假,命题不成立。
English Proof: Let be all non-negative integers. Assign . Let denote "". The premise is true. However, since the domain includes integers like 2, is false. Thus, True False evaluates to False.
(1-1-2)
-
解答 (Answer): (b) 充足可能であるが恒真ではない (Satisfiable but not valid).
-
真にする解釈 (True Interpretation): を非負整数全体とする。 に「」、 に「」を割り当てる。
中文解释: 论域为非负整数, 表示 。前件和后件都为真,命题成立。
English Proof: Let be all non-negative integers. Let denote "" and denote "". Everyone satisfies , making the premise true. The first part of the conclusion is true, making the entire disjunction true.
-
偽にする解釈 (False Interpretation): を非負整数全体とする。 に「 は偶数」、 に「 は奇数」を割り当てる。
中文解释: 为偶数, 为奇数。前件为真(非负整数要么是偶数要么是奇数),但后件为假(不是所有数都是偶数,也不是所有数都是奇数)。
English Proof: Let be all non-negative integers. Let denote ” is even” and denote ” is odd”. Every integer is either even or odd, making the premise true. However, it is false that all integers are even, and false that all integers are odd. Thus, True False evaluates to False.
(1-1-3)
-
解答 (Answer): (a) 恒真 (Valid).
(注:恒真命题无需给出具体的解释例子。这是量词的德·摩根定律 / Quantifier De Morgan’s Law)
(1-2) 導出原理による証明 (Proof by Resolution Principle)
已知 。
(1-2-1) 冠頭標準形 (Prenex Normal Form)
提取所有量词到公式最前方(注意重命名冲突的变量):
解答 (Answer):
(1-2-2) スコーレム連言標準形 (Skolem Conjunctive Normal Form)
使用 Skolem 函数 替换 ,使用 Skolem 常数 替换 ,并去掉全称量词 。
解答 (Answer): 得到以下四个子句 (Clauses):
(1-2-3) 導出過程 (Resolution Process)
-
ステップ 1: 子句 3 において と代入し、 を得る。
English: Substitute in Clause 3 to obtain .
-
ステップ 2: 子句 1 において と代入し、 を得る。これとステップ1の結果を導出(Resolve)し、 を得る。
English: Substitute in Clause 1 to get . Resolve this with to deduce .
-
ステップ 3: 子句 2 において と代入し、 を得る。
English: Substitute in Clause 2 to get .
-
ステップ 4: ステップ3の結果と を導出し、 を得る。
English: Resolve the result from Step 3 with to deduce .
-
ステップ 5: ステップ4の結果と を導出し、 を得る。
English: Resolve the result from Step 4 with to deduce .
-
ステップ 6: 最後に、 と子句 4 の を導出し、空節 (Empty Clause / ) を得る。矛盾が導かれたため、 は充足不能であり、 は恒真である。
English: Finally, resolve with Clause 4 () to generate the empty clause (). Since a contradiction is derived, is unsatisfiable, which proves is valid.
(2) 有限集合と関係 (Finite Sets and Relations)
关系 定义为覆盖关系(Covering relation),即集合 恰好由集合 增加一个元素构成( 且 )。
(2-1) 関係の性質 (Properties of the Relation)
-
(2-1-1) 反射性 (Reflexivity): 成立しない (False).
English Explanation: A set cannot have exactly one more element than itself (), so .
-
(2-1-2) 対称性 (Symmetry): 成立しない (False).
English Explanation: If set is strictly larger than (), then cannot be strictly larger than ().
-
(2-1-3) 反対称性 (Antisymmetry): 成立する (True).
English Explanation: The premise is logically impossible. Therefore, the implication is vacuously true.
(2-2) の時、
-
解答 (Answer): .
(Pairs: )
(2-3) の時、
- 解答 (Answer): .
(2-4) の時、 (反射的推移的閉包 / Reflexive Transitive Closure)
-
解答 (Answer): .
English Explanation: The reflexive transitive closure of this covering relation is simply the standard subset relation (). For each of the elements in , there are exactly 3 valid states: (1) neither in nor , (2) in but not in , (3) in both and . Thus, total pairs.
大阪大学 情報科学研究科 情報工学 2014年8月実施 計算理論
Author
Description
(1) 決定性有限オートマトン (deterministic finite automaton) は 5 項組 で与えられる. ここで, は, それぞれ, 状態 (state) の有限集合, 入力記号 (input symbol) の有限集合 (アルファベット (alphabet)), 状態遷移関数 (state transition function), 初期状態 (initial state) (), 受理状態 (accepting state) の集合 () である. また, が受理する言語 (認識する言語) を と表す. 有限オートマトンに関する以下の各小問に答えよ.
(1-1) 決定性有限オートマトン の状態 () が区別不能 (indistinguishable) とは, 任意の記号列 に対し, が成り立つことであり, と表す. ここで, は, 上の記号列すべての集合 (空系列を含む) を表す. また, 任意の状態 と任意の記号列 に対し, を以下のように定義する.
- のとき, ( は空系列を表す)
- () のとき, 状態集合 上の 2 項関係 (binary relation) が 上の同値関係 (equivalence relation) であることを証明せよ.
(1-2) 決定性有限オートマトン が右の状態遷移表 (state transition table) で与えられたとき, 状態集合 が同値関係 によって, どのような同値類 (equivalence class) に分割 (partition) されるか示せ.
| 0 | 1 | |
|---|---|---|
| a | e | d |
| b | f | d |
| c | d | f |
| d | i | g |
| e | g | i |
| f | g | h |
| g | c | b |
| h | a | c |
| i | b | c |
(1-3) となる決定性有限オートマトン の中で, 状態数最小のものを とする. を状態遷移図 (state transition diagram) で示せ. 状態遷移図では, 初期状態, 受理状態それぞれが分かるように明示すること.
(1-4) となる決定性有限オートマトン の中で, (1-3) で示した の状態数が最小であることを証明せよ.
(2) 文脈自由言語 (context-free language) に対して次の反復補題 (Pumping Lemma) が知られている.
反復補題 (Pumping Lemma) 文脈自由言語 に対し, ある非負整数 が存在し, に属する 以上の長さの任意の文字列 に対して, ある部分文字列分解 が存在して, 以下が成り立つ. (i) (ii) ただし は空系列 (iii) なる任意の に対して
以下の各小問に答えよ. 解答用紙には ⓐ~ⓠ とそれらに対応する解を列挙すること.
(2-1) 文脈自由言語 に対して反復補題が成り立つことを確かめたい. 以下の文章の空白を埋め, に対し反復補題が成り立つことを示せ. 空白 ⓐ~ⓘ にはそれぞれ, 指定された条件を満たす要素が入る. 例えば ⓐ 非負整数 に対応する要素は非負整数である 1, 40, 100 等である.
として ⓐ 非負整数 を選ぶ. ただし, なる任意の文 に対して なる部分文字列分解として , , , , を選ぶ. 明らかに であり, , および なる任意の に対して が成り立つ. なお を生成する文脈自由文法 (context-free grammar) は であり (表記の意味は下記参考を参照), ここで である.
(2-2) 言語 は文脈自由言語ではないことを反復補題を用いて証明したい. 以下の証明の空白を埋めよ. 空白 ⓙ~ⓠ にはそれぞれ, (2-1) と同様指定された条件を満たす要素が入る. ただし, ⓜ, ⓝ については終端記号の数量的性質に言及すること. また, ⓛ については使用した反復補題の条件を明示すること.
証明 背理法 (帰謬法; proof by contradiction) で証明する. 言語 が文脈自由文法であると仮定する. このとき仮定より に対して反復補題が成り立つ. 以下, 反復補題が成り立たないことを示し, 矛盾を導く. として という非負整数値を考える. 以降の議論は をパラメータとして考えているので, 任意の値 に与えても成立する. の定義より を超える長さの文 が存在する. 具体的に を考える. を に分割する際, すべての考え得る分割パターンに対して, 上記の矛盾を説明する必要がある.
場合 1: が終端記号 を含まない場合: このとき は ⓙ 記号列 を部分文字列として含む. また反復補題の条件 (ii) が成り立つとすると, について以下が成り立つ. ⓚ に関する条件 したがって とおいて に含まれるはずの文 を考えたとき, は に属さない. なぜならば ⓛ 証明 すなわち反復補題の条件 (iii) を満たすことはできず, 反復補題を満たさない.
場合 2: が ⓜ 終端記号に関する条件 場合: 対象の対称性 (symmetry) より場合 1 と同様である.
場合 3: その他の場合, すなわち が ⓝ 終端記号に関する条件 場合: 場合 3 はそもそも起こりえない. なぜならば ⓞ 証明
いずれの場合であっても反復補題を満たさず, よって, 矛盾を生じる. 以上の議論は仮定していた命題「言語 は文脈自由文法である」が偽であることを示している. Q.E.D.
参考 文脈自由文法 (context-free grammar) は 4 項組 で与えられる. ここで は, それぞれ, 非終端記号 (non-terminal symbol) 集合, 終端記号 (terminal symbol) 集合, 生成規則 (production rule) 集合, 開始記号 (start symbol) である.
Kai
(1-1) が同値関係であることの証明
状態 上の2項関係 が同値関係(Equivalence Relation)であるためには、反射性、対称性、推移性の3つを満たす必要がある。
- 反射性 (Reflexivity): 任意の と任意の記号列 に対して、論理的に は常に成り立つ。したがって、定義より である。
- 対称性 (Symmetry): と仮定する。定義より、任意の に対して が成り立つ。論理同値の対称性により、左右を入れ替えて も成り立つ。したがって、 である。
- 推移性 (Transitivity): かつ と仮定する。定義より、任意の に対し 、および が成り立つ。論理同値の推移性により、これらから が導かれる。したがって、 である。 以上より、 は 上の同値関係である。(証明終)
[English Translation for (1-1)] To prove that is an equivalence relation on , it must satisfy reflexivity, symmetry, and transitivity.
- Reflexivity: For any and any string , the statement is a logical tautology. Thus, .
- Symmetry: Assume . By definition, . By the symmetry of logical equivalence, holds. Thus, .
- Transitivity: Assume and . By definition, and . By the transitivity of logical equivalence, holds. Thus, . Therefore, is an equivalence relation. (Q.E.D.)
(1-2) 同値類による分割 (Equivalence Class Partitioning)
Myhill-Nerodeの定理に基づく等価状態の分割アルゴリズム(0-区別可能、1-区別可能…)を適用した結果、状態集合 の同値類は以下の6つに分割される。
【解答】:
(1-3) 最小化オートマトン の状態遷移図
(1-2) で求めた6つの同値類を新たな状態とする。 初期状態は元の初期状態 を含む であり、受理状態も元の受理状態 を含む のみである。状態遷移は以下の表(および図)の通りに構成される。
| 現在の状態 | 入力 0 による遷移先 | 入力 1 による遷移先 | 備考 (図示要件) |
|---|---|---|---|
| 初期状態 () 兼 受理状態 (◎) | |||
| 通常状態 (○) | |||
| 通常状態 (○) | |||
| 通常状態 (○) | |||
| 通常状態 (○) | |||
| 通常状態 (○) |
(※実際の解答用紙には、上記の表に基づいた状態遷移図(有向グラフ)を描画し、 に開始矢印と二重丸を明記すること。)
(1-4) の状態数が最小であることの証明
の各状態は、元のオートマトン の状態集合を同値関係 で分割した各同値類であるため、 内の任意の異なる2つの状態は互いに**区別可能(Distinguishable)**である。 もし を満たし、かつ よりも状態数が少ないDFA が存在すると仮定する。このとき、鳩の巣原理(Pigeonhole Principle)により、 で区別可能な少なくとも2つの状態が、 においては同一の状態に割り当てられなければならない。 しかし、区別可能な状態を統合すると、受理されるべき文字列と拒否されるべき文字列の判定に矛盾が生じ、 となるため前提に反する。ゆえに、 は最小状態DFAである。(証明終)
[English Translation for (1-4)] By construction, any two distinct states in correspond to different equivalence classes and are therefore distinguishable. Assume for the sake of contradiction that there exists a DFA with fewer states than such that . According to the Pigeonhole Principle, at least two distinguishable states from must be merged into a single state in . However, merging distinguishable states inevitably causes the automaton to incorrectly accept or reject certain strings, resulting in , which contradicts the premise. Thus, has the minimal number of states. (Q.E.D.)
(2-1) が反復補題を満たすことの証明 (穴埋め)
- [ ⓐ ]: 12 (※注: 12以上の任意の偶数でも論理的には成立するが、後述のK≧6を確実に満たすための最小定数として12が最適)
- [ ⓑ ]: 6
- [ ⓒ ]:
- [ ⓓ ]: (空記号列)
- [ ⓔ ]:
- [ ⓕ ]:
- [ ⓖ ]:
- [ ⓗ ]: (または )
- [ ⓘ ]:
(2-2) が文脈自由言語ではないことの証明 (打假プロセス)
文脈自由言語であると仮定し、定数 に対して () を選ぶ。 なる分割()を考えると、以下の3つの場合に分けられ、いずれも矛盾が生じる。
- 場合 1: が終端記号 を含まない場合
- (v, x に関する条件): より、少なくとも1つの または を含む。
- (① 証明): とすると、 と が取り除かれることで または の数が減少するが、 の数は のまま変わらないため、 の数が一致しなくなり、 となるから。
- 場合 2: が [終端記号に関する条件] 場合
- (終端記号に関する条件): 終端記号 を含まない
- 場合 3: が [終端記号に関する条件] 場合
- (終端記号に関する条件): 終端記号 と の両方を含む
- (◎ 証明): の最後の文字と の最初の文字の間には 個の が存在し、 である。したがって、 と の両方を含む部分文字列の長さは少なくとも となり、反復補題の絶対条件である (i) に完全に矛盾するから。
[English Translation for (2-2) Proofs]
- Case 1 (Proof ①): If , the substrings and are pumped down (removed). This strictly decreases the number of ‘s or ‘s, while the number of ‘s remains exactly . Consequently, the quantities of and are no longer equal, meaning .
- Case 3 (Proof ◎): There are exactly instances of '' between the last '' and the first ''. Since , any substring that contains both an '' and a '' must have a length of at least . This directly contradicts the fundamental condition (i) of the pumping lemma, which requires . Thus, this case is physically impossible.
大阪大学 情報科学研究科 情報工学 2014年8月実施 ネットワーク
Author
Description
(1) ビット誤り率 (bit error rate) (ただし ) の 2 元対称通信路 (binary symmetric channel) における、2 元符号 を用いた通信を考える。 の各符号語は等確率で送信されるとする。
(1-1) 受信語における誤りの個数が 3 ビット、4 ビット、5 ビットになる確率を、それぞれ を用いて表せ。
(1-2) 最尤復号法 (maximum likelihood decoding) を用いて(すなわち、最大尤度基準に基づいて)復号した場合の、誤って復号する確率を、 を用いて表せ。
(1-3) 限界距離復号法 (bounded distance decoding) を用いて復号することを考える。 (1-3-1) 限界距離 の最大値を求めよ。 (1-3-2) とする。誤って復号する確率を 以下に抑えつつ、正しく復号する確率を最大にするような限界距離 を求めよ。また、そのときの、正しく復号する確率を求めよ。計算過程も示すこと。
(2) IP (Internet Protocol) の経路制御 (routing) に関する以下の各小問に答えよ。
(2-1) 経路制御プロトコルに関する以下の説明文の空欄 に当てはまる最も適切な語句を選択肢から選び、その番号を答えよ。なお、異なる空欄には異なる語句が当てはまる。
IP アドレス (IP address) が割り当てられたホスト (host) がルーター (router) を介して接続される IP ネットワークにおいて、ルーターが経路情報 (routing information) を管理する手法として、 と がある。 は、経路情報をネットワークの各ルーターに手動で設定する手法である。これに対し、 は、経路制御プロトコル (routing protocol) を用いてルーターが経路情報を交換および収集し、経路を決定する手法であり、ホストやルーター等の機器の接続状況に変更が生じた際に経路情報が自動で更新される。インターネットの AS (Autonomous System) 内で用いられる経路制御プロトコルには、 型プロトコルである OSPF (Open Shortest Path First) や、 型プロトコルである RIP (Routing Information Protocol) がある。 型プロトコルは、 型プロトコルと比較して、 などの利点がある。一方、AS 間で用いられる経路制御プロトコルとして がある。
選択肢
| (a) IS-IS protocol | (b) コスト最小 | (c) 距離ベクトル |
| (d) ブロードキャスト | (e) RSVP | (f) BGP |
| (g) IPIP | (h) スタティックルーティング | (i) 最適ルーティング |
| (j) リンクステート | (k) 交換情報量が少ない | (l) 経路収束時間が短い |
| (m) ダイナミック | (n) 経路計算量が少ない | (o) HTTP |
(2-2) 図 1 に示す IP ネットワークの構成を考える(図省略)。図には、ホストの IP アドレスをドットアドレス表記で示している。また、# で示した番号はルーターのインターフェース番号である。クラスフルルーティング (classful routing) により経路情報を管理する場合に、ルーター A が保持する経路表 (routing table) を表 1 にならって示せ。経路表のエントリー数が最小となるように記載すること。ただし、ホスト間の経路は経由するルーター数が最小となるよう設定されるものとする。また、デフォルトゲートウェイは考えないものとし、図に記載のない IP アドレスに対する経路エントリーは保持しないものとする。必要に応じて、クラスフルルーティング (classful routing) とクラスレスルーティング (classless routing) に関する以下の説明文を参考にすること。
IPv4 アドレスの管理に関する説明
IPv4 における IP アドレス長は 32 ビットであるため、理論上約 40 億の機器に IP アドレスを割り当てることができるが、IP アドレス毎に経路情報を保持すると経路情報が肥大化する。 そのため、IP アドレスをネットワークアドレス (network address) 部とホストアドレス (host address) 部に分割し、ネットワークアドレス部に対する経路情報を管理する方法が採られている。 IP の経路制御プロトコルが導入された当初は、ネットワークアドレス部の長さを固定とするアドレスクラス (address class) に基づいた経路制御プロトコルが用いられていた。 例えば IP アドレスの最上位から 3 ビットを 110 とするアドレスクラス C の IP アドレスは、上位 24 ビットがネットワークアドレス部、下位 8 ビットはホストアドレス部と定められている。 同様に、最上位ビットを 0 とするアドレスクラス A は上位 8 ビットがネットワークアドレス部であり、最上位ビットから 2 ビットを 10 とするアドレスクラス B は上位 16 ビットがネットワークアドレス部となる。 このようなアドレス規則にもとづく経路制御をクラスフルルーティングと呼ぶ。 最近ではアドレスクラスを撤廃し、サブネットマスク (subnet mask) を用いて指定される任意のネットワークアドレス部の長さにもとづいて経路を制御するクラスレスルーティングが導入されている。

図1
表 1:経路表 (Routing Table)
| エントリー番号 | 宛先 IP アドレス | サブネットマスク | 出力先のインターフェース |
|---|---|---|---|
| 1 | 172.16.0.0 | 255.255.0.0 | #1 |
| 2 | |||
| 3 | |||
| 4 | |||
| 5 |
(2-3) 図 1 の IP ネットワークのルーター B, ルーター C に新たにインターフェース #5 をそれぞれ追加し、ルーター B のインターフェース #5 に 台のホストを、ルーター C のインターフェース #5 に 台のホストを新たに接続することを考える。 台のホストに対して 192.130. で始まるアドレスクラス C のネットワークアドレスを新たに 個割り当てた。また、 台のホストに対しては、192.1. で始まるアドレスクラス C のネットワークアドレスを新たに 個割り当てた。この時、1) ホスト毎に経路表のエントリーを用意する場合、2) クラスフルルーティングを行う場合、3) クラスレスルーティングを行う場合のそれぞれについて、ルーター A が保持するホストに対する経路表の最小エントリー数を求めよ。必要に応じて を用いること。(2-2) と同様に、ホスト間の経路は経由するルーター数が最小となるよう設定されるものとする。また、デフォルトゲートウェイは考えないものとする。
(2-4) 図 1 のルーター C のインターフェース #1 とインターフェース #2 に対し、IP アドレス 192.168.130.1 宛のパケットが同時刻に到着する場合を考える。インターフェース #1 に到着するパケット X と、インターフェース #2 に到着するパケット Y の二つのパケットが同時刻に到着してから出力先のインターフェースから送り出されるまでに、ルーターが到着パケットに対して行う処理を簡潔に説明せよ。ただし、「経路表」、「バッファ」(buffer)、「競合回避」(contention resolution) の語句を用いて説明すること。
Kai
(1-1) 受信語における誤りの個数と確率
2元対称通信路(BSC)において、5ビット中それぞれ3ビット、4ビット、5ビットの誤りが生じる確率は、二項分布に従い以下のように表される。
- 3ビット誤る確率:
- 4ビット誤る確率:
- 5ビット誤る確率:
(1-2) 最尤復号法 (MLD) における誤り確率
最尤復号法(最大尤度基準)を用いる場合、受信語が多数決により判定されるため、5ビット中3ビット以上の誤りが発生した場合に誤って復号される。したがって、誤って復号する確率は (1-1) の和となる。 【解答】:
(1-3) 限界距離復号法 (BDD) の適用
(1-3-1) 限界距離 の最大値
2つの符号語 間のハミング距離は5である。限界距離を としたとき、異なる符号語の復号領域が重ならないための条件は である。 は整数であるため、最大値は2となる。 【解答】:
(1-3-2) 条件を満たす最適限界距離 と正しい復号確率
のとき、誤り確率を 以下に抑える を求める。
- の場合: 誤って復号する確率は3ビット以上の誤りが発生する確率に等しい。 であり、条件を満たさない。
- の場合: 誤って復号する確率は、ビット以上の誤りが発生する確率である。 となり、条件を満たす。
- 正しく復号する確率 (計算過程): のとき、正しく復号されるのは誤りが0ビットまたは1ビットの場合である。
【解答】: 限界距離: 正しく復号する確率: (または分数で )
(2-1) 経路制御プロトコルに関する空欄補充
- (あ): (h) スタティックルーティング (static routing)
- (い): (m) ダイナミックルーティング (dynamic routing)
- (う): (j) リンクステート (link state)
- (え): (c) 距離ベクトル (distance vector)
- (お): (l) 接続状況に変更が生じた際の経路収束時間が短い
- (か): (f) BGP (Border Gateway Protocol)
(2-2) ルーターAが保持する経路表 (Routing Table)
クラスフルルーティングの規則に従い、各ホストのIPアドレスからネットワークアドレス部を抽出する。経路表のエントリー数を最小化し、経由ルーター数が最小となる経路を選択すると、経路表は以下のようになる。
| 宛先ネットワークアドレス (Destination Network) | 出力インターフェース (Output Interface) |
|---|---|
| 10.0.0.0 | #3 |
| 172.16.0.0 | #1 |
| 192.128.128.0 | #2 |
| 192.129.129.0 | #2 |
| 192.168.130.0 | #3 |
(2-3) 経路方式に応じた経路表の最小エントリー数
ルーターAが保持する、新たに接続されたホスト群(B側に 台 / ネットワーク、C側に 台 / ネットワーク)に対する経路表の追加最小エントリー数は以下の通りである。
- ホスト毎に経路表のエントリーを用意する場合 (Host Routing): 【解答】:
- クラスフルルーティングを行う場合 (Classful Routing): 【解答】:
- クラスレスルーティングを行う場合 (Classless Routing / CIDR): 出力先(インターフェース #2 と #3)ごとに1つのスーパーネットに集約可能であるため。 【解答】:
(2-4) ルーター内部のパケット処理と競合回避
【解答】 ルーターCは、到着したパケットXとYの宛先IPアドレスを確認し、経路表を参照して両パケットの出力先が同一のインターフェース(#3)であると判断する。同時に出力するとパケットが衝突するため、ルーターはこの競合回避を行う目的で、パケットを一時的に内部のバッファ(メモリ)に蓄積して順番待ちのキューを形成し、一つずつ出力インターフェースから送り出す処理を行う。
[English Translation for (2-4)] Router C examines the destination IP addresses of the arriving packets X and Y, and references its routing table (経路表) to determine that both packets are destined for the exact same output interface. Since simultaneous transmission would cause a collision, the router performs contention resolution (競合回避) by temporarily storing the packets in its internal buffer (バッファ) to form a queue, and then sequentially transmits them out of the output interface one by one.
NOTE模块一:路由的基础分类(绝对反义词)
- (h) スタティックルーティング (Static Routing / 静态路由)
- 核心考点: 手動設定 (Manual configuration)。网络管理员手动在路由器上敲代码配置的固定路线。
- 优缺点: 优点是安全、不占用网络带宽资源(因为路由器之间不发报文);缺点是死板,一旦网断了,它不会自己绕路,必须人工排查。通常用于小型网络或末端网络(Stub Network)。
- (m) ダイナミックルーティング (Dynamic Routing / 动态路由)
- 核心考点: 自動更新 (Automatic update)。路由器之间通过特定的“语言(路由协议)”互相交流,自动学习网络拓扑并计算路线。
- 优缺点: 优点是极其灵活,断网瞬间自动计算备用路线;缺点是消耗 CPU、内存,且协议报文会占用一定带宽。
模块二:动态路由的“两大核心算法”(必考对比)
- (c) 距離ベクトル (Distance Vector / 距离矢量算法)
- 代表协议: RIP (Routing Information Protocol)。
- 核心原理: “盲人摸象”。只知道“距离(跳数 Hop Count)”和“方向(下一跳给谁)”。路由器只把自己的路由表发给相邻的兄弟。
- 致命弱点: 容易产生“路由环路(Routing Loop / 计数到无穷大)”,且收敛极慢。
- (j) リンクステート (Link State / 链路状态算法)
- 代表协议: OSPF (Open Shortest Path First)。
- 核心原理: “上帝视角”。每个路由器都向全网广播自己的连接状态(LSA),所有路由器在内存里画出一模一样的全网拓扑地图(LSDB),然后各自用 Dijkstra 算法算出最短路径。
模块三:算法特征描述(专治优缺点辨析题)
这三个选项通常作为评价距离矢量(RIP)和链路状态(OSPF)的对比项出现:
- (l) 接続状況に変更が生じた際の経路収束時間が短い (网络状态改变时,路由收敛时间短)
- 归属: 这是 OSPF(链路状态算法) 的最大优点。
- 解析: “収束 (Convergence)”是指网络发生故障后,所有路由器重新达成共识的时间。OSPF 因为有全局地图,算得快,收敛极快。
- (n) 経路計算量が少ない (路由计算量少)
- 归属: 这是 RIP(距离矢量算法) 的优点。
- 解析: RIP 只需要做简单的加法(跳数 + 1),不需要跑复杂的图论算法,对路由器的 CPU 和内存要求极低。
- (k) プロトコルで交換される情報量が少ない (协议交换的信息量少)
- 归属: 这通常也被视为 RIP 在稳定状态下相对于 OSPF 初始状态的特征(但现代 OSPF 稳定后增量更新其实也很少,考试中主要作为 RIP 的轻量级特征或干扰项)。
模块四:具体路由协议与相关概念
- (f) BGP (Border Gateway Protocol / 边界网关协议)
- 核心考点: AS間 (Inter-AS)。它是互联网的基石,是目前唯一广泛使用的 EGP(外部网关协议)。它基于“路径矢量 (Path Vector)”,不追求物理距离最短,而是基于**商业策略(Policy-based routing)**来决定怎么走。
- (a) IS-IS protocol (Intermediate System to Intermediate System)
- 核心考点: 和 OSPF 极度相似的链路状态 (Link State) 协议。
- 区别: OSPF 必须绑定在 IP 协议上运行,而 IS-IS 运行在数据链路层之上(OSI 网络层),不依赖 IP。常用于大型 ISP(互联网服务提供商)的骨干网。
- (b) コスト最小 (Cost-minimized / 最小代价)
- 核心考点: OSPF 计算最短路径时使用的度量值(Metric)叫做“Cost(开销)”。通常带宽越大的链路,Cost 越小(Cost = 参考带宽 / 实际带宽)。算法会选择累加 Cost 最小的路径。
- (i) 最適ルーティング (Optimal Routing / 最优路由)
- 解析: 这是一个泛指的学术概念,指在数学模型上找到的绝对最优解。在实际工程中,协议往往只能做到“次优”或“策略最优”,常作为干扰项出现。
模块五:其他网络技术与干扰项(非路由核心)
- (d) ブロードキャスト (Broadcast / 广播)
- 解析: 将数据包发送给同一子网内的所有主机(目标 IP 通常全为 1,MAC 地址全为 F)。ARP 协议、DHCP 协议都强烈依赖广播。
- (e) RSVP (Resource reSerVation Protocol / 资源预留协议)
- 解析: 属于 QoS(服务质量)领域的协议。用于在网络上“占座”。比如开跨国视频会议前,先用 RSVP 在沿途路由器上强行预留出 10Mbps 的带宽,保证视频绝对不卡。
- (g) IPIP (IP-within-IP encapsulation protocol / IP封装协议)
- 解析: 这是一种隧道技术 (Tunneling)。把一个完整的 IP 数据包,硬塞进另一个 IP 数据包的负载里(俄罗斯套娃)。常用于 VPN、移动 IP 或 IPv6 过渡技术中。
- (o) HTTP (Hyper Text Transfer Protocol / 超文本传输协议)
- 解析: 纯纯的送分干扰项。这是应用层(Application Layer)看网页用的协议,跟网络层(Network Layer)的路由器如何指路毫无关系。
复习建议: 在脑海中建立这个层级树: 路由 静态 (h) vs 动态 (m) 动态 IGP (AS内部) vs EGP (AS之间: f BGP) IGP 距离矢量 (c RIP, 特点 k, n) vs 链路状态 (j OSPF, a IS-IS, 特点 l, 算 b Cost)