平成18年度 春期 ソフトウェア開発技術者試験 問1−20 解答編




このページは

ソフ開

(ソフトウェア開発技術者試験)

解答と解説のページです。

問題だけで勉強したい方は目次へ戻ってください



問1 次の浮動小数点表示法がある。小数点は仮数の左にあり、指数は64の“下駄履き表現”であって、値は(−1)s×0.f×2e-64である。二つの16進数45BF0000と41300000を、この浮動小数点表示法で表現された値として加算した結果はどれか。

画像(問1)を表示できません
41EF0000
45C20000
45EF0000
86EF0000
解答
解説 まず、二つの数値を2進数に展開し、符号、指数、仮数を確認します。説明上2つの数値の前者をA、後者をBとします。

A=45BF0000 = 0100 0101 1011 1111 0000 0000 0000 0000(符号=0=正、指数=100 0101=69、仮数=1011 1111 0000 0000 0000 0000)
B=41300000 = 0100 0001 0011 0000 0000 0000 0000 0000(符号=0=正、指数=100 0001=65、仮数=0011 0000 0000 0000 0000 0000)

次に、指数部を69であわせるます。Bの指数を4増やして同じ値にするためには、仮数を4ビット右にシフトします。

つまり、B’=符号=0、指数=69、仮数=0000 0011 0000 0000 0000 0000

最後に、AとB’の仮数部を足します。

 1011 1111 0000 0000 0000 0000
+0000 0011 0000 0000 0000 0000
-------------------------------
 1100 0010 0000 0000 0000 0000

符号部と指数部はあわせたものを使うので、
0100 0101 1100 0010 0000 0000 0000 0000=45C20000となります。

問2 負の整数を表現する代表的な方法として、次の3種類がある。

   a 2の補数による表現
   b 1の補数による表現
   c 絶対値に符号を付けた表現(左端ビットが0の場合は正、1の場合は負)

4ビットのパターン1101をa〜cの方法で表現したものと解釈したとき、値が小さい順になるように三つの方法を並べたものはどれか。

a,b,c
a,c,b
b,c,a
c,a,b
解答
解説 順番に評価していきます。

まず、補数とは、A+B=0となるようなAとBの関係です。つまり、2回補数をとると元の値にもどります。

a:1101のビット反転0010なので、−2
b:1101のビット反転をして1を加えると0011なので、−3
c:1は負数で101は5なので、−5

よって、c、b、aとなります。

問3 0以上255以下の整数nに対して、

画像(問3)を表示できません


と定義する。next(n)と恒等的に等しい式はどれか。ここでx AND y及びx OR yは、それぞれxとyを2進数表現にして各けたごとの論理積及び論理和をとったものとする。
(n+1)AND255
(n+1)AND256
(n+1)OR255
(n+1)OR256
解答
解説 定義式をみると、0なら1、1なら2と1ずつ足していって255だったら0にもどるという。いわゆる256進カウンタであることがわかります。これを2進数で考えます。255とは11111111です。ここで1を加えると0になるので100000000が0になる処理を考えると選択肢アが正解だとわかります。

