次のプログラム中の a 〜 c に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。
一度の注文で購入された商品のリストを、注文ごとに記録した注文データがある。
表に、注文データの例を示す。
表 注文データの例
注文番号 | 購入された商品のリスト |
|---|---|
1 | A、B、D |
2 | A、D |
3 | A |
4 | A、B、E |
5 | B |
6 | C,E |
注文データから、商品xと商品yとが同一の注文で購入されやすい傾向を示す関連度 Lxy を、次の式で計算する。
Lxy=Kx×KyMxy×全注文数
ここで、 Mxy は商品xと商品yとが同一の注文で購入された注文数、 Kx は商品xが購入された注文数、 Ky は商品yが購入された注文数を表す。
表の例では、MABが2、全注文数が6、KAが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の要素数 |