具体实现过程:
① 前期准备:全局变量
1、 建立一个 struct MovieScore,包括 int 类型的 IDOfMovie(电影编
号)和 int 类型的 ScoreOfMovie。
2、 动态创建 MovieScore 类型的二维数组 Data,行数为用户数量
(19835),用户编号与行号一一对应;列数为该行对应的用户看过
的电影的数量,每行都不相同。
3、 int MovieNum[19835],用来存放每个用户观看的电影数量。
4、 创建一个类型、行数、列数都与 Data 相同的二维数组 PearData。
② Load()函数中使用 getline 逐行读取 train.txt 的数据。
1、 若该行中存在“|”,说明是一个新的用户,读取他看过的电影数目,
存入 MovieNum。并动态创建 Data 中该用户对应行的大小。
2、 若该行中不存在“|”,则是电影信息。将电影编号和电影分数转成 int
类型,按读取顺序存入 Data 中。
③ 调用 SortMovieID()函数,对每一用户看过的电影按电影编号从小到大的顺
序进行排序,便于后续利用二分查找进行查找工作。
④ 在 Pearson()中,利用数组 MovieNum 对每一行进行动态初始化。用 Data
的数据对 PearData 的数据进行相关计算填充。其中电影 ID 全部相同,
PearData[i][j].MovieScore 为 Data[i][j].MovieScore 与“该用户对他看过
的所有电影打分的平均值”之差。
⑤ 计算最终结果中的 r
xi
部分。
遍历所有用户,找到同样看过目标电影的用户,如果该用户与目标用户的