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




このページは

ソフ開

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

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

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



問1 負数を2の補数で表現する32ビットの二つの整数データを加算したとき、あふれが生じる必要十分条件はどれか。
ともに正で和が231以上、又はともに負で絶対値の和が231以上
ともに正で和が231以上、又はともに負で絶対値の和が231より大きい
ともに正で和が231より大きい、又はともに負で絶対値の和が231以上
ともに正で和が231より大きい、又はともに負で絶対値の和が231より大きい
解答
解説 2の補数での最大の数値は「0111・・・111」なので、32ビットでは、231−1です。また、負数の最大は「1000・・・000」なので、32ビットでは−231となります。つまり、正+正では、231以上になるとオーバーフローとなり、負+負(=負−正)では、231より大きい値になるとオーバーフローとなります。

問2 Random()は、0以上1未満の一様乱数を発生する関数である。次の一連の手続きで得られるZの値が従う分布の概形はどれか。

X=Random()
Y=Random()
Z=X+Y
画像(問2ans)を表示できません
解答
解説 0〜1の実数を簡略化して、0、1、2で考えて見ます。Zの値とX、Yの組合せの種類は、以下のようになります。

0:X=0、Y=0(1種類)
1:X=1、Y=0。X=0、Y=1(2種類)
2:X=2、Y=0。X=1、Y=1。X=0、Y=2(3種類)
3:X=2、Y=1。X=1、Y=2(2種類)
4:X=2、Y=2(1種類)

よって、徐々に種類が増えていき、頂点を境に徐々に減っていきます。

問3 表は、ある地方の天気の移り変わりを示したものである。例えば、晴れの翌日の天気は、40%の確率で晴れ、40%の確率で曇り、20%の確率で雨であることを表している。天気の移り変わりが単純マルコフ過程であると考えたとき、雨の2日後が晴れである確率は何%か。

画像(問3)を表示できません
15
27
30
33
解答
解説 雨の2日後が晴れである確率は以下の3つの可能性の和であらわすことができます。

雨⇒晴れ⇒晴れ:30%×40%=12%
雨⇒曇り⇒晴れ:50%×30%=15%
雨⇒雨⇒晴れ:20%×30%=6%

つまり、12+15+6=33%であるといえます。

問4 四つの整数を引数とする関数d(X1,Y1,X2,Y2)を、次のように定義する。

d(X1,Y1,X2,Y2)=|X1−X2|+|Y1−Y2

この関数は、2点(X1,Y1)と(X2,Y2)との間の2次元正方格子上の最短経路長を求めるものである。その性質に関する記述のうち、適切なものはどれか。


画像(問4)を表示できません
d(0,0,X2,Y2)≦1を満たす整数の組は(X2,Y2)は、全部で四つある。
d(2X1,2Y1,2X2,2Y2)=4d(X1,Y1,X2,Y2)である。
d(X1,Y1,X2,Y2)=0ならば、X1=Y1=X2=Y2である。
d(X1,Y1,X2,Y2)=d(X2,Y2,X1,Y1)である。
解答
解説 それぞれの選択肢を順に見ていきます。

選択肢ア:距離が1のものが(1,0)、(0,1)、(-1,0)、(0,-1)の四つと距離が0(同じ座標)のもの(0,0)が1つあるので、合計で五つとなります。
選択肢イ:反例として、(0,0,1,1)として考えます。(2*0,2*0,2*1,2*1)=(0,0,2,2)=4、4*(0,0,1,1)=4×2=8なので、成立しません。
選択肢ウ:距離は|X1−X2|+|Y1−Y2|なので、X1−X2かつY1−Y2ならば、距離が0となります。
選択肢エ:|X1−X2|+|Y1−Y2|=|Y1−Y2|+|X1−X2|なので、成立します。

このような距離をマンハッタン距離といいます。

問5 A,B,C,Dを論理変数とするとき、次のカルノー図と等価な論理式はどれか。ここで、・は論理積、+は論理和、はXの否定を表す。

