「厳選5題」過去問と解説 | 平成24年度 秋期 の過去問やるならこれをやれ


2020-03-04 更新

ここでは、平成24年度 秋期 基本情報技術者試験の午前試験 の中から「やるべき問題」を5題に厳選し、ぶっちゃけた解説をさせていただきます。

やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題(練習しないとできない問題)です。

厳選問題looks_one2 の補数表現と算術右シフトをマスターしよう

問 1 (平成 24 年度 秋期)

8 ビットの 2 進数 11010000 を右に 2 ビット算術シフトしたものを,00010100 から
減じた値はどれか。 ここで,負の数は 2 の補数表現によるものとする。

ア 00001000  イ 00011111  
ウ 00100000  エ 11100000

解説

この問題を解くには、「 2 の補数表現」および「算術右シフト」の知識が必要になります。

これらを「苦手です!」という人が多いようですが、それならばこそ、この問題を通して苦手を克服してください。 苦手を克服すれば、確実に得点アップにつながるからです。

 

2 の補数表現は、マイナス符号を使わずに 0 と 1 だけでマイナスの数を表す仕組み です。

2 の補数表現では、2 進数の最上位桁を「符号ビット」と呼び、符号ビットが 0 ならプラスの数を表し、 1 ならマイナスの数を表します。

問題に示された 11010000 は、最上位桁が 1 なので、マイナスの数を表しています。

ここまでは、OK でしょうか?

 

算術右シフトは、右方向つまり下位桁に桁をずらして、割り算を行うことです。

その際に、桁をずらしても符号ビットが変わらないように、符号ビットを除いた部分をシフトします。 そして、シフトして空いた上位桁には、符号ビットと同じ数を入れます。

ここでは、 11010000 を 2 ビット算術右シフトするのですから、

最上位桁の [ 1 ] 1010000 を除いた
1 [ 1010000 ] の部分を下位桁に 2 桁ずらして
1 [ xx10100 ] とし、
空いた上位桁の
1 [ xx ] 10100 の部分に符号ビットと同じ 1 を入れて、
1 [ 11 ] 10100
にします。

空いた桁に符号ビットと同じ値を入れることで、ちゃんと割り算の結果になるのです。

ここまでは、OK でしょうか?

 

もう少しで問題が解けますから、がんばってください。

11010000 を 2 ビット算術右シフトした結果は、
11110100 になりました。 符号ビットが 1 なので、 11110100 は、マイナスの数です。

これを 00010100 から引くのですから、 11110100 を同じ絶対値のままプラスの値にして足せばよいことになります。

マイナスの数を引くのは、同じ絶対値のプラスの数を足すことと同じだからです。

たとえば、 8 -( -5 )は、8 + 5 です。

ここまでは、OK でしょうか?

 

2 の補数表現では、「反転して 1 を足す」という操作を行うことで、同じ絶対値のまま、プラスの数をマイナスの数に、マイナスの数をプラスの数に変換できます。

11110100 を反転する( 0 を 1 に、 1 を 0 にする)と、
00001011 です。
00001011 に 1 を足すと、
00001100 です。

したがって、結果は、
00010100 + 00001100 = 00100000
となり、ウが正解です。 いかがでしょう。

何となくわかったなら、実際に、手作業で計算を行ってみてください。 そうすれば、きっと 2 の補数表現と算術右シフトをマスターできるはずです!

解答

関連タグsearch: 2 進数

厳選問題looks_two探索アルゴリズムの計算量のオーダを覚えよう

問 3 (平成 24 年度 秋期)

探索方法とその実行時間のオーダの適切な組合せはどれか。 ここで,探索するデータの数を n とし,ハッシュ値が衝突する (同じ値になる) 確率は無視できるほど小さいものとする。 また,実行時間のオーダが n2 であるとは,n 個のデータを処理する時間が cn2 (c は定数) で抑えられることをいう。

2 分探索 線形探索 ハッシュ探索
log2n n 1
nlog2n n log2n
nlog2n n2 1
n2 1 n
解説

あれこれ難しそうなことが書かれていますが、この問題のテーマは「計算量のオーダ」です。

「計算量」とは、計算の量、つまり処理回数のことで、同じ目的のアルゴリズムを比較するために使われます。

 

基本情報技術者試験では、「データが n 個ある場合の最大の処理回数を n を使った式で示したもの」を 計算量 とします。

実際の処理回数は、
2n2 + 5n + 7
のように係数や定数を持つものとなりますが、それらを省略して、さらに最大の次数で示します。

