Author: srowen
Date: Fri Dec  2 16:48:19 2011
New Revision: 1209577

URL: http://svn.apache.org/viewvc?rev=1209577&view=rev
Log:
MAHOUT-910 prelude: commit some clear wins in optimizing calls to 
intersectionSize()

Modified:
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java
    
mahout/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/cassandra/CassandraDataModel.java

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java?rev=1209577&r1=1209576&r2=1209577&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
 Fri Dec  2 16:48:19 2011
@@ -275,7 +275,9 @@ public final class GenericBooleanPrefDat
     if (userIDs2 == null) {
       return 0;
     }
-    return userIDs1.intersectionSize(userIDs2);
+    return userIDs1.size() < userIDs2.size() ?
+        userIDs2.intersectionSize(userIDs1) :
+        userIDs1.intersectionSize(userIDs2);
   }
   
   @Override

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java?rev=1209577&r1=1209576&r2=1209577&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java
 Fri Dec  2 16:48:19 2011
@@ -64,20 +64,23 @@ public final class TanimotoCoefficientSi
     DataModel dataModel = getDataModel();
     FastIDSet xPrefs = dataModel.getItemIDsFromUser(userID1);
     FastIDSet yPrefs = dataModel.getItemIDsFromUser(userID2);
-    
-    if (xPrefs.isEmpty() && yPrefs.isEmpty()) {
+
+    int xPrefsSize = xPrefs.size();
+    int yPrefsSize = yPrefs.size();
+    if (xPrefsSize == 0 && yPrefs.size() == 0) {
       return Double.NaN;
     }
-    if (xPrefs.isEmpty() || yPrefs.isEmpty()) {
+    if (xPrefsSize == 0 || yPrefs.size() == 0) {
       return 0.0;
     }
     
-    int intersectionSize = xPrefs.intersectionSize(yPrefs);
+    int intersectionSize =
+        xPrefsSize < yPrefsSize ? yPrefs.intersectionSize(xPrefs) : 
xPrefs.intersectionSize(yPrefs);
     if (intersectionSize == 0) {
       return Double.NaN;
     }
     
-    int unionSize = xPrefs.size() + yPrefs.size() - intersectionSize;
+    int unionSize = xPrefsSize + yPrefsSize - intersectionSize;
     
     return (double) intersectionSize / (double) unionSize;
   }

Modified: 
mahout/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/cassandra/CassandraDataModel.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/cassandra/CassandraDataModel.java?rev=1209577&r1=1209576&r2=1209577&view=diff
==============================================================================
--- 
mahout/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/cassandra/CassandraDataModel.java
 (original)
+++ 
mahout/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/cassandra/CassandraDataModel.java
 Fri Dec  2 16:48:19 2011
@@ -246,7 +246,9 @@ public final class CassandraDataModel im
   public int getNumUsersWithPreferenceFor(long itemID1, long itemID2) throws 
TasteException {
     FastIDSet userIDs1 = userIDsFromItemCache.get(itemID1);
     FastIDSet userIDs2 = userIDsFromItemCache.get(itemID2);
-    return userIDs1.intersectionSize(userIDs2);
+    return userIDs1.size() < userIDs2.size() ?
+        userIDs2.intersectionSize(userIDs1) :
+        userIDs1.intersectionSize(userIDs2);
   }
 
   @Override


Reply via email to