欧式算法之用户推荐的协同过滤推荐java版
package com.wk.xietongguolue; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; public class Data { static String[] films = { "十面埋伏", "一路向北", "那些年我们一起追过的女孩", "CCAV", "非诚勿扰" }; static String[] users = { "aaa", "bbb", "ccc", "ddd", "葛二蛋" }; static Map score = new HashMap(); static Set userSet = new HashSet(); static Set filmSet = new HashSet(); static { for (String str : Data.users) { userSet.add(str); } for (String str : Data.films) { filmSet.add(str); } score = getScore(); } public static void outNearbyUserList(String user) { Map scores = new HashMap(); for (String tempUser : users) { if (tempUser.equalsIgnoreCase(user)) { continue; } double score = getOSScore(user, tempUser); scores.put(tempUser, score); } System.out.println(scores.toString()); } private static Double getOSScore(String user1, String user2) { HashMap user1Score = (HashMap) score.get(user1); HashMap user2Score = (HashMap) score.get(user2); double totalscore = 0.0; Iterator it = user1Score.keySet().iterator(); while (it.hasNext()) { String film = (String) it.next(); int a1 = (Integer) user1Score.get(film); int a2 = (Integer) user1Score.get(film); int b1 = (Integer) user2Score.get(film); int b2 = (Integer) user2Score.get(film); int a = a1 * a2 - b1 * b2; //System.out.println(Math.abs(a)); totalscore += Math.sqrt(Math.abs(a)); } return totalscore; } private static Map getScore() { Map score = new HashMap(); // aaa HashMap tempScore = new HashMap(); tempScore.put(films[0], 9); tempScore.put(films[1], 1); tempScore.put(films[2], 9); tempScore.put(films[3], 7); tempScore.put(films[4], 1); score.put(Data.users[0], tempScore); // bbb tempScore = new HashMap(); tempScore.put(films[0], 2); tempScore.put(films[1], 9); tempScore.put(films[2], 2); tempScore.put(films[3], 2); tempScore.put(films[4], 2); score.put(Data.users[1], tempScore); // ccc tempScore = new HashMap(); tempScore.put(films[0], 9); tempScore.put(films[1], 9); tempScore.put(films[2], 9); tempScore.put(films[3], 3); tempScore.put(films[4], 3); score.put(Data.users[2], tempScore); // ddd tempScore = new HashMap(); tempScore.put(films[0], 4); tempScore.put(films[1], 9); tempScore.put(films[2], 9); tempScore.put(films[3], 4); tempScore.put(films[4], 4); score.put(Data.users[3], tempScore); // 葛二蛋 tempScore = new HashMap(); tempScore.put(films[0], 5); tempScore.put(films[1], 5); tempScore.put(films[2], 5); tempScore.put(films[3], 5); tempScore.put(films[4], 5); score.put(Data.users[4], tempScore); return score; } public static void main(String[] args) { // System.out.println(Data.users[0] + " 与其他人的相似度(分值越低越相似):"); Data.outNearbyUserList(Data.users[0]); } }