float Process::calSim(map<float, int> x, map<float, int>y,int i,int j) { cout << "正在第" << i << "个用户和第" << j << "个用户的相似度....."; if (x.size() > y.size()) { float sum = 0; for (auto it = y.begin();it != y.end();it++) { if (x.count(it->first) != 0) { sum += y[it->first] * x[it->first]; } } cout << sum << endl; return sum; } else { float sum = 0; for (auto it = x.begin();it != x.end();it++) { if (y.count(it->first) != 0) { sum += y[it->first] * x[it->first]; } } cout << sum << endl; return sum; }
时间: 2024-04-18 09:31:54 浏览: 33
这段代码是用来计算两个用户项之间的相似度的函数。首先打印一条正在计算第i个用户和第j个用户的相似度的消息。然后判断x和y的大小,如果x的大小大于y的大小,则使用y进行迭代。对于每个y中的元素,如果x中存在相同的键,则将y[it->first]和x[it->first]相乘,并将结果累加到sum中。最后打印sum并返回。如果x的大小小于等于y的大小,则使用x进行迭代,其余部分与前面相同。
相关问题
void Process::createSim()//构建相似度表 { cout << "开始构建相似度表....." << endl; cout << "user_item的大小:" << user_item.size() << endl; for (int i = 0;i <100;i++) { array<float, UserSize> arr; arr.fill(0); for (int j = 0;j < user_item.size();j++) { if (i == j) { arr[j] = 1; } else { float tem = calSim(user_item[i], user_item[j],i,j); arr[j] = tem / (user_item_len[i] * user_item_len[j]); } } user_sim.push_back(arr); } cout << "相似度表构建完成....." << endl;
这段代码是用来构建相似度表的。首先打印一条开始构建相似度表的消息,并输出user_item的大小。然后使用两个嵌套的循环来计算每个用户项之间的相似度。如果i和j相等,就将相似度设为1,否则调用calSim函数计算用户项i和j之间的相似度,并将结果除以user_item_len[i]和user_item_len[j]的乘积。最后将每个用户项的相似度数组添加到user_sim中。最后打印一条相似度表构建完成的消息。
阅读全文