メインコンテンツへスキップ
基本情報技術者令和6年度 CBT科目B問 5計算

令和6年度 CBT 基本情報技術者 科目B 問5

難度標準

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

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

注文番号購入された商品のリスト
1A, B, D
2A, D
3A
4A, B, E
5B
6C, E

注文データから、商品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 種類以上の商品が含まれるものとする。また,注文データにある商品以外の商品が,引数として与えられることはないものとする。

〔プログラム〕

// 注文データ(ここでは表の例を与えている)
大域: 文字列型配列の配列: orders ← {{"A", "B", "D"}, {"A", "D"}, {"A"},
                                     {"A", "B", "E"}, {"B"}, {"C", "E"}}

○putRelatedItem(文字列型: item)
  文字列型の配列: allItems ← ordersに含まれる文字列を
                              重複なく辞書順に格納した配列
                              // 表の例では {"A", "B", "C", "D", "E"}
  文字列型の配列: 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の値をこの順にコンマ区切りで出力する

選択肢

解説

結論 → 詳細 → 補足 の 3 層構成

展開
結論Layer 1

aの行は、現在の注文にitemとotherItems[i]の両方が含まれる場合に実行されます。両商品が同一注文で購入された回数Mxyを数えるので、aはarrayM[i]です。

詳細Layer 2
展開

bの行は、現在の注文にotherItems[i]が含まれる場合に実行されます。相手商品が購入された注文数Kyを数えるので、bはarrayK[i]です。itemCountはKxに対応します。

補足Layer 3
展開

式の分子はMxy×全注文数です。ordersは注文の配列なので、全注文数はordersの要素数です。allItemsやotherItemsは商品の種類の数であり、注文数ではありません。したがってa=arrayM[i]、b=arrayK[i]、c=ordersの要素数のオです。

この解説は?
AI生成

解説は公式の問題文・公式解答を基に作成しています。 事実誤認・選択肢の取り違え・最新法令の反映漏れ等を含む可能性があるため、 重要な判断は必ずリンク先の公式資料でご確認ください。

最終更新:

検証プロセス・誤り報告フローは 運営透明性レポートで公開しています。

分野「アルゴリズムとプログラミング」の学習ポイント

この問題の理解を「分野全体の力」に広げるための足がかり

何が問われるか
計算量(O 記法)・基本データ構造・典型アルゴリズム(探索・整列)・再帰の挙動を読む力。
学習の進め方
擬似コードを実際にトレースして変数の遷移を表に書き出す習慣を付ける。スタック/キュー/木の図示が定着の鍵。
関連キーワード
計算量二分探索クイックソート再帰スタックキュー木構造
この分野の問題をもっと解く
AI コパイロット

この問題を AI と深掘りする

用語解説・選択肢分析・類題生成をその場で対話。クイズモードでは解答→解説がゼロ遷移。

クイズモードで開く

関連する問題

アルゴリズムとプログラミング の他の問題

他年度の「アルゴリズムとプログラミング」問題

基本情報技術者 の同じ分野を年度をまたいで演習する

基本情報技術者 の学習ガイド