問4 全体集合S内に部分集合AとBがあるとき、に等しいものはどれか。ここで、A∪BはAとBの和集合、A∩BはAとBの積集合、はSにおけるAの捕集合、A−BはAからBを除いた差集合を表す。
)−(
(S−A)∪(S−B)
−B
S−(A∩B)
解答
解説 ベン図や真理値表を用いても良いのですが、ここでは変数の簡約をつかって解を求めます。

問題の式:A∪B
選択肢ア:()−()=(A∩B)−(A∩B)=A∩B
選択肢イ:(S−A)∪(S−B)=A∩B
選択肢ウ:−B=A∪B
選択肢エ:S−(A∩B)=A∩B

よって、選択肢ウが問題の式と同じとなります。

問5 x、y、zを論理変数、Tを真、Fを偽とするとき、次の真理値表で示される関数f(x、y、z)を表す論理式はどれか。ここで、∧は論理積、∨は論理和、はAの否定を表す。

画像(問5)を表示できません
(x∧y)∨(y∧z)
(x∧y)∨(∧z)
(x∧y)∨(
(x∧)∨(
解答
解説 まず、真となる出力の入力を書き出します。

@x∧y∧z
Ax∧y∧
Bx∧∧z
C∧z

つぎに、各式をまとめていきます。

@とAをまとめてx∧y
BとCをまとめて∧z

これらの∨なので、(x∧y)∨(∧z)となります。

問6 ハミング符号とは、データに冗長ビットを付加して、1ビットの誤りを訂正できるようにしたものである。ここで、X1234の4ビットからなるデータに、3ビットの冗長ビットP321を付加したハミング符号X1233421を考える。

画像(問6)を表示できません

このハミング符号1110011には1ビットの誤りが存在する。誤りビットを訂正した正しいハミング符号はどれか。

0110011
1010011
1100011
1110111
解答
解説 それぞれのパリティの式に代入しながら確認します。なお、排他的論理和はEORと表記します。

1 EOR 1 EOR 0 EOR 1 = 1
1 EOR 1 EOR 0 EOR 1 = 1
1 EOR 1 EOR 1 EOR 0 = 1

誤りは1ビットしかなく、かつ1ビット確実にあることが保障されているので、すべての式に影響があるX1が誤りであることがわかります。

問7 a,b,c,dの4文字からなるメッセージを符号化してビット列にする方法として表のア〜エの4通りを考えた。この表はa,b,c,dの各1文字を符号化するときのビット列を表している。メッセージ中のa,b,c,dの出現頻度は、それぞれ50%、30%、10%、10%であることが分かっている。符号化されたビット列から元のメッセージが一意に復号可能であって、ビット列の平均長が最も短くなるものはどれか。
画像(問7ans)を表示できません
解答
解説 それぞれの選択肢を評価していきます。

選択肢ア:00が現れた時に、aaなのかcなのか判別できません。一意に復号不能なので不適切です。
選択肢イ:0110が現れた時に、adaなのかbcなのか判別できません。一意に復号不能なので不適切です。
選択肢ウ:一意に復号可能なので、平均ビット長を計算します。0.5×1+0.3×2+0.1×3+0.1×3=0.5+0.6+0.3+0.3=1.7
選択肢エ:一意に復号可能なので、平均ビット長を計算します。すべて2ビットなので、平均ビット長は2

よって、選択肢ウが最も平均ビット長を短くできる符号化といえます。
なお、このように使用頻度の高いものに短いビット列を割り当てる符号化をハフマン符号といいます。

問8 次に示す記述は、BNFで表現されたあるプログラム言語の構文の一部である。<パラメタ指定>として、正しいものはどれか。

<パラメタ指定>::=<パラメタ>|(<パラメタ指定>,<パラメタ>)
<パラメタ>::=<英字>|<パラメタ><英字>
<英字>::=a|b|c|d|e|f|g|h|i
((abc,def))
((abc,def),ghi)
(abc)
(abc,(def))
解答
解説 それぞれの選択肢を順次評価していってもいいのですが、ここでは論理的な方法で解を求めます。

括弧を作ることができるのは、(<パラメタ指定>,<パラメタ>)の部分だけです。この部分に注目すると、『( 』と『,』と『 )』がセットで現れることがわかります。このことから選択肢アと選択肢ウが生成できないことがわかります。

つぎに、『,』の後ろが<パラメタ指定>ではなく、<パラメタ>なので、英字の繰返ししか生成できません。つまり、『,』の後ろに『( 』がくることはありません。よって、選択肢エが間違いであることがわかります。

問9 データ構造に関する記述の内、B木の説明として適切なものはどれか。
ある特定のアルゴリズムに従って、レコードのキー値から物理的な格納アドレスを求めてレコードを格納する。
索引部の各ノードのキー値を中心にして、小さい側のレコード数と大きい側のレコード数の比率が、ある範囲内に収まるように動的に再配置しながら格納する。
レコードの物理的配置とは独立に、論理的にレコードをつなぐポインタによって、レコードを関係付けて格納する。
レコードをキー値の昇順にしてトラックなどのアクセス単位(ページ)ごとに格納し、各ページ内の最大キー値とそのページの番地をもつ索引を作る。
解答
解説 それぞれの選択肢のデータ構造を以下にまとめます。

選択肢ア:ハッシュ
選択肢イ:B木
選択肢ウ:リスト
選択肢エ:索引順編成ファイル

問10 次の条件a〜dを満たすデータを処理するために、内部データ構造の要素@〜Bを考えた。これらを用いて実装できるデータ構造は、どの抽象データ型に分類されるか

[条件]
a データはすべて同じ型をもつ。
b データは時系列的に発生する。
c 処理の済んだデータを記憶しておく必要はない。
d 未処理のデータ数は常にn未満になることが分かっている。

[内部データ構造の要素]
@ データと同じ型の要素をもつ大きさnの配列A(A[0],A[1]…A[n-1])
A 0以上n未満の整数が記憶できる変数XとY
B 0以上n未満の値をとる仮引数iに対して、i+1をnで割った余りを返す関数succ(i)
キュー(FIFO)
スタック(LIFO)
根付き木
優先度キュー
解答
解説 [条件]を満たすためのものが、[内部データ構造の要素]なのでこちらだけを考えます。

要素@から、n未満のデータをそれぞれ配列に格納することが予想されます。
要素Aから、使用される変数が2つであることがわかります。
要素Bから、0、1、2、・・・n−1、0、1のように、値を循環させることがわかります。

以上のことからキューをあらわしていることがわかります。(XとYは入り口と出口を表している変数と予想されます)

最後に、スタックとキューのデータ構造を以下にまとめます。

スタックとキューを表示できません

問11 要求に応じて可変量のメモリを割り当てるメモリ管理方式がある。要求量以上の大きさをもつ未使用領域のうちで最小のものを割り当てる最良適合(best-fit)アルゴリズムを用いる場合、未使用領域を管理するためのデータ構造として、メモリ割当て時の処理時間が最も短いものはどれか。
空き領域のアドレスをキーとする2分木探索木
空き領域の大きさが小さい順の片方向連結リスト
空き領域の大きさをキーとする2分探索木
アドレスに対応したビットマップ
解答
解説 使用するメモリ量よりぎりぎり大きいメモリ空間を探すわけなので、大きさを基準に検索を行います。よって、選択肢イと選択肢ウのどちらかになります。リストよりもハッシュのほうが高速に検索ができるので、選択肢ウのほうが処理時間が短くなるといえます。

問12 分割統治法を適用した整列(ソート)アルゴリズムはどれか。
クイックソート
選択ソート
挿入ソート
ヒープソート
解答
解説 分割統治法とは、大きな問題を複数の小さい問題に分割し、その小さな問題を解決することによって、全体の問題を解決するという手法です。ソートアルゴリズムでは、ソート範囲を区切って再帰的にソートをするクイックソートやマージソートなどが該当します。

問13 キー値が1〜1,000,000の範囲で一様にランダムであるレコード3件を、大きさ10のハッシュ表に登録する場合、衝突が起こらない確率は幾らか。ここで、ハッシュ値にはキー値をハッシュ表の大きさ10で割った余りを用いる。
0.28
0.7
0.72
0.8
解答
解説 まず、ハッシュの概念を以下にしめします。

ハッシュを表示できません

キー値は十分にランダムであるので、10個に入れたときにどうなるかを考えます。

1件目:ハッシュ表は空なので、衝突は起こりません。
2件目:1つデータが入っているので、9/10の確率で衝突が起こりません。
3件目:2つデータが入っているので、8/10の確率で衝突が起こりません。

つまり、9/10×8/10=73/100=0.72となります。

問14 正の整数Mに対して次の二つの流れ図に示されるアルゴリズムを実行したとき、結果xの値が等しくなるようにしたい。aに入れる条件として、正しいものはどれか。

画像(問14)を表示できません
n>M
n>M+1
n>M−1
n<M
解答
解説 まず、左の流れ図をみると、xに1を入れた後、nをMから1まで動かし、Mの階乗を計算しています。これと同じものを右の流れ図で行うためには、x×Mとなるまでnを増やす必要があります。右の流れ図は階乗を計算した後に、終了の判定が行われるのでn=n+1が行われてからMとの比較が行われます。つまり、M+1のときにループを抜けるようにする必要があります。よって、正解はアとなります。

分かりにくい方は、実際に値を入れて計算してみるといいと思います。
今『M=3』として計算してみましょう。

1回目
1→x
1→n
1×1→x
n=n+1=2
続ける(n=2)

2回目
1×2→x
n=n+1=3
続ける(n=3)

3回目
2×3→x
n=n+1=4
終わる(n=4)

選択肢ア:4>3で確かにYESとなり、ループをぬけることができます。
選択肢イ:4>3+1ではNOでまだループは続きます。
選択肢ウ:4>3−1では、その前にループを抜けてしまいます。
選択肢エ:n<3では、一番最初のループで抜けてしまいます。

問15 条件1〜4の検査する順序を変えても、動作が変化しない決定表はどれか。ここで、“−”は条件を判定しないことを表す。
画像(問15ans)を表示できません
解答
解説 決定表は、1つの縦の列を見て、条件がYとなっているものを見たいしている場合には、その下の動作がXとなっているものを実行するという意味です。表は左から順に評価し、一番最初に条件を満たしたものを実行します。たとえば、選択肢アの一番左の列であれば、条件1、2、3、4を満たすのであれば、動作1を実行するという意味です。

左から順に評価していくので、表の順番によっては挙動が変化することがあります。つまり、複数行に該当するような場合には考慮が必要です。

選択肢ア:条件1と条件2で複数行に該当することはありえないので、動作は変化しません。
選択肢イ:例えば、条件1=N、条件2=Y、条件3=Nの場合は、3列目と4列目に該当するため、順序を変えると動作が変化します。
選択肢ウ:例えば、条件1=N、条件2=Y、条件3=N、条件=Nの場合に、3列目と4列目に該当するため、順序を変えると動作が変化します。
選択肢エ:例えば、条件1=N、条件2=Y、条件3=Yの場合は、3列目と4列目に該当するため、順序を変えると動作が変化します。

問16 SRAMと比較した場合のDRAMの特徴はどれか。
SRAMよりも高速なアクセスが実現できる。
データを保持するためのリフレッシュ動作が不要である。
内部構成が複雑になるので、ビット当たりの単価が高くなる。
ビット当たりの面積を小さくできるので、高集積化に適している。
解答
解説 二つのメモリを以下にまとめます。

SRAM:容量は小さいが高速。リフレッシュがいらず消費電力も小さい。比較的高価。主にキャッシュメモリに利用される。
DRAM:容量は大きいが低速。リフレッシュが必要で消費電力が大きい。比較的安価。主に主記憶に利用される。

(リフレッシュとは、値を保持するために、電気的に再充電する操作をいいます。DRAMはトランジスタとコンデンサによって構成されているので、このような操作が必要となります。)

問17 スーパスカラの説明はどれか。
処理すべきベクトルの長さがベクトルレジスタより長い場合、ベクトルレジスタ長の組に分割して処理を繰り返す方式である。
パイプラインを更に細分化することによって高速化を図る方式である。
複数のパイプラインを用いて、同時に複数の命令を実行可能にすることによって高速化を図る方式である。
命令語を長く取り、一つの命令で複数の機能ユニットを同時に制御することによって高速化を図る方式である。
解答
解説 スーパースカラ(スーパースケーラ)方式は、パイプライン技術の応用的な技術です。パイプラインとは、下の図のように命令の段階を少しずつずらして多重化する方式です。

パイプラインを表示できません

これを応用して、命令パイプライン上で複数の命令を同時に実行する方式をスーパースカラ方式といいます。例を図示します。

スーパースカラを表示できません

選択肢アは、ベクトルプロセッサの説明です。
選択肢イは、スーパーパイプラインの説明です。
選択肢エは、VLIW(Very Long Instruction Word)の説明です。

問18 1件のトランザクションについて80万ステップの命令実行を必要とするシステムがある。プロセッサの性能が20MIPSで、プロセッサの使用率が80%のときのトランザクションの処理能力(件/秒)は幾らか。
20
25
31
解答
解説 まず、プロセッサの性能が20MIPSで、使用率が80%なので、1秒間に20×106×0.8=16×106命令処理ができます。

そして、トランザクションは80万命令必要なので、1秒間に処理できる件数は16×106/80×104=1600/80=20件/秒となります。

問19 図のアーキテクチャのシステムにおいて、CPUからみた、主記憶とキャッシュメモリを合わせた平均読込み時間を表す式はどれか。ここで、読み込みたいデータがキャッシュメモリに存在しない確率をrとし、キャッシュメモリ管理に関するオーバヘッドは無視できるものとする。

画像(問19)を表示できません
画像(問19ans)を表示できません
解答
解説 キャッシュメモリは、主記憶装置(=メインメモリ)とCPUとの処理能力の速度の差を埋めるために用いられるメモリです。メインメモリはまず、キャッシュメモリにデータを探しに行き、そのデータがある場合は、キャッシュメモリから、ない場合はメインメモリからデータを読み出します。よって、存在しない確率 ×メインメモリの読み込み速度+存在する確率×キャッシュメモリの読み込み速度となります。両者の容量はアクセス速度には関係がありません。

問20 CPUと主記憶の間に置かれるキャッシュメモリにおいて、主記憶のあるブロックを、キャッシュメモリの複数の特定ブロックと対応づける方式はどれか。
セットアソシアティブ方式
ダイレクトマッピング方式
フルアソシアティブ方式
ライトスルー方式
解答
解説 キャッシュメモリはデータをライン(あるいはブロック)と呼ぶある程度まとまった単位で管理します。
例えば4ビットを1つのラインとしてまとめて管理する場合は、その上位ビットを保存しておきます。この上位のアドレスをフレームアドレス、下位のアドレスをエントリアドレスといいます。これによりフレームアドレスをまず検索し、その後エントリアドレスを検索することで、高速化できます。
(例:10100000〜10101111は、1010を上位ビットとして保存しておきます。)

このフレームアドレスバッファが複数ある場合は、複数のデータを格納できます。このときのバッファの個数をセット数(ウェイ)と呼びます。このような構造により、局所的に連続したデータにアクセスする場合に高速に処理できます。

これを踏まえて、キャッシュメモリの方式を下にまとめます。

ダイレクトマッピング方式:メモリ空間と1対1で割り当てる方式。すべてのメモリ領域を1対1でカバーするのでヒット率が低い
フルアソシアティブ方式:任意のメモリ空間と対応付ける方法。使用率が高いところを自由に持ってこれるので、ヒット率が高い反面オーバヘッドが大きい
セットアソシアティブ方式:上の二つの間のような方法。ある程度区切った空間を自由に対応付けることができる。通常セット数nに対して、nウェイセットアソシアティブという

ライトスルー方式は、キャッシュメモリのアクセス方式の一種です。