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




このページは

ソフ開

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

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

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



問1 数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍する方法はどれか。ここで、シフトによるあふれ(オーバフロー)は、起こらないものとする。
xを2ビット左にシフトした値にxを加算し、更に1ビット左にシフトする。
xを2ビット左にシフトした値にxを加算し、更に2ビット左にシフトする。
xを3ビット左にシフトした値と、xを2ビット左にシフトした値を加算する。
xを3ビット左にシフトした値にxを加算し、更に1ビット左にシフトする。
解答
解説 2進数は1ビット左にシフトすると2倍になるという性質をもっています。つまり10倍とは、5倍した値を2倍することで実現できるということになります。これは、左に2ビットした値(4倍)に元の値を加え(5倍)、さらに1ビット左にシフト(10倍)すればよいことになります。

問2 相関係数に関する記述のうち、適切なものはどれか。
すべての標本点が正の傾きをもつ直線上にあるときは、相関係数が+1になる。
変量間の関係が線形のときは、相関係数が0になる。
変量間の関係が非線形のときは、相関係数が負になる。
無相関のときは、相関係数が−1になる。
解答
解説 散布図とは、以下のような図で、最小2乗法などによって直線を求めたものを回帰直線と呼びます。この傾きを相関係数といい、1に近ければ正の相関。−1に近ければ負の相関といいます。

散布図を表示できません

問3 任意のオペランドに対するブール演算Aの結果とブール演算Bの結果が互いに否定の関係にあるとき、AはBの(又は、BはAの)相補演算であるという。排他的論理和の相補演算はどれか。
画像(問3ans)を表示できません
解答
解説 排他的論理和(XOR)とは、どちらかが1であるとき1になるような演算をいいます(不一致回路ともいいます)。以下に真理値表を示します。
ABA XOR B
000
011
101
110
これを否定するということは、以下のような真理値表になります。
ABnot(A XOR B)
001
010
100
111
つまりこれは、A=Bのときに真になるので、等価演算であるといえます。

問4 差集合S−Tに等しいものはどれか。ここで、∪は和集合、∩は積集合、はXの補集合の各演算を表す。
S∪(S∩T)
S∪
S∩(S∪T)
S∩
解答
解説 差集合S−Tとは、Sである集合からTである集合を除いた集合という意味です。つまり、SであってTでないものの集合。=SかつノットTなので、選択肢エが正解となります。

問5 論理式X=・B+A・

画像(問5q)を表示できません
画像(問5ans)を表示できません
解答
解説 ・Bは、+B)=とすることができます。同様に、A・は、(A・)・とすることができます。

はド・モルガンの定理によりA・Bとなり、これは選択肢イのNAND回路の論理式となります。

式の変形が分からない場合は真理値表を作成し、代入しながら考えるのもよいと思います。

問6 次の前提条件から、論理的に導くことができる結論はどれか。

[前提条件]
受験生は毎朝、必ず紅茶かコーヒーのどちらかを飲み、両方を飲むことはない。紅茶を飲むときは必ずサンドイッチを食べ、コーヒーを飲むときは必ずトーストを食べる。
受験生は朝、サンドイッチかトーストを食べるが、両方とも食べることはない。
受験生は朝、サンドイッチを食べないならばコーヒーを飲む。
受験生は朝、サンドイッチを食べるときは紅茶を飲む。
受験生は朝、トーストを食べるときはサンドイッチを食べない。
解答
解説 pが成立するならば、qも成立するという主張をp→qと表記します。→は「含意」や「ならば」などと読みます。

これが唯一成立しないのは、pが真でqが偽の場合です。つまり、pなのに、qでなかった場合に限り偽となります。

これは、p∪と同値であり、を証明すればよいという背理法に相当します。

ここで注意すべきは、サンドイッチを食べたからといって、トーストを食べない保証がどこにもないということです。
紅茶かコーヒーはどちらか一方しか飲まないので、サンドイッチかトーストのどちらかを一方しか食べないと誤解しないようにしましょう。
つまり、サンドイッチを食べたからといって、紅茶を飲む保証がないということです。(サンドイッチを食べなかったから、紅茶を飲まなかったという保証はできます。)

これを踏まえると、選択肢イが正解であることが分かります。

