I think it does work, but this code is definitely hard to grok. In my defense it is complex for a reason at least -- performance.
When the end of one list of prefs is reached (the line "if (++xPrefIndex >= xLength)") it does check for an inferrer in the next line. If there is one, it sets "xIndex = Long.MAX_VALUE", and continues. This ensures the rest of the y values are compared against an inferred x value. Step through to convince yourself. Or, if you find I am actually completely wrong do let me know. On Thu, Sep 30, 2010 at 10:20 PM, Abigail Gertner <[email protected]> wrote: > Hello - I noticed something that I think might be a problem with the > userSimilarity computation in the AbstractSimilarity class. After > updating the running sums, the method checks the value of compare and > moves to the next preference value in the list that has the smaller item > index, or both if they are both on the same item. It breaks out of the > loop if it is at the end of the preference list(s) that it needs to get > the next value of. The problem is that it doesn't take into account if > there is a preference inferrer -- if it is at the end of one of the > lists, it will break out of the loop even if there is a preference > inferrer. This results in ignoring the rest of the items in the other > users preferences. > > Am I missing something or does this need to be corrected? > > Thanks for your help, > -Abigail > >