2n2 + 5n + 7 という処理回数の場合は、係数と定数を省略して
n2 + n
とし、さらに最大の次数である
n2
で示します。 これが「オーダ」です。 オーダ( order )は、直訳すると「次数」や「規模」という意味です。

 

この問題は、探索という同じ目的を持った「二分探索」「線形探索」「ハッシュ探索」という 3 つのアルゴリズムのオーダを知っていますか? という内容です。

線形探索のオーダが、最もわかりやすいので、まず、それでオーダのイメージをつかんでください。

線形探索は、「配列の先頭から順に 1 つずつ要素をチェックする」というアルゴリズムです。

要素が 10 個あれば、最大で 10 回の処理を行います。
要素が 100 個あれば、最大で 100 回の処理を行います。
要素が n 個あれば、最大で n 回の処理を行います。

したがって、線形探索のオーダは n です。

図 線形探索のオーダは n である

次は、ハッシュ探索です。

ハッシュ探索は、「データの値に計算式を適用して格納場所を決める」というアルゴリズムです。

たとえば、「データの値を 10 で割った余りを求める」という計算式を適用すれば、

58 というデータの格納場所は、
58 mod 10 = 8
になります( mod は、割り算の余りを求める演算子だとします)。

この仕組みから、ハッシュ探索のオーダは、理想的には 1( 1 回の処理で目的の値が見つかる)です。 データの値がわかれば、 1 回の処理で格納場所がわかるからです。

 

ここで「理想的」と断っているのは、後から同じ格納場所になってしまうデータが生じた場合は、別の場所に格納することになるので、 1 回の処理で格納場所がわからないからです。

そこで、問題文には、「ハッシュ値が衝突する(同じ値になる)確率は無視できるほど小さいものとする」と示されています。

「ハッシュ値」とは、計算式で得られた格納場所のことです。 これが同じ値になる確率が無視できるほど小さいのですから、ここでは、ハッシュ法のオーダは 1 で OK です。

図 ハッシュ法のオーダは理想的には 1 である

最後に二分探索のオーダです。 これは、
log2n
という表現になります。

log は、高校で習ったはずですが、意味を覚えていますか?

もしも、忘れてしまったら、
log2n は、 n 個のものを 1 個にする分割回数である」
ということと、
具体例として
log28 = 3( 8 個のものを 1 個にする分割回数は 3 である)
を覚えてください。

要素数 8 個の配列は、

1 回目の分割で 8 個が 4 個になり、
2 回目の分割で 4 個が 2 個になり、
3 回目の分割で 2 個が 1 個になります。

この最後の 1 個までチェックするのが、最大の処理回数になります。

二分探索は、「探索対象の真ん中の値をチェックし、その結果から探索対象を二分割して絞り込むことを繰り返す」というアルゴリズムです。 だから、二分探索の計算量は、log2n なのです。

図 二分探索のオーダは分割回数を意味する log2n である

以上のことから、正解はアです。

解答

関連タグsearch: アルゴリズム

厳選問題looks_3ビット数とコードのイメージをつなげよう

問 4 (平成 24 年度 秋期)

英字の大文字 ( A ~ Z ) と数字 ( 0 ~ 9 ) を同一のビット数で一意にコード化するには,少なくとも何ビットが必要か。
ア 5  イ 6  ウ 7  エ 8

解説

「コード化(符号化)」とは、本来は数値でない情報を、数値に置き換えて表すことです。 置き換えられた数値を「コード」と呼びます。

この問題は、文字と数字を 2 進数のコードにするには、何ビット( 2 進数で何桁)が必要になるかを答えるものです。

 

2 進数の 1 ビットは、 0 と 1 の 2 種類のコードを表せます。

2 ビットなら
00 、 01 、 10 、 11 の 4 種類
3 ビットなら
000 、 001 、 010 、 011 、 100 、 101 、 110 、 111 の 8 種類

つまり、 1 ビットで 2 種類のコードを表せ、その後はビット数が 1 桁増えるごとに表せるコードの種類が 2 倍になるのです。

選択肢に示された 5 ビット、6 ビット、7 ビット、8 ビットで表せるコードの種類は、以下のようになります。

5 ビット
2 × 2 × 2 × 2 × 2 = 32 種類
6 ビット
2 × 2 × 2 × 2 × 2 × 2 = 64 種類
7 ビット
2 × 2 × 2 × 2 × 2 × 2 × 2 = 128 種類
8 ビット
2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 種類

