商品の関連度を求める処理【基本情報技術者試験 科目B 公開問題】

令和6年度 基本情報技術者試験 公開問題 科目B 問5のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bの公開問題を題材に,商品の関連度を求める処理について学習します。この問題では,注文データを集計し,指定した商品と一緒に購入されやすい商品を求める処理を確認します。

広告

令和6年度 基本情報技術者試験 公開問題 科目B 問5

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

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

「令和6年度 基本情報技術者試験 公開問題 科目B 問5」の問題_画像01

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

「令和6年度 基本情報技術者試験 公開問題 科目B 問5」の問題_画像02

 ここで,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の値をこの順にコンマ区切りで出力する

解答群

a

b

c

arrayK[i]arrayM[i]allItemsの要素数
arrayK[i]arrayM[i]ordersの要素数
arrayK[i]arrayM[i]otherItemsの要素数
arrayM[i]arrayK[i]allItemsの要素数
arrayM[i]arrayK[i]ordersの要素数
arrayM[i]arrayK[i]otherItemsの要素数

【解答】

【解説】

このプログラムは,商品間の関連度を計算し,引数で指定した商品と最も関連度が高い商品を求める。まず,arrayK[i] には otherItems[i] が含まれる注文数を,arrayM[i] には item と otherItems[i] が同じ注文に含まれる注文数を格納する。そのため,item と otherItems[i] が同じ注文に含まれる場合は arrayM[i] を1増やし,otherItems[i] が含まれる場合は arrayK[i] を1増やす。したがって,a には arrayM[i],b には arrayK[i] が入る。

また,関連度 Lxy は「同じ注文に含まれる注文数 × 全注文数 ÷ (商品xの注文数 × 商品yの注文数)」で求める。プログラムでは,arrayM[i] が同じ注文に含まれる注文数,itemCount が商品xの注文数,arrayK[i] が商品yの注文数を表している。そのため,c には全注文数を表す orders の要素数が入る。

「令和6年度 基本情報技術者試験 公開問題 科目B 問5」の解答_画像

この問題のポイント

 この問題から学べることは,

  • 注文データから商品を含む注文数を集計する方法
  • 2つの商品が同じ注文に含まれる回数を集計する方法
  • 数式の各項とプログラム中の変数を対応させる方法
  • 関連度を比較して最大値の商品を求める方法

です。特に,問題文で示された関連度の式とプログラムを対応させ,arrayM[i],arrayK[i],itemCount,ordersの要素数が,式のどの部分に対応しているかを理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告