画像(問5)を表示できません
A・B・D+
A・B・・D+
+B・D
+B・D
解答
解説 カルノー図とは、多変数の論理式を簡単化するのに用いられる図で、変数が多くなるとベン図では表現しにくくなり、カルノー図が用いられることが多いです。

例として、AC+BC+ABC+ABが与えられたとします。真を1、偽を0に対応させると以下のようになります。

カルノー図を表示できません

そこで、隣り合うもの同士をまとめると、緑の部分がAC、青の部分がBC、赤の部分がABとなります。

よって、AC+BC+ABとなり、元の式の簡約化ができました。

それでは、問題のカルノー図を考えます。以下のように色分けをします。端同士がつながっていることや、グループ化は2の倍数個で行われることに注意してください。

5ansを表示できません

赤い線の部分が、B・D。青い部分がとなり、これを+でつないだものが等しい論理式となります。

問6 図に示す論理回路と等価な真理値表はどれか。

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


画像(問6)を表示できません
画像(問6ans)を表示できません
解答
解説 回路の出力を順に追いかけていくと、以下のようになります。

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

AとBが同じ場合(0,0と1,1)に出力される回路となっているので、選択肢ウの真理値表が対応します。

問7 図は、偶数個の1を含むビット列を受理するオートマトンの状態遷移図であり、二重丸が受理状態を表す。a,bの正しい組み合わせはどれか。

画像(問7)を表示できません
画像(問7ans)を表示できません
解答
解説 1の個数が偶数と奇数を調べています。偶数と奇数は1が来たときに入れ替わるので、aは1が入ります。0のときは偶数、奇数は変わらないので、bには0が入ります。

問8 あるプログラム言語において、識別子(identifier)は、先頭が英字で始まり、それ以降に任意個の英数字が続く文字列である。これをBNFで定義したとき、aに入るものはどれか。

画像(問8)を表示できません
<letter>|<digit>|<identifier><letter>|<identifier><digit>
<letter>|<digit>|<letter><identifier>|<identifier><digit>
<letter>|<identifier><digit>
<letter>|<identifier><digit>|<identifier><letter>
解答
解説 BNF(Backus Naur Form)とは文脈自由言語を定義する言語で、正規表現などを記述するのに用いられています。

<A>:=<a><b>の場合は、Aはabをそれぞれを置き換えるという意味です。
<B>:=<c>|<d>の場合は、BはA又はbで置き換えるという意味です。
<C>:=<C><e>の用に、元の記号がある場合は、再帰的な表現となります。

まず、選択肢ア、イは、|<digit>|があるので、先頭に数字が来る可能性があります。
選択肢ウとエの違いは、|<identifier><leter>|があるかないかですが、これがないと、最後が文字列で終わるものを作れないので必要です。
よって、選択肢ウでは不十分であり、選択肢エが正解となります。

問9 すべての葉が同じ深さであり、かつ葉以外のすべての節点が二つの子をもつ要素数nの完全2分木がある。どの部分木をとっても左の子孫は親より小さく、右の子孫は親より大きいという関係が保たれている。2分木で探索する場合、ある要素を探索するときの最大比較回数のオーダはどれか。
log2
nlog2
2
解答
解説 まず、左図で木についてまとめます。そして、完全2分木とは右図のような特殊な木で、2分探索などに用いることができます。

木を表示できません

2分木で大小関係が決まっているということは、1回の比較で、右半分か左半分のどちらかに絞り込むことができるということです。つまり、n回の比較で2n個を調べることができます。つまり、n個検索対象を調べる場合には、log2n回の最大で比較が行われることになります。(検索している値が葉でない場合はもっと早く終了します。)

問10 配列A[1],A[2], ・・・ , A[n]で、A[1]を根とし、A[i]の左の子をA[2i]、右の子をA[2i+1]とみなすことによって、2分木を表現する。このとき、配列を先頭から順に調べていくことは、2分木の探索のどれに当たるか。
行きがけ順(先行順)深さ優先探索
帰りがけ順(後行順)深さ優先探索
通りがけ順(中間順)深さ優先探索
幅優先探索
解答
解説 木と配列の関係をまとめると以下のようになります。

