zoukankan      html  css  js  c++  java
  • 欧式算法之用户推荐的协同过滤推荐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]);
        }
    }
  • 相关阅读:
    delphi 字符串查找替换函数 转
    Delphi流的操作
    【BZOJ1316】树上的询问 点分治+set
    【BZOJ2406】矩阵 二分+有上下界的可行流
    【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
    【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA
    【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包
    【BZOJ3217】ALOEXT 替罪羊树+Trie树
    【BZOJ1336】[Balkan2002]Alien最小圆覆盖 随机增量法
    【BZOJ3435】[Wc2014]紫荆花之恋 替罪点分树+SBT
  • 原文地址:https://www.cnblogs.com/kunpengit/p/2942684.html
Copyright © 2011-2022 走看看