On Feb 26, 2009, at 13:00 , Manlio Perillo wrote:

Kenneth Hoste ha scritto:
Hello,
I'm having a go at the Netflix Prize using Haskell. Yes, I'm brave.
[...]
To see if I could efficiently represent the data set in this way, I wrote a small
Haskell program (attached) which uses the following data type:

From what I see, to append a new integer to the Array, you convert the array to a list, append the new element to the list, and then convert to array again.

Isn't this a bit inefficient?

Yes, performance-wise this is terribly inefficient, I agree. But, it was just an artefact of how the raw data is organized.

My main concern was the memory usage of the huge IntMap with UArray elements. Once I solved that, I would be able to get around the performance issue by reorganizing the raw data.

However, as I posted yesterday, I've been able to circumvent the issue by rethinking my data type, i.e. using the ~18K movie IDs as key instead of the 480K user IDs, which radically limits the overhead... That way, I'm able to fit the data set in <700M of memory, without having to reorganize the raw data.

The uvector package implements a vector of unboxed types, and has an snocU operation, to append an element to the array.

I don't know how efficient it is, however.


By the way, about uvector: it has a Stream data type, and you can build a vector from a stream.

Thanks for letting me know, I'll keep this in mind.

greetings,

Kenneth

--

Kenneth Hoste
Paris research group - ELIS - Ghent University, Belgium
email: kenneth.ho...@elis.ugent.be
website: http://www.elis.ugent.be/~kehoste
blog: http://boegel.kejo.be

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to