//package arida.ufc.br.moap.function.sim; // //import arida.ufc.br.moap.function.beans.DefaultDataset; //import arida.ufc.br.moap.functions.spi.SimilarityFunction; //import java.util.HashMap; //import java.util.HashSet; //import java.util.Map; //import java.util.Set; // ///** // * // * @author igobrilhante // * @param <U> // * @param <I> // */ //public class Deviation<U, I> extends SimilarityFunction { // // private DefaultDataset<U, I> dataset; // private Map<I, Map<I, Double>> deviations; // // /** // * @param dataset // */ // public Deviation(DefaultDataset<U, I> dataset) { // this.dataset = dataset; // } // // /** // * @param item_i // * @param item_j // * @return // */ // private void deviation(I item_i, I item_j) { // int card = 0; // double dev_i_j = 0.0; // double dev_j_i = 0.0; // if (!this.deviations.get(item_i).containsKey(item_j)) { // for (U user : dataset.getUsers()) { // Map<I, Double> items = dataset.getItemRatings(user); // if (items.containsKey(item_i) && items.containsKey(item_j)) { // dev_i_j += (items.get(item_i) - items.get(item_j)); // dev_j_i += (items.get(item_j) - items.get(item_i)); // card++; // } // } // // if (card > 0) { // double final_dev_i_j = (double) dev_i_j / card; // double final_dev_j_i = (double) dev_j_i / card; // // this.deviations.get(item_i).put(item_j, final_dev_i_j); // this.deviations.get(item_j).put(item_i, final_dev_j_i); //// return final_dev_i_j; // } else { // this.deviations.get(item_i).put(item_j, 0.0); // this.deviations.get(item_j).put(item_i, 0.0); // } // } //// return 0.0; // } // // /** // * @return // */ // public Map<I, Map<I, Double>> computeDeviation() { //// Set<I> items = this.dataset.getItems(); //// int item_count = 0; // // //// item_count = items.size(); //// this.deviations = new double[item_count][item_count]; // // //// I[] array_items = (I[]) items.toArray(); // this.deviations = new HashMap<I, Map<I, Double>>(); //// for(int i = 0;i<item_count;i++){ //// I item_i = array_items[i]; //// Map<I,Double> dev_i = new HashMap<I, Double>(); //// for(int j=0; j<item_count;j++){ //// I item_j = array_items[j]; //// if(i!=j){ //// double dev = deviation(item_i, item_j); //// dev_i.put(item_j, dev); //// //// } //// } //// deviations.put(item_i, dev_i); //// } // // Set<U> users = this.dataset.getUsers(); // for (U user : users) { // Set<I> user_items = this.dataset.getItems(user); // I[] array_items = (I[]) user_items.toArray(); // for (int i = 0; i < array_items.length; i++) { // I item_i = array_items[i]; // // if (!this.deviations.containsKey(item_i)) { // this.deviations.put(item_i, new HashMap<I, Double>()); // } // // Map<I, Double> dev_i = this.deviations.get(item_i); // // for (int j = 0; j < array_items.length; j++) { // I item_j = array_items[j]; // if (!this.deviations.containsKey(item_j)) { // this.deviations.put(item_j, new HashMap<I, Double>()); // } // Map<I, Double> dev_j = this.deviations.get(item_j); // // deviation(item_i, item_j); //// dev_i.put(item_j, dev); // // } //// deviations.put(item_i, dev_i); // } // } //// System.out.println(deviations); // return deviations; // } // // @Override // public void execute() { // throw new UnsupportedOperationException("Not supported yet."); // } //}