木と配列を表示できません

つまりこれは、1段目をさがし、2段目をさがし、3段目をさがし・・・となるので、幅優先探索となります。

問11 n個のデータを整列するとき、比較回数が最悪の場合でO(n2)、最良の場合でO(n)となるものはどれか。
クイックソート
単純選択法
単純挿入法
ヒープソート
解答
解説 まず、代表的なソート法を下にまとめます。

挿入ソート:既に整列済みのデータ列の正しい位置に、データを追加する操作を繰り返していく
選択ソート:データ中の最小値を求めデータ列の最後尾と交換作業を繰り返し、ソートの済み部分を伸ばしていく
バブルソート:隣り合ったデータの比較と入替えを繰り返すことによって、小さな値のデータを次第に端の方に移していく
クイックソート:適当な基準値を選び、それより小さな値のグループと大きな値のグループにグループを分割する。この操作を繰り返していく
シェルソート:ある一定間隔おきに取り出した要素から成る部分列をそれぞれ整列し,更に間隔を詰めて同様の操作を行い,間隔が1になるまでこれを繰り返す
ヒープソート:未整列の部分を順序木に構成し、そこから最大値又は最小値を取り除いて既整列の部分に移す。これらの操作を繰り返して、未整列部分を縮めていく

つぎに、選択肢のソート法のオーダーについて考えます。
選択肢ア:最悪の場合はO(n2)、最良の場合はO(nlog2n)です。
選択肢イ:常に、2重ループで比較をしていくのでO(n2)です。
選択肢ウ:最悪の場合はO(n2)、最良(ソートされている状態)の場合はO(n)です。
選択肢エ:n個のデータに対して、ヒープの再構築O(log2n)を行うので、O(nlog2n)です。

問12 2整数X、Yをキーとするデータを、ハッシュ関数h(X,Y)を使って、要素数256の1次元配列に格納する。Xは値1〜256を一様にとり、Yは値1〜16を一様にとる。ハッシュ関数として最も不適切なものはどれか。ここでN=256であり、A mod BはAをBで割った剰余を表す。
X mod N
Y mod N
(X+Y) mod N
(X×Y) mod N
解答
解説 まず、実際に値を入れて計算してみたハッシュの例を下に示します。

ハッシュ

ハッシュ関数は、できる限り値を一様に生成する性質がもとめられます。

選択肢ア:1〜256が0〜255になります。
選択肢イ:1〜16が1〜16になります。
選択肢ウ:2から272が0〜255になります。
選択肢エ:1〜4096が0〜255になります。

よって、選択肢イが生成される値の範囲が最も狭く、不適切であるといえます。

問13 配列上に不規則に並んだ多数のデータの中から、特定のデータを探すのに適したアルゴリズムはどれか。
2分探索法
線形探索法
ハッシュ法
モンテカルロ法
解答
解説 それぞれの手法を以下にまとめます。

2分探索法:昇順または降順にソートされたデータ列に対して、中央値と比較しながら範囲を半分ずつにしていく手法です。
線形探索法:データを1つずつ順番に探していく方法です。
ハッシュ法:ハッシュ関数を使って、データの格納場所を決める方法です。
モンテカルロ法:乱数を利用して、シミュレーションなどを行う手法です。

問14 非負の整数xに対して、次のとおりに定義された手続きF(x)がある。F(10)で印刷される結果はどれか。ここで、p div qはpをqで割った商の整数部分、p mod qはpをqで割った剰余、print(p)はpの値を印刷することを表す。印刷は、左から右に行う。

画像(問14)を表示できません
012
10
12
21
解答
解説 順番に追いかけていきます。

1:F(10)が実行されます。
2:F(10)の中のF(10 div 8)=F(1)が実行されます。
3:F(1)の中のF(1 div 8)=F(0)が実行されます。
4:F(0)の中において、if(x>0)なので、F(0)を終了して、F(1)に戻ります。
5:F(1)の中のprint(1 mod 8)=1が出力されます。
6:F(1)が終了して、F(10)に戻ります。
7:F(10)の中のprint(10 mod 8)=2が出力されます。

