You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2012/06/05 21:22:16 UTC
svn commit: r1346542 -
/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/PlusAnonymousUserDataModel.java
Author: srowen
Date: Tue Jun 5 19:22:15 2012
New Revision: 1346542
URL: http://svn.apache.org/viewvc?rev=1346542&view=rev
Log:
Big speedup to sorting of temp prefs for anonymous user data model implementation
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/PlusAnonymousUserDataModel.java
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/PlusAnonymousUserDataModel.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/PlusAnonymousUserDataModel.java?rev=1346542&r1=1346541&r2=1346542&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/PlusAnonymousUserDataModel.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/PlusAnonymousUserDataModel.java Tue Jun 5 19:22:15 2012
@@ -156,18 +156,7 @@ public class PlusAnonymousUserDataModel
}
for (int i = 0; i < tempPrefs.length(); i++) {
if (tempPrefs.getItemID(i) == itemID) {
- int length = delegatePrefs == null ? 0 : delegatePrefs.length();
- PreferenceArray newPreferenceArray = new GenericItemPreferenceArray(length + 1);
- for (int j = 0; j < length; j++) {
- newPreferenceArray.setUserID(j, delegatePrefs.getUserID(j));
- newPreferenceArray.setItemID(j, delegatePrefs.getItemID(j));
- newPreferenceArray.setValue(j, delegatePrefs.getValue(j));
- }
- newPreferenceArray.setUserID(length, tempPrefs.getUserID(i));
- newPreferenceArray.setItemID(length, tempPrefs.getItemID(i));
- newPreferenceArray.setValue(length, tempPrefs.getValue(i));
- newPreferenceArray.sortByUser();
- return newPreferenceArray;
+ return cloneAndMergeInto(delegatePrefs, itemID, tempPrefs.getUserID(i), tempPrefs.getValue(i));
}
}
if (delegatePrefs == null) {
@@ -176,6 +165,37 @@ public class PlusAnonymousUserDataModel
}
return delegatePrefs;
}
+
+ private static PreferenceArray cloneAndMergeInto(PreferenceArray delegatePrefs,
+ long itemID,
+ long newUserID,
+ float value) {
+
+ int length = delegatePrefs == null ? 0 : delegatePrefs.length();
+ int newLength = length + 1;
+ PreferenceArray newPreferenceArray = new GenericItemPreferenceArray(newLength);
+
+ // Set item ID once
+ newPreferenceArray.setItemID(0, itemID);
+
+ int positionToInsert = 0;
+ while (positionToInsert < length && newUserID > delegatePrefs.getUserID(positionToInsert)) {
+ positionToInsert++;
+ }
+
+ for (int i = 0; i < positionToInsert; i++) {
+ newPreferenceArray.setUserID(i, delegatePrefs.getUserID(i));
+ newPreferenceArray.setValue(i, delegatePrefs.getValue(i));
+ }
+ newPreferenceArray.setUserID(positionToInsert, newUserID);
+ newPreferenceArray.setValue(positionToInsert, value);
+ for (int i = positionToInsert + 1; i < newLength; i++) {
+ newPreferenceArray.setUserID(i, delegatePrefs.getUserID(i - 1));
+ newPreferenceArray.setValue(i, delegatePrefs.getValue(i - 1));
+ }
+
+ return newPreferenceArray;
+ }
@Override
public Float getPreferenceValue(long userID, long itemID) throws TasteException {