ITの基礎知識|ITパスポート・基本情報

【データの集計・分析処理】の記事一覧

科目Bに共通する注意事項(表記ルールなど)については、下記のリンク先を参照してください。

基本情報技術者 令和6年公開問題 科目Bの注意事項


問題

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

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

商品 x と商品 y とが同一の注文で購入されやすい傾向を示す関連度 $ L_{xy} $ を,次の式で計算する。

$ L_{xy} = (M_{xy} \times 全注文数) \div (K_x \times K_y) $

ここで,$ M_{xy} $ は商品 x と商品 y とが同一の注文で購入された注文数,$ K_x $ は商品 x が購入された注文数,$ K_y $ は商品 y が購入された注文数を表す。

表の例では,$ M_{AB} $ が 2,全注文数が 6,$ K_A $ が 4,$ K_B $ が 3 であるので,商品 A と商品 B の関連度 $ L_{AB} $ は,$ (2 \times 6) \div (4 \times 3) = 1.0 $ である。

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

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

[プログラム]

大域: 文字列型配列の配列: orders ← {{"A", "B", "D"}, {"A", "D"}, {"A"},
                                     {"A", "B", "E"}, {"B"}, {"C", "E"}}
○putRelatedItem(文字列型: item)
  文字列型の配列: allItems ← orders に含まれる文字列を重複なく辞書順に格納した配列
  文字列型の配列: otherItems ← allItems の複製から値が item である要素を除いた配列
  整数型: i, itemCount ← 0
  整数型の配列: arrayK ← {otherItems の要素数個の 0}
  整数型の配列: arrayM ← {otherItems の要素数個の 0}
  実数型: valueL, maxL ← −∞
  文字列型の配列: order
  文字列型: relatedItem
  for (order に orders の要素を順に代入する)
    if (order のいずれかの要素の値が item の値と等しい)
      itemCount の値を 1 増やす
    endif
    for (i を 1 から otherItems の要素数まで 1 ずつ増やす)
      if (order のいずれかの要素の値が otherItems[i]の値と等しい)
        if (order のいずれかの要素の値が item の値と等しい)
          [ a ]の値を 1 増やす
        endif
        [ b ]の値を 1 増やす
      endif
    endfor
  endfor
  for (i を 1 から otherItems の要素数まで 1 ずつ増やす)
    valueL ← (arrayM[i] × [ c ]) ÷ (itemCount × arrayK[i])
    /_ 実数として計算する _/
    if (valueL が maxL より大きい)
      maxL ← valueL
      relatedItem ← otherItems[i]
    endif
  endfor
  relatedItem の値と maxL の値をこの順にコンマ区切りで出力する

解答群