よって、12が出力されます。

問15 処理1と処理2が交互に繰り返し実行される流れ図はどれか。ここで、二重線は並列処理の同期を表す。
画像(問15ans)を表示できません
解答
解説 それぞれの選択肢を見ていきます。

選択肢ア:左側の一番上に処理が来ないので、処理が途中で止まってしまいます。
選択肢イ:互いが同期線に囲まれているので、確実に交互に実行されます。
選択肢ウ:同期の後、処理1と処理2のどちらが先に実行されるかわからないので、交互に実行される保証はありません。
選択肢エ:同期の後、処理1と処理2のどちらが先に実行されるかわからないので、交互に実行される保証はありません。

問16 すべての命令が5サイクルで完了するように設計された、パイプライン制御のコンピュータがある。20命令を実行するのに何サイクル必要となるか。ここで、すべての命令は途中で停止することなく実行できるものとする。
20
21
24
25
解答
解説 パイプラインとは、下の図のように命令の段階を少しずつずらして多重化する方式です。

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

1つめの命令は、5クロックで終了します。2つめの命令は、6クロック目で終了します。3つめの命令は、7クロック目で終了します。よって、N命令は5+(N−1)クロックで終了します。なので5+19=24クロックで20命令が終了するといえます。

問17 表に示す命令ミックスによるコンピュータの処理性能は、約何MIPSか。

画像(問17)を表示できません
30
33
110
解答
解説 まず、MIPS(million instructions per second)とは、1秒間に何百万個の命令が実行できるかを表しています。次に、1命令の平均実行時間を求めると10×0.5+50×0.3+50×0.2=5+15+10=30ナノ秒となります。1つの命令が30ナノ秒なので、1秒間に実行できる命令の数は、1/30ナノ秒=1/(30×10-9)≒33×106なので、約33MIPSであるといえます。

問18 キャッシュメモリのアクセス時間が10ナノ秒、主記憶のアクセス時間が70ナノ秒、キャッシュメモリのヒット率が90%のとき、実効アクセス時間は何ナノ秒か。
16
40
64
解答
解説 キャッシュメモリは、主記憶とCPUのレジスタの速度の差を埋めるために用いられるものです。キャッシュメモリを用いた場合の主記憶の実効アクセス時間は、キャッシュメモリのアクセス時間×ヒット率+主記憶のアクセス速度×(1−ヒット率)となります。

よって、10×0.9+70+0.1=9+7=16ナノ秒となります。

問19 メモリインタリーブを説明したものはどれか。
主記憶と外部記憶を一元的にアドレス付けし、事実上無制限のメモリ空間を提供する方式である。
主記憶と磁気ディスク装置のアクセス速度の差を補うために、補助的な記憶装置を双方の間に置く方式である。
主記憶と入出力装置との間でCPUとは独立にデータ転送を行うことを可能とした方式である。
主記憶を複数の領域に分け、連続したメモリ領域へのアクセスを高速化する方式である。
解答
解説 メモリインタリーブとは、複数のバンクと呼ばれる単位に分けておくことで、高速にアクセスできます。アクセス幅が1の場合は3語分、アクセス幅が2の場合は6語分に同時にアクセスできます。

メモリインタリーブ

選択肢アは、仮想記憶の説明です。
選択肢イは、ディスクキャッシュの説明です。
選択肢ウは、DMA(Direct Memory Access)の説明です。

問20 データを分散して複数の磁気ディスクに書き込むことによって、データ入出力の高速化を図る方式はどれか。
ストライピング
スワッピング
ディスクキャッシュ
ミラーリング
解答
解説 それぞれの用語を以下にまとめます。

ストライピング:RAID0に相当し、複数のHDDに分散してデータを書き込むもの
スワッピング:仮想記憶において実主記憶と仮想記憶の間で行う入れ替えのこと
ディスクキャッシュ:主記憶とHDDとの間におかれ、速度の差を埋めるために用いられるメモリ
ミラーリング:RAID1に相当し、複数のHDDに同じデータを書き込むもの