令和5年試験問題 [科目B]問5
問5解説へ
次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数 calcCosineSimilarity は,いずれも要素数が n(n≧1)である実数型の配列 vector1 と vector2 を受け取り,二つの配列のコサイン類似度を返す。配列 vector1 が {a1,a2,…,an},配列 vector2 が {b1,b2,…,bn} のとき,コサイン類似度は次の数式で計算される。ここで,配列 vector1 と配列 vector2 のいずれも,全ての要素に0が格納されていることはないものとする。〔プログラム〕
コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数 calcCosineSimilarity は,いずれも要素数が n(n≧1)である実数型の配列 vector1 と vector2 を受け取り,二つの配列のコサイン類似度を返す。配列 vector1 が {a1,a2,…,an},配列 vector2 が {b1,b2,…,bn} のとき,コサイン類似度は次の数式で計算される。ここで,配列 vector1 と配列 vector2 のいずれも,全ての要素に0が格納されていることはないものとする。〔プログラム〕
正解 エ問題へ
分野:アルゴリズムとプログラミング
カテゴリ:プログラミングの諸分野への適用
カテゴリ:プログラミングの諸分野への適用
広告
解説
コサイン類似度は、2本のベクトルのどのくらい似ているかを定量的に表すための指標で-1~1の値をとります。機械学習の自然言語処理やクラスタリングの分野において、要素同士の類似度を評価するためなどに使われています。本問のプログラムは、配列 vector1 と vector2 の類似度を判定するプログラムということになります。
プログラムは4つのブロックから成っています。2乗と平方根が行われていることに着目すると、それぞれのブロックが式中の各部分と次のように対応していることがわかります。〔aについて〕
空欄aは分子の値を計算する式が入ります。a1b1 + a2b2 +… は、比較する2つの配列で同じ位置の要素同士を乗算したもの総和なので、空欄aには「vector1[i] × vector2[i]」が当てはまります。
〔bについて〕
空欄bの格納先である変数 denominator は、直後の処理で分子の値(numerator)を割ることにそのまま使われているので、空欄bでは式中の最終的な分母の値を求めなくてはなりません。
変数 denominator には❷の処理で、a12 + a22 +…の平方根が格納されていますから、式どおりにするには、denominator と b12 + b22 +…の平方根 を乗ずれば良いことになります。❸の繰返し処理において、変数 temp には配列 vector2 の各要素の2乗の総和が計算されているので、式中の❸は「temp の平方根」で求めることができます。したがって、空欄bには denominator と temp の平方根を乗じる式が当てはまります。
以上より、適切な組合せは「エ」となります。
プログラムは4つのブロックから成っています。2乗と平方根が行われていることに着目すると、それぞれのブロックが式中の各部分と次のように対応していることがわかります。〔aについて〕
空欄aは分子の値を計算する式が入ります。a1b1 + a2b2 +… は、比較する2つの配列で同じ位置の要素同士を乗算したもの総和なので、空欄aには「vector1[i] × vector2[i]」が当てはまります。
〔bについて〕
空欄bの格納先である変数 denominator は、直後の処理で分子の値(numerator)を割ることにそのまま使われているので、空欄bでは式中の最終的な分母の値を求めなくてはなりません。
変数 denominator には❷の処理で、a12 + a22 +…の平方根が格納されていますから、式どおりにするには、denominator と b12 + b22 +…の平方根 を乗ずれば良いことになります。❸の繰返し処理において、変数 temp には配列 vector2 の各要素の2乗の総和が計算されているので、式中の❸は「temp の平方根」で求めることができます。したがって、空欄bには denominator と temp の平方根を乗じる式が当てはまります。
以上より、適切な組合せは「エ」となります。
広告