スポンサーリンク

基本情報技術者試験 | 令和6年度(科目B) [問5] 過去問解説

スポンサーリンク

問題

問5

次のプログラム中の a ~ c に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。

一度の注文で購入された商品のリストを,注文ごとに記録した注文データがある。表に,注文データの例を示す。

注文データから,商品xと商品yとが同一の注文で購入されやすい傾向を示す関連度Lxyを,次の式で計算する。

Lxy = (Mxy × 全注文数) ÷ (Kx × Ky)

ここで,Mxyは商品xと商品yとが同一の注文で購入された注文数,Kxは商品xが購入された注文数,Kyは商品yが購入された注文数を表す。表の例では,MABが2,全注文数が6,KAが4,KBが3であるので,商品Aと商品Bの関連度LABは,(2×6)/(4×3)=1.0である。

手続putRelatedItemは,大域変数ordersに格納された注文データを基に,引数で与えられた商品との関連度が最も大きい商品のうちの一つと,その関連度を出力する。

プログラムでは,商品は文字列で表し,注文は購入された商品の配列,注文データは注文の配列で表している。注文データには2種類以上の商品が含まれるものとする。また,注文データにある商品以外の商品が,引数として与えられることはないものとする。

[出典:基本情報技術者試験 令和6年度(科目B) 問5]

スポンサーリンク

正解

正解は「」です。

解説

 この問題では、注文データに基づき「ある商品 item に最も関連度が高い別の商品」を求めるアルゴリズムを考える問題です。式は次の通りです:

Lxy = (Mxy × 全注文数) ÷ (Kx × Ky)

 ここで使われている変数の意味は以下の通りです:

  • Mxy: 商品 x と y が一緒に注文された回数
  • Kx: 商品 x が登場した注文の数
  • Ky: 商品 y が登場した注文の数
  • 全注文数: 注文の総数(例では 6)

 プログラムを読むと、a, b, c の箇所は以下のように式の構成要素に対応しています:

  • a:Kxに対応 → item(指定された商品)の登場数 → arrayM[i]
  • b:Kyに対応 → 比較対象商品の登場数 → arrayK[i]
  • c:全注文数 → 注文データの配列 orders の要素数 → ordersの要素数

 したがって正しい組み合わせは:

  • a = arrayM[i]
  • b = arrayK[i]
  • c = ordersの要素数

 これは選択肢「オ」に該当します。

ア(arrayK[i], arrayM[i], allItemsの要素数):
 aとbが逆で、cも全注文数ではなく商品数を使っているため不正解です。
イ(arrayK[i], arrayM[i], ordersの要素数):
 aとbが逆になっており、KxとKyが誤って代入されます。
ウ(arrayK[i], arrayM[i], otherItemsの要素数):
 同様にaとbが逆で、cも他商品の個数ではなく全注文数を使うべきなので誤りです。
エ(arrayM[i], arrayK[i], allItemsの要素数):
 aとbは正しいですが、cに入っている全商品数(allItemsの要素数)は全注文数ではないため不正解です。
カ(arrayM[i], arrayK[i], otherItemsの要素数):
 aとbは正しいですが、cが全注文数でないため不正解です。

難易度

 本問は、関連度の計算式の意味と、それをどのようにプログラムで表現しているかを正しく読み取る必要があります。プログラム自体は丁寧に構成されていますが、配列やループ構造に慣れていない初学者にはやや難しく感じられるかもしれません。ただし、式の意味が分かれば論理的に正解にたどり着ける設問です。

スポンサーリンク

用語補足

配列:
複数の値を順序付けて格納できる変数のことです。例えば「注文A, 注文B, 注文C」のようにリスト構造として扱います。

関連度:
2つの要素がどれだけ関係しているかの数値的な指標です。ここでは一緒に買われやすいかどうかを数式で定義しています。

if文:
条件によって処理を分岐させる命令です。「もし〜なら〜する」という形で処理の流れを制御します。

対策

 この問題のように「配列を使った集計処理」や「条件に基づく数式の実装」は、基本情報試験の頻出パターンです。まずは与えられた式の意味を理解し、その構成要素がプログラムのどこに対応しているかを追う練習をしましょう。また、擬似コードに慣れておくとより解きやすくなります。