問7 次の表は、入力信号の集合が{0,1}、状態集合が{a,b,c,d}である有限オートマトンの状態遷移表である。長さ3以上の任意のビット列を左から(上位ビットから)順に読み込んで最後が110で終わっているものを受理するには、どの状態を受理状態とみればよいか。

画像(問7)を表示できません
解答
解説 最後が110で終わっているものを受理するということは、110の前に何らかのデータがあり、いずれかの状態になっているが、110を入力することでかならず同じ状態に収束するという意味です。つまり、すべての状態で110を入力してどれに収束するかを考えます。

a:a→b→d→c
b:b→d→d→c
c:c→b→d→c
d:d→d→d→c

つまり、どんな状態からでも最後に110が付けば、状態cになることから、cを受理状態をすればよいことが分かります。

問8 式a+b×cの逆ポーランド表記法による表現として、正しいものはどれか。
+×cba
×+abc
abc×+
cba+×
解答
解説 逆ポーランド記法は、a+bをab+のように表記するもので、スタックを使うことで表現でき、括弧を使わないで計算の順序を指定できるため、コンパイラなどで用いられています。

一つずつ計算していきます。
@a+(b×c):優先順位を明示的に表すために括弧を補いました。
Aa+bc×:カッコ内を逆ポーランド表記にします。
Babc×+:a+bを逆ポーランド表記にします。

問9 葉以外の節点はすべて二つの子をもち、根から葉までの深さがすべて等しい木を考える。この木に関する記述のうち、適切なものはどれか。ここで、深さとは根から葉に至るまでの辺の数を表す。
木の深さがnならば、葉の数は2n-1である。
節点の数がnならば、深さはlog2nである。
葉の数がnならば、葉以外の節点の数はn−1である。
辺の数がnならば、節点の数もnである。
解答
解説 まず、木というデータ構造を以下に示します。

木を表示できません


実際に代入して求めてもよいのですが、以下のような性質があります。
@木の深さがnならば、葉の数は2n
A節点の数がnならば、深さはlogn+1−1
B葉がnならば、葉以外の節点の数はn−1

問10 ヒープソートの説明として、適切なものはどれか。
ある間隔おきに取り出した要素から成る部分列をそれぞれ整列し、更に間隔を詰めて同様の操作を行い、間隔が1になるまでこれを繰り返す。
中間的な基準値を決めて、それよりも大きな値を集めた区分と、小さな値を集めた区分に要素を振り分ける。次に、それぞれの区分の中で同様な操作を繰り返す。
隣り合う要素を比較して、大小の順が逆であれば、それらの要素を入れ替えるという操作を繰り返す。
未整列の部分を順序木にし、そこから最小値を取り出して整列済の部分に移す。この操作を繰り返して、未整列の部分を縮めていく。
解答
解説 まず、選択肢のソート法をまとめます。

選択肢ア:シェルソート
選択肢イ:クイックソート
選択肢ウ:バブルソート
選択肢エ:ヒープソート

次に、ヒープとは親より子の方が値が大きい(または小さい)ように作られた木のことで、これを用いてソートを行うのがヒープソートです。ヒープは通常以下のように、配列と対応付けられて利用されます。

ヒープと配列を表示できません

問11 昇順に整列されたn個のデータが格納されている配列Aがある。流れ図は、配列Aからxを2分探索法を用いて探し出す処理を表している。a、bに入る操作の正しい組合せはどれか。ここで、除算の結果は小数点以下が切り捨てられる。

画像(問11)を表示できません
画像(問11ans)を表示できません
解答
解説 問題のアルゴリズムは、2分探索です。

2分探索とは、ソートされたデータに対して検索をする手法で、中央値と検索値を比較することで、範囲を徐々に半分にしていく手法です。よって

中央値>検索値だった場合は、下半分にあるので、上限=中央値の下のインデックス
中央値<検索値だった場合は、上半分にあるので、上限=中央値の上のインデックス
として、再度中央値を再計算するということを繰り返します。

これにより、探索範囲を半分ずつにしていくことができlog2Nで探索ができます。
前提条件のソート済みという利点を活用しています。

問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
解答
解説 ハッシュ関数とは、特定の値(キー)から別の代表値(ハッシュ値)を変換する関数をいいます。ハッシュ関数の概念図をいかにまとめます。

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


一般的にハッシュ関数が備えるべき性質はたくさんありますが、ここでは、一様性とハッシュ値の取りえる範囲について問われています。
一様性とは、できるかぎりハッシュ値が重ならない(シノニムが発生しない)ようになる性質です。理想的には、N個の要素があれば、それぞれが1/Nになることが望ましいといえます。

これを基準に選択肢の発生確率を考えます。
選択肢ア:1−256 mod 256 =>0から255が一様
選択肢イ:1−16 mod 256 =>0から15が一様

選択肢ウ:2−272 mod 256 =>0から255だが偏りがある。
選択肢エ:1−4096 mod 256 =>0から255で一様

ここでは、範囲が極端に狭い選択肢イが不適切であるといえます。

問13 相異なるn個のデータが昇順に整列された表がある。この表をm個ごとのブロックに分割し、各ブロックの最後尾のデータだけを線形探索することによって、目的のデータの存在するブロックを探し出す。次に、当該ブロック内を線形探索して目的のデータを探し出す。このときの平均探索回数はどれか。ここで、m<nとし、目的のデータは必ず表の中に存在するものはどれか。
n/m
n/2m
m+n/m
m/2+n/2m
解答
解説 まず、内容を整理すると以下のようになります。
・全体でn個のデータがある。
・データはm個ごとにブロック化されている。
・各ブロックのデータ数はn/mである。

検索はデータは、まずm個ごとに大まかに探し、その後見つかったデータのあるブロックを1個ずつ調べる。

このことにより、まずm個を調べますが、平均なのでmの半分(m/2)で見つかると予想できます。
次に、このブロックを調べますが、平均なのでn/mの半分(n/2m)で見つかると予想できます。

よって、m/2+n/2mとなります。

問14 次の流れ図を実行したとき、手続が終了するまでに何回の比較を行うか。

画像(問14)を表示できません
99
100
101
102
解答
解説 まず、値をトレースしながらどのようなことをしているアルゴリズムか調べてみます。

1回目:x=0(y=0)
2回目:x=0(y=1)
3回目:x=1(y=2)
4回目:x=3(y=3)
5回目:x=6(y=4)

つまり、1+2+3+・・・+n > 5000となるnを探していることが予想できます。もちろん1〜100までの合計が5050であることを知っていれば比較的容易ですが、今回は1〜nまでの合計の求め方から考えてみましょう。

4までの和を例に考えます。まず、Sを二つ準備して、以下のように2Sを計算します。

S=1+2+3+4
S=4+3+2+1
−−−−−−−−−
2S=5+5+5+5

5とは(1+4)=a1+anとみることができます。
5の個数4はnと一致します。

つまり、2S=n(a1+an)と表現できるので、S=n(a1+an)/2となります。

n=100とすると、S=100(1+100)/2=5050が計算できます。

2回目が0なので、102回目が5050となります。


問15 次の流れ図のうちで、処理1と処理2が交互に繰り返し実行されるものはどれか。ここで、二重線は並列処理の同期を表す。
画像(問15ans)を表示できません
解答
解説 ひとつずつ検証していきます。

選択肢ア:左側の処理が一番上の同期線まで戻らないので、処理が止まってしまいます。
選択肢イ:処理1と処理2がそれぞれ同期線に囲まれているので、確実に交互に処理が行われます。

選択肢ウ:処理1を行った後に、同期線を超え、右側が処理2を行う前に処理1が実行できてしまうので間違いです。
選択肢エ:同時に処理1と処理2の上にもどるので、「処理1→処理2」と「処理2→処理1」が繰り返されます。

問16 同一メモリ上で転送するとき、転送元の開始アドレス、転送先の開始アドレス、方向フラグ及び転送語数をパラメタとして指定することでブロック転送が行えるCPUがある。図のようにアドレス1001から1004の内容をアドレス1003から1006に転送する場合、パラメタとして適切なものはどれか。ここで、転送は開始アドレスから1語ずつ行われ、方向フラグに0を指定するとアドレスの昇順に、1を指定するとアドレスの降順に転送を行うものとする。

画像(問16)を表示できません
画像(問16ans)を表示できません
解答
解説 まず、昇順にコピーするか降順にコピーするかの2種類に矛盾する選択肢を除きます。

選択肢ア:1001から1004に向かってフラグ0(昇順)でコピーするので矛盾はありません。
選択肢イ:1001から1004に向かってフラグ1(降順)でコピーするので1001から998をコピーしてしまいます。
選択肢ウ:1004から1001に向かってフラグ0(昇順)でコピーするので1004から1007をコピーしてまいます。
選択肢エ:1004から1001に向かってフラグ1(降順)でコピーするので矛盾はありません。

つぎに、転送元と転送先のアドレスを考えます。
今回転送先のアドレスが、一部転送元とかぶっています。つまり、正しくコピーをしないと内容を壊してしまいます。

選択肢ア:1001のデータが1003に上書きされるので、1003のデータをコピーするのに正しいデータがコピーできません。
選択肢エ:1004のデータを1006にコピーするので、ほかのデータを壊すことなく正しくコピーできます。

問17 キャッシュメモリへの書込み動作には、ライトスルー方式とライトバック方式がある。それぞれの特徴に関する記述のうち、適切なものはどれか。
ライトスルー方式では、データをキャッシュメモリだけに書き込むので、高速に書込みができる。
ライトスルー方式では、データをキャッシュメモリと主記憶の両方に同時に書込むので、主記憶の内容が常に最新である。
ライトバック方式では、データをキャッシュメモリと主記憶の両方に同時に書き込むので、速度が遅い。
ライトバック方式では、読出し時にミスヒットが発生してもキャッシュメモリの内容を主記憶に書き込む必要がない。
解答
解説 キャッシュメモリと主記憶のデータの整合性の取り方には、以下の2つの種類があります。

ライトスルー方式:キャッシュメモリと主記憶の両方の書き込む方法です。(選択肢イに相当)
ライトバック方式:データがキャッシュメモリから追い出されるときに主記憶に書き込みます。(選択肢アに相当))

問18 キャッシュメモリのアクセス時間が主記憶のアクセス時間の1/30で、ヒット率が95%のとき、主記憶の実効アクセス時間は、主記憶のアクセス時間の約何倍になるか。
0.03
0.08
0.5
0.95
解答
解説 主記憶へのアクセス速度をaとして計算してみます。キャッシュメモリを利用する場合のアクセス時間は次のようになります。

キャッシュメモリの速度×ヒット率+主記憶の速度×ヒットしなかった率
=1/30a×0.95+a×0.05
=(1/30×19/20+1/20)a
=(19/600+30/600)a
=0.0817a

となり、アクセス時間はもともとの0.08倍に高速化されることになります。

問19 主記憶装置の高速化の技法として、主記憶を幾つかのアクセス単位に分割し、各アクセス単位をできるだけ並行動作させることによって、実効アクセス時間を短縮する方法を何というか。
仮想記憶
キャッシュメモリ方式
ダイレクトメモリアクセス
メモリインタリーブ
解答
解説 メモリインタリーブとは、複数のバンクと呼ばれる単位に分けておくことで、高速にアクセスできます。アクセス幅が1の場合は3語分、アクセス幅が2の場合は6語分に同時にアクセスできます。以下にイメージ図を示します。

メモリインタリーブを表示できません

選択肢アの仮想記憶は、ハードディスクの一部を主記憶のように使うことで、主記憶の見かけ上の容量を増やす技術です。
選択肢イのキャッシュメモリ方式は、キャッシュメモリを主記憶とレジスタの間に搭載し、速度の差を埋める技術やそのアクセス方式をいいます。
選択肢ウのダイレクトメモリアクセス方式(DMA)は、CPUを介さずに機器同士が直接データをやり取りする方式のことです。

問20 メモリの誤り制御に用いられ、自動訂正機能をもつものはどれか。
水平パリティチェック
チェックサム
チェックディジット
ハミング符号
解答
解説 代表的な誤り制御方式を下にまとめます。

チェックディジット:入力の誤りなどを防ぐために、データの最後に追加される(おもに数字の)のデータ
奇数パリティ:1(あるいは0)の個数が奇数個になるように、1ビットを付加するもの
奇数パリティ:1(あるいは0)の個数が偶数個になるように、1ビットを付加するもの
水平パリティ:転送を2次元の配列とみなしたときに、水平方向へのパリティを付加するもの。垂直パリティと合わせて利用されることが多い。
チェックサム:送信データを数値に対応させ、その合計を計算し付加するもの。
ハミング符号:2ビットの誤り検出と、1ビットの誤り訂正機能を持つ
巡回冗長検査(CRC):送信列から生成多項式とよばれる式をつくり、受信側で計算式の余りが0かどうかを調べる。