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