Using this script:
(Dictionary allInstances inject: 0 into: [ :r :e | r + e size ]) /  
Dictionary allInstances size asFloat

I get 14.23 in my image.

Using this script:
(Set allInstances inject: 0 into: [ :r :e | r + e size ]) / Set  
allInstances size asFloat

I get 0.49

Cheers,
Doru

On 4 Dec 2009, at 11:49, Lukas Renggli wrote:

> I posted these numbers a while ago.
>
> In my image the average length of a Dictionary is 10, the average
> length of a Set is 1.2.
>
> Lukas
>
>
> 2009/12/4 Stéphane Ducasse <[email protected]>:
>> I would be curious to see the average length of dictionary keys   
>> (except Smalltalk)
>> and see the performance penalty between set and array for the do:
>>
>> Stef
>>
>>> 2009/12/4 Lukas Renggli <[email protected]>:
>>>> Actually the code can be further optimized:
>>>>
>>>> Dictionary>>keys
>>>>        "Answer a Set containing the receiver's keys."
>>>>
>>>>        | result container |
>>>>        result := Set basicNew setTally: tally array: array copy.
>>>>        container := result array.
>>>>        1 to: container size do: [ :index |
>>>>                (container at: index)
>>>>                        ifNotNil: [ :assoc | container at: index  
>>>> put: assoc key ] ].
>>>>        ^ result
>>>>
>>>> This is roughly 22 times faster than the current implementation,  
>>>> and 5
>>>> times faster than the squeak implementation.
>>>>
>>>> The system doesn't seem to break with this change :-)
>>>>
>>>> Lukas
>>>>
>>>
>>> Yes Levente considered this implementation as keysAsSet, but did not
>>> pushed it in trunk so far.
>>> You must also consider that each further usage of a Set will add a
>>> performance penalty vs an Array, especially do:
>>>
>>> Nicolas
>>>
>>>> 2009/12/4 Lukas Renggli <[email protected]>:
>>>>> I wonder if ever something along the following lines was  
>>>>> considered?
>>>>>
>>>>> Dictionary>>keys
>>>>>        "Answer a Set containing the receiver's keys."
>>>>>
>>>>>        | result |
>>>>>        result := Set basicNew.
>>>>>        result setTally: tally array: (array collect: [ :each |
>>>>>                each isNil ifFalse: [ each key ] ]).
>>>>>        ^ result
>>>>>
>>>>> This returns a Set, so it wouldn't break any semantics. In my
>>>>> benchmark this is roughly 8x faster than the current  
>>>>> implementation,
>>>>> and 2x faster than the optimized Squeak implementation.
>>>>>
>>>>> The drawback is that it makes some heavy assumptions on the  
>>>>> internal
>>>>> structure of Dictionary, Association and Set.
>>>>>
>>>>> Lukas
>>>>>
>>>>> 2009/12/4 Henrik Sperre Johansen <[email protected]>:
>>>>>> A small addendum ;)
>>>>>> On 03.12.2009 22:13, Nicolas Cellier wrote:
>>>>>>> 3) identify thise sending a potential inefficient message  
>>>>>>> (includes:)
>>>>>>> insert keys asSet in this case (only if includes: is in a loop!)
>>>>>>>
>>>>>>>
>>>>>> 3b. If the keys collection isn't used for anything else, change  
>>>>>> to use
>>>>>> includesKey: instead.
>>>>>>
>>>>>> Cheers,
>>>>>> Henry
>>>>>>
>>>>>> _______________________________________________
>>>>>> Pharo-project mailing list
>>>>>> [email protected]
>>>>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Lukas Renggli
>>>>> http://www.lukas-renggli.ch
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Lukas Renggli
>>>> http://www.lukas-renggli.ch
>>>>
>>>> _______________________________________________
>>>> Pharo-project mailing list
>>>> [email protected]
>>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> [email protected]
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
>
> -- 
> Lukas Renggli
> http://www.lukas-renggli.ch
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

--
www.tudorgirba.com

"No matter how many recipes we know, we still value a chef."







_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to