はじめに
基本情報技術者試験の科目B問題を解くとき、プログラムの意図を正しく理解することが求められる。特に、データ処理の流れや数式の意味を捉えるのが重要だ。
今回は、令和6年公開問題の科目Bに出題された問5「関連度計算プログラム」について考えてみよう。
■ 問題の概要
この問題では、注文データをもとに、ある商品と関連性が高い別の商品を見つけるプログラムが出題されている。
関連度 ( L_{xy} ) は次の式で計算される。
[
L_{xy} = \frac{M_{xy} \times 全注文数}{K_x \times K_y}
]
- ( M_{xy} ) :商品 x と商品 y が同一の注文で購入された注文数
- ( K_x ) :商品 x が購入された注文数
- ( K_y ) :商品 y が購入された注文数
- 全注文数 :orders の要素数(すべての注文数)
この式を基に、プログラムの流れを考える。
■ プログラムの処理
プログラム putRelatedItem
は、与えられた商品(item)について、関連度が最も高い商品を出力する。
1. データ準備
orders
には注文データ(商品リスト)が格納されている。allItems
には、orders に含まれる すべての異なる商品 を 辞書順 に並べた配列が作られる。otherItems
は、allItems
から item を除いたもの 。
2. 購入回数をカウント
itemCount
は、item が含まれる注文数 をカウントする。arrayK[i]
は、otherItems[i]
が含まれる注文数(Ky)。arrayM[i]
は、item
とotherItems[i]
が同じ注文で買われた回数(Mxy)。
3. 関連度の計算
関連度 ( L_{xy} ) を計算し、最大の値を持つ商品を relatedItem
として出力する。
■ 解答の選択
プログラムの空欄に適切な変数を入れる必要がある。
- (a) の部分
arrayM[i]
を 1 増やす処理が適切。Mxy
をカウントするため、arrayM[i]++
になる。- 解答選択肢の
arrayM[i]
を選ぶ。
- (b) の部分
arrayK[i]
を 1 増やす処理。- Ky のカウントとして
arrayK[i]++
になる。 - 解答選択肢の
arrayK[i]
を選ぶ。
- (c) の部分
全注文数
が入るべき部分。orders
の要素数(orders.length
に相当)が適切。- 解答選択肢の
ordersの要素数
を選ぶ。
答え:オ(arrayM[i], arrayK[i], ordersの要素数
)
まとめ
この問題のポイントは、関連度の数式をしっかり理解すること だった。
プログラムの処理は比較的シンプルだが、Mxy
と Ky
のカウントの仕組みを間違えると誤答しやすい。
また、問題文の表記が多少わかりにくい部分があるので、しっかりコードの流れを追って変数の役割を確認することが重要だ。
基本情報技術者試験の科目Bは、コードを理解する力を試される問題が多い。
特に、データ処理系の問題 は毎回出るため、普段から 「データの流れを図解して考えるクセ」 をつけると良い。
本記事が、同じ問題に取り組む人の参考になれば幸いだ。
コメント