A ~ Z の 26 文字と 0 ~ 9 の 10 文字を合わせると 36 文字なので、全部で 36 種類のコードが必要です。

5 ビットの 32 種類では足りません。 6 ビットの 64 種類あれば足りるので、イの 6 ビットが正解です。

解答

 

以下に、36 文字を 6 ビットのコードに置き換えた例を示します。 これを見れば、ビット数とコードのイメージがつながるでしょう。

未使用のコードがあるので、もったいない感じがしますが、5 ビットでは足りないので、6 ビットにしなければなりません。

コード 文字 コード 文字
0 A 10000 Q
1 B 10001 R
10 C 10010 S
11 D 10011 T
100 E 10100 U
101 F 10101 V
110 G 10110 W
111 H 10111 X
1000 I 11000 Y
1001 J 11001 Z
1010 K 11010 0
1011 L 11011 1
1100 M 11100 2
1101 N 11101 3
1110 O 11110 4
1111 P 11111 5
コード 文字 コード 文字
100000 6 110000 (未使用)
100001 7 110001 (未使用)
100010 8 110010 (未使用)
100011 9 110011 (未使用)
100100 (未使用) 110100 (未使用)
100101 (未使用) 110101 (未使用)
100110 (未使用) 110110 (未使用)
100111 (未使用) 110111 (未使用)
101000 (未使用) 111000 (未使用)
101001 (未使用) 111001 (未使用)
101010 (未使用) 111010 (未使用)
101011 (未使用) 111011 (未使用)
101100 (未使用) 111100 (未使用)
101101 (未使用) 111101 (未使用)
101110 (未使用) 111110 (未使用)
101111 (未使用) 111111 (未使用)

厳選問題looks_4仮想記憶のページインとページアウトを手作業で練習しておこう

問 19 (平成 24 年度 秋期)

ページング方式の仮想記憶において,ページ置換えアルゴリズムに LRU 方式を採用する。 主記憶に割り当てられるページ枠が 4 のとき,ページ 1 , 2 , 3 , 4 , 5 , 2 , 1 , 3 , 2 , 6 の順にアクセスすると,ページ 6 をアクセスする時点で置き換えられるページはどれか。 ここで,初期状態では主記憶にどのページも存在しないものとする。

ア 1  イ 2  ウ 4  エ 5

解説

「ページング方式の仮想記憶」とは、プログラムやデータを「ページ」と呼ばれる固定サイズで区切り、実メモリ(主記憶)と仮想メモリ(ハードディスク)の間で、ページの入れ換えをすること です。

実メモリの容量が足りなくなったときに、今度使われる可能性が低いページを仮想メモリに追い出し(ページアウト)、空いたページに必要なページを読み込む(ページイン)のです。

 

具体例が示されて「仮想記憶のページアウトとページインを手作業でやりなさい」という問題は、午前試験にも午後試験にもよく出題されます。

なかなか面倒な作業なので、事前に練習しておかないと戸惑うと思います。 ここでやっておきましょう。

 

この問題では、ページ枠(実メモリのページ数)が 4 個で、LRU 方式でページの入れ換えを行います。

LRU は、Least Recently Used の略で、直訳すると「最も~でない、最近、使われる」であり、わかりやすい言葉にすると「最後に使われてから最も時間が経過したページを入れ換える」です。

 

紙の上に 4 つの枠を書いてください。 これが、実メモリの 4 ページを表します。 最初は、どのページも未使用です。

ここに、 1 、2 、3 、4 、5 、2 、 1 、3 、2 、6 の順にアクセスして(利用して)いきます。

実メモリが空いていれば、そのままページインします。 実メモリが一杯のときは、LRU 方式でページアウトしてからページインします(これがページの入れ換えです)。

この問題では、最後の 6 をアクセスするときにページアウトされるページを答えます。

 

