topN using a heap

Ilya via Digitalmars-d digitalmars-d at puremagic.com
Mon Jan 18 17:56:54 PST 2016


On Tuesday, 19 January 2016 at 01:04:03 UTC, Andrei Alexandrescu 
wrote:
> On 1/18/16 7:46 PM, Ilya wrote:
>> On Tuesday, 19 January 2016 at 00:38:14 UTC, Timon Gehr wrote:
>>> On 01/19/2016 01:12 AM, Ilya wrote:
>>>>>
>>>>
>>>> There is already implementation with predictable seed. Proof:
>>>> https://github.com/D-Programming-Language/phobos/blob/master/std/random.d#L1151
>>>>
>>>> --Ilya
>>>
>>> The default RNG is seeded with unpredictableSeed. What is the 
>>> point
>>> you are trying to make?
>>
>> unpredictableSeed is initialized only once and can be easily 
>> estimated.
>> --Ilya
>
> https://github.com/D-Programming-Language/phobos/blob/v2.069.2/std/random.d#L1120
>
> unpredictableSeed uses MinstdRand0. The sources of randomness 
> used for initializing MinstdRand0 are the PID, the thread ID, 
> and the system time at the moment of the seeding. Then at each 
> subsequent call to unpredictableSeed, the time of the call is 
> XORed with the current value of the MinstdRand0.
>
> How do you think things could be improved?
>
>
> Andrei

A good variant with minimal overhead is to call unpredictableSeed 
for sorting big arrays each time (one seed per array):
    a. A hacker would not be able to estimate a seed using other 
API calls. For example, "give me a set of random numbers".
    b. A hacker would not be able to estimate a seed using a small 
arrays because they don't use RNGs. (and they have not any 
overhead!)
    c. A hacker would not be able to estimate a seed for big 
arrays, because attack based on time measurement would not work 
for big arrays.

EDIT:
   c. ... because each big array has own seed and time measurement 
would not work for big arrays with different seeds.

__EDIT2__:
To be fair (c) is not really correct. To do (c) correct a thread 
local global seed should be used to generate unpredictableSeed 
for each big arrays.

Ilya


More information about the Digitalmars-d mailing list