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 {