El viernes, 28 de febrero de 2014 08:41:37 UTC-6, Ivar Nesje escribió: > > The documentation states very clear that > IntSet<http://docs.julialang.org/en/latest/stdlib/base/#Base.IntSet> should > only be used for dense collections, and that > Set<http://docs.julialang.org/en/latest/stdlib/base/#Base.Set>, > should be used for sparse collections. >
Agreed. Of course, this was just a toy example to test the limits of IntSet. In the real application that I am working towards, I want to think about systems of size at least 10^5 x 10^5. Mapping pairs (x,y) in this system to a single number gives up to 10^10, which is what I was testing. > > Construct a sorted set of the integers generated by the given iterable >> object, or an empty set. Implemented as a bit string, and therefore >> designed for dense integer sets. If the set will be sparse (for example >> holding a single very large integer), use Set instead. > > > Do you happen to know a nice limit to how much memory IntSet should be > allowed to use? > In this case, it seems to be using more memory than I have available on my machine (4GB on my laptop). I guess my point is that normally I would expect that to give me an out-of-memory error, rather than enter an infinite loop producing garbage. > On my laptop 100 MB would be more than I can afford > Not sure what you mean by that -- doesn't it rather depend on the application? If I am doing a heavy computation on my laptop over night, I am happy for it to use all available memory. > , but that would make IntSet unusable for bigger calculations on bigger > systems, so it should be no smaller than 10 GB. > I have another machine with a lot of memory (128 GB), so I certainly do not want to impose an arbitrary restriction. David. > > Ivar > > kl. 15:16:33 UTC+1 fredag 28. februar 2014 skrev David P. Sanders følgende: >> >> >> I am investigating possible data structures for an application. >> Here is an "interesting" behaviour in IntSet, which is no doubt to do >> with the implementation. >> Maybe it should just throw an exception if someone tries to add a really >> large integer like this! >> >> >> julia> s = IntSet() >> IntSet() >> >> julia> push!(s, 100000) >> IntSet(100000) >> >> julia> sizeof(s) >> 24 >> >> julia> push!(s, 1000000) >> IntSet(100000, 1000000) >> >> julia> sizeof(s) >> 24 >> >> julia> push!(s, 10000000) >> IntSet(100000, 1000000, 10000000) >> >> julia> push!(s, 100000000) >> IntSet(100000, 1000000, 10000000, 100000000) >> >> julia> push!(s, 1000000000) >> IntSet(100000, 1000000, 10000000, 100000000, 1000000000) >> >> julia> sizeof(s) >> 24 >> >> julia> push!(s, 10000000000) >> IntSet(100000, 1000000, 10000000, 100000000, 1000000000, 1410065408, >> 1410065408, 1410065408, 1410065408, 1410065408, 1410065408, 1410065408, >> 1410065408, 1410065408, 1410065408, 1410065408, 1410065408, 1410065408, >> 1410065408, 1410065408, 1410065408, 1410065408^CEvaluation succeeded, but >> an error occurred while showing value of type IntSet: >> ERROR: interrupt >> in show at intset.jl:172 >> in anonymous at show.jl:973 >> in showlimited at show.jl:972 >> in writemime at repl.jl:2 >> in display at multimedia.jl:117 >> in display at multimedia.jl:119 >> in display at multimedia.jl:151 >> >