///*
// * To change this template, choose Tools | Templates
// * and open the template in the editor.
// */
//package arida.ufc.br.moap.function.sim;
//
//
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.Map;
//import java.util.Set;
//
///**
// *
// * @author igobrilhante
// */
//public class CommonItemsSimilarity extends SimilarityFunction {
//
//// private double[][] similarities;
// private double[][] matrix;
// private DefaultDataset dataset;
//// private Map<Object, Integer> indices;
// private Map<Object, Integer> itemIndices;
// private Logger logger = Logger.getLogger(CommonItemsSimilarity.class);
//
// /**
// *
// * @param dataset
// */
// public CommonItemsSimilarity(DefaultDataset dataset) {
// super();
// this.dataset = dataset;
// }
//
// private void initialize() {
// int userCount = 0;
// int itemCount = 0;
//
// this.itemIndices = new HashMap<Object, Integer>();
//
// for (Object u : dataset.getUsers()) {
// indices.put(u, userCount);
// Set<Object> items = this.dataset.getItems(u);
// for (Object item : items) {
// if (!itemIndices.containsKey(item)) {
// itemIndices.put(item, itemCount);
// itemCount++;
// }
// }
// userCount++;
// }
//
//
// int rows = userCount;
// int cols = itemCount;
//
// matrix = new double[rows][cols];
//
// for (int i = 0; i < rows; i++) {
// for (int j = 0; j < cols; j++) {
// this.matrix[i][j] = 0.0;
// }
// }
//
// for (Object u : dataset.getUsers()) {
// int userIndex = indices.get(u);
// Set<Object> items = this.dataset.getItems(u);
// for (Object item : items) {
// int itemIndex = itemIndices.get(item);
// double rating = this.dataset.getRating(u, item);
// this.matrix[userIndex][itemIndex] = rating;
// }
// }
// }
//
// /**
// *
// */
// @Override
// public void execute() {
// // TODO Auto-generated method stub
// logger.info("Common Item Similarity Execute");
// initialize();
// int rows = matrix.length;
// int cols = matrix[0].length;
// similarities = new double[rows][rows];
// for (int i = 0; i < rows; i++) {
// for (int j = i + 1; j < rows; j++) {
// double sim;
// double intersection_size = 0.0;
//
// for (int k = 0; k < cols; k++) {
// if(matrix[i][k] > 0 && matrix[j][k] > 0){
// intersection_size++;
// }
// }
//
// sim = intersection_size;
//
// this.similarities[i][j] = sim;
// this.similarities[j][i] = sim;
// }
// }
// logger.info("Common Item Similarity Execute End");
// }
//
//
//
//// @Override
//// public double[][] getSimilarities() {
//// // TODO Auto-generated method stub
//// return this.similarities;
//// }
////
// @Override
// public double getSimilarity(Object o1, Object o2) {
// // TODO Auto-generated method stub
//
// double sim = 0.0;
//
// Set s1 = this.dataset.getItems(o1);
// Set s2 = this.dataset.getItems(o2);
//
// Set intersection = new HashSet(s1);
// intersection.retainAll(s2);
//
// sim = intersection.size();
//
// return sim;
// }
//
// /**
// *
// * @return
// */
// @Override
// public String toString(){
// return CommonItemsSimilarity.class.getName();
// }
//}