植物 植物
直前対策講座:名前頻度表作成

AOBA's Information Processing Education



1998/06/21

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


「平成5年第2種 秋期 午後 問1」

問5 次の流れ図の説明及び流れ図を読んで、設問に答えよ。

[流れ図の説明]
 新生児ファイルを読み込んで、新生児に付けられた名前と、その名前の出現頻度を求め、表に登録する。

  1. 新生児ファイルの各レコードには、新生児の名前(姓名の名の部分)が一つ格納されている。この名前を流れ図ではRと呼ぶ。
  2. 求めた名前と頻度は、それらの組を要素とする1次元の名前頻度表に、名前の昇順に格納する。
  3. 名前頻度表のk番目の要素の名前をNk,頻度をHkと呼ぶ(ただし、k=1,2,3,...)。
  4. 新生児ファイルには、1件以上のレコードが格納されている。
  5. 名前頻度表は、十分大きく、あふれることはない。

[設問]
 流れ図中の( a )( c )に入れるべき正しい答えを、解答群の中から選び、その記号を記入せよ。

解答群
 ア k=1        イ k=m
 ウ k=nエ k>n
 オ k<nカ sw>0
 キ sw=0ク sw=1
 ケ sw=2コ R→Nm-1
 サ R→Nmシ R→Nm+1

図


解説

 アルゴリズムを問われる問題でまず考えるべき点は、「問題の処理を行って得られる最終的な結果は何か」です。
 当り前と思われるかもしれませんが、これが結構難しいのです。流れ図やプログラム言語の問題が苦手という方は、これを正確に把握せずに解答しようとします(ただし、今週の問題は簡単でしたね)。
 今週の問題の最終的な結果は以下の通りです。

[流れ図の処理の最終的な結果例]

N(名前)H(頻度)
アイコ
アキ12
アキコ
アキラ
......
ルリ
ルリコ
レイコ28

 この表は、読み込んだレコード中の”名前”を項目Nで、同じ名前の出現回数を項目Hで表したものです。また表の要素順は名前の昇順になります。
 問題文を読んで、この表をはっきりと頭に思い浮かべることができるようになってから解答に移りましょう(情報処理技術以前に文章読解力が必要です)。

aについて
 ( a )の比較条件が”Yes”の場合、Hkのカウントアップだけを行っています。ということは、この比較条件が”Yes”になるのは、すでに同じ名前が表に登録されていた場合、ということが分かります。この点を頭に置いて探索ルーチンを見てみましょう。
 探索ルーチンの真ん中あたりに”R:Nk”の比較条件があります。Rは読み込んだレコードの名前で、Nkは表に登録されている名前です。ここで名前の一致を判定して、両者が一致した場合は”2→sw”の処理を行っています。
 つまり、すでに表に登録されている名前を読み込んだ場合はswが2になって探索ルーチンから復帰するのですから、( a )の比較条件は”sw=2”です。
 ところで、探索ルーチンはswだけが出力データではありません。kも出力データです。このkは、名前が一致した場合は一致した名前が存在する要素位置を表し、一致しなかった場合は読み込んだ名前を挿入する要素位置を表します。以下の例を見てください。

[名前が一致しない場合の例]
 読み込んだレコードの名前:アキコ

N(名前)H(頻度)
アイコ
アキ
アキラ
アサコ
......

 この場合k=1から順に探索すると、k=3の時初めて”アキコ”<”アキラ”となって探索ルーチンから復帰します(swが1になるから)。この時のk(=3)は”アキコ”を挿入すべき要素位置です。

bについて
 kの意味が正しく理解できれば( b )は解答できたも同然です。
 移動ループは、挿入する要素の後方の要素を一つずつ後方に移動する処理を行っています。mは最初(移動ループに入る前)表の最終要素位置に初期設定され(”n→m”)、要素を移動しては1つカウントダウンします。
 移動ループで変化するのはmですから、( b )の中にはkとmの比較条件が入るはずです。解答群を見るとkとmを使った比較条件は”k=m”しかありませんので、求める答えは”k=m”です(実際、k=mになった時に移動が終了して、挿入する要素位置が空く)。

cについて
 最後の( c )は挿入する要素位置に名前Rを設定する処理ですが、解答群には、”R→Nm-1”,”R→Nm”,”R→Nm+1”の微妙な3つの選択肢があり、良く考えて解答しなければなりません。
 ここで、探索ループから復帰した時のkの意味をもう一度考えてみましょう。kは挿入する要素位置を意味するのですから、本来( c )には、”R→Nk”の処理が入るはずです。
 ところがこの選択肢がありませんので、kと等しくなる値を考える必要があります。
 結論を言えば、移動ループを脱出して( c )に入った時、kとmの値は一致しています(k=mで脱出するから)。よって求める答えは”R→Nm”です。

 今週は以上です。
 また来週。


解答

a−ケ  b−イ  c−サ