以下に手順を示しますので、やり方がわかったら、実際にやってみてください。 ★ マークは、LRU 方式におけるページアウトの対象となるページを意味しています。 このようなマークを付けるとわかりやすいはずです。

  1. 初期状態
  2. (空き)
    (空き)
    (空き)
    (空き)
  3. 1 をアクセスする( 1 がページインされる)
  4. 1
     
     
     
  5. 2 をアクセスする( 2 がページインされる)
  6. 1
    2
     
     
  7. 3 をアクセスする( 3 がページインされる)
  8. 1
    2
    3
     
  9. 4 をアクセスする( 4 がページインされ、 1 がページアウトの対象になる)
  10. 1 grade
    2
    3
    4
  11. 5 をアクセスする( 1 がページアウトされ、5 がページインされ、2 がページアウトの対象になる)
  12. 5
    2 grade
    3
    4
  13. 2 をアクセスする( 3 がページアウトの対象になる)
  14. 5
    2
    3 grade
    4
  15. 1 をアクセスする( 3 がページアウトされ、 1 がページインされ、4 がページアウトの対象になる)
  16. 5
    2
    1
    4 grade
  17. 3 をアクセスする( 4 がページアウトされ、3 がページインされ、5 がページアウトの対象になる)
  18. 5 grade
    2
    1
    3
  19. 2 をアクセスする
  20. 5 grade
    2
    1
    3
  21. 6 をアクセスする( 5 がページアウトされ、6 がページインされ、 1 がページアウトの対象になる)
  22. 6
    2
    1 grade
    3

6 をアクセスするときにページアウトされるのは、ページ 5 です。 したがって、エが正解です。

解答

関連タグsearch: FIFO LRU LFU

厳選問題looks_5 関係データベースの参照の整合性の意味を覚えよう

問 31 (平成24年度 秋期)

関係データベースの “注文” 表の “顧客番号” は,”顧客” 表の主キー “顧客番号” を参照する外部キーである。 このとき,参照の整合性を損なうデータ操作はどれか。 ここで,ア ~ エの記述におけるデータの並びは,それぞれの表の列の並びと同順とする。

注文
伝票番号 顧客番号
0001 C005
0002 K001
0003 C005
0004 D010
顧客
顧客番号 顧客名
C005 福島
D010 千葉
K001 長野
L035 宮崎
ア ”顧客” 表の行  L035  宮崎  を削除する。
イ ”注文” 表に行  0005  D010  を追加する。
ウ ”注文” 表に行  0006  F020  を追加する。
エ ”注文” 表の行  0002  K001  を削除する。
解説

この問題のテーマは、関係データベースの「参照の整合性」です。

関係データベースの DBMS( Data Base Management System )には、参照の整合性を保つ機能があり、それを損なう操作を受け付けません。

それがどういう意味なのか、この問題を通して覚えてください。

 

関係データベースでは、表に「主キー」を設定します。 主キーは、他と重複しないユニークな列 であり、それによってレコードを特定できます。 注文表では、伝票番号が主キーであり、顧客表では、顧客番号が主キーです。

 

注文表の列には、顧客表の主キーである顧客番号があります。 このような 他の表の主キーを「外部キー」 と呼びます。

「ある表の外部キー」→「他の表の主キー」で、表から表を参照できます。 参照とは、表から他の表をたどることであり、「リレーションシップ」とも呼びます。

図 「ある表の外部キー」→「他の表の主キー」で表から表を参照できる

参照の整合性とは、参照先のレコードが存在するように保つ機能です。

たとえば、先ほどの例で、顧客表の
[ C005 福島 ]
というレコードを削除する操作をすると、注文表の
[ 0001 C005 ]
というレコードからたどれなくなってしまうので(参照ができなくなってしまうので)、その操作を DBMS が受け付けません。

これで、参照の整合性の意味をおわかりいただけましたね。 それでは、選択肢を見てみましょう。

 

選択肢アは、顧客表の[ L035 宮崎 ]というレコードを削除しています。 注文表には[ L035 宮崎 ]を参照しているレコードはないので、参照の整合性は損なわれません。

選択肢イは、注文表に[ 0005 D010 ]というレコードを追加しています。 顧客表には[ D010 千葉 ]というレコードがあるので、参照の整合性は損なわれません。

選択肢ウは、注文表に[ 0006 F020 ]というレコードを追加しています。 顧客表には[ F020 ]という顧客番号のレコードはないので、この操作をすると参照の整合性が損なわれます。 したがって、ウが正解です。

念のため選択肢エも確認しておきましょう。 注文表から[ 0002 K001 ]を削除しても、参照の向きが注文表から顧客表なので、参照の整合性は損なわれません。

解答

関連タグsearch: データベース

記事をお読みいただきありがとうございます。

もしも、一度解いただけでは、よくわからない問題があったなら、わかるまで何度でも練習してください。 「やるべき問題」は「わかるまでやるべき問題」だからです。

この厳選問題大全集が、受験者の皆様のお役に立てば幸いです。

 

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『厳選5題 過去問と解説』の連載一覧 label 著者