public double userRankSimilarity(User user1, User user2) throws TasteException {
double result = 0, total = 0;
int j = 0, k = 0, l = 0, max = 0;
if (user1 == null || user2 == null) {
throw new IllegalArgumentException("user1 or user2 is null");
}
Preference[] xPrefs = user1.getPreferencesAsArray();
Preference[] yPrefs = user2.getPreferencesAsArray();
if (xPrefs.length == 0 || yPrefs.length == 0) {
return Double.NaN;
}
ArrayList
ArrayList
max = xPrefs.length < yPrefs.length ? xPrefs.length : yPrefs.length;
for (int i = 0; i < max; i++) {
int compare = xPrefs[j].getItem().compareTo(yPrefs[k].getItem());
if (compare == 0) {
cxPrefs.add(xPrefs[j]);
cyPrefs.add(yPrefs[k]);
l++;
j++;
k++;
} else if (compare < 0) {
j++;
} else if (compare > 0){
k++;
} else {
System.out.println("hahah");
}
}
//System.out.println("before");
Object[] axPrefs = cxPrefs.toArray();
Object[] ayPrefs = cyPrefs.toArray();
//System.out.println("after");
for (int n = 0; n < l; n++) {
for (int m = n + 1; m < l; m++) {
if ((((Preference)axPrefs[n]).getValue() - ((Preference)axPrefs[m]).getValue()) * (((Preference)ayPrefs[n]).getValue() - ((Preference)ayPrefs[m]).getValue()) < 0) {
total++;
}
}
}
result = 1 - (4 * total) / (l * (l - 1));
return result;
}
No comments:
Post a Comment