https://groups.google.com/forum/#!original/comp.lang.java.programmer/Z8lfFIDhS7k/wbPLDldPSSgJ

The Multiply With Carry generator is ok for some purposes. There are 
generators with longer periods and better statistical properties, but they 
are more complicated. The link I provided has code for a 64-bit multiply 
with carry generator, while what I posted was a 32-bit multiply with carry 
generator.

Don

On Saturday, February 8, 2014 2:26:34 AM UTC-5, atul007 wrote:
>
> @don : awesome .... +1 . I was not aware of George Marsaglia's Multiply 
> With Carry generator. But it is soo coooolll . If you have any good link 
> for its proof or explanation of the idea behind it then please mention it.
> I never knew generating random number can be few lines of code :)
> Thanks :)
>
>
>
> On Sat, Feb 8, 2014 at 1:28 AM, Don <dond...@gmail.com <javascript:>>wrote:
>
>> A random generator will not always (or even usually) produce a 
>> permutation of the possible values before repeating. 
>> If you call my function 10 million times and tally up the results, you 
>> will get a distribution with about a million of each value, as close as you 
>> would expect for a random sample.
>> Your question was to randomly generate values in the range 1-10, not to 
>> generate permutations.
>>
>> Here is a way to generate a permutation without swapping:
>>
>> unsigned int X = time(0);
>> int n[10];
>> n[0] = 10;
>> for(i = 1; i < 10; ++i)
>> {
>>    X = 63663 * (X&65535) + (X>>16);
>>    int j = (X & 65535) % (i+1);
>>    n[i] = n[j];
>>    n[j] = i;  
>> }
>>
>> // n now contains a permutation of the values 1-10.
>>
>>
>> On Thursday, February 6, 2014 11:33:53 PM UTC-5, atul007 wrote:
>>
>>> @don: algo look fine..i tested it ,but it did not generate 1-10 with 
>>> probabilty of 1/10 everytime.
>>> actually question was asked in an intrview.
>>> question started with displaying all elements in an array randomly 
>>> without repetition i.e only once( probabilty 1/10)...which can be done with 
>>> fisher yates .
>>> then interviewer said that u are not allowed to swap elements which is 
>>> requied in fishr yates.
>>> his hint was: how will you generate randomly number from 1-10 without 
>>> use of rand() function.
>>> expected time complexity : O(n)
>>> On 7 Feb 2014 03:17, "Don" <dond...@gmail.com> wrote:
>>>
>>>>  Just noticed that you asked for 1-10, and my code will clearly 
>>>> generate 0-9. Add one for the desired range.
>>>> Don
>>>>
>>>> On Wednesday, February 5, 2014 4:29:26 PM UTC-5, Don wrote:
>>>>>
>>>>> // Using George Marsaglia's Multiply With Carry generator
>>>>> int rnd10()
>>>>> {
>>>>>    static unsigned int x = time(0);
>>>>>    x = 63663 * (x&65535) + (x>>16);
>>>>>    return (x & 65535) % 10;
>>>>> }
>>>>>
>>>>> On Sunday, February 2, 2014 2:51:47 AM UTC-5, atul007 wrote:
>>>>>>
>>>>>> Generate random number form 1 - 10 with probability of 1/10.You are 
>>>>>> not allowed to used rand() function.
>>>>>>
>>>>>> any simple way of achieving above with using any complex 
>>>>>> implementation of random number generators algorithm . 
>>>>>>  
>>>>>  -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Algorithm Geeks" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to algogeeks+...@googlegroups.com.
>>>>
>>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Algorithm Geeks" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to algogeeks+...@googlegroups.com <javascript:>.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to algogeeks+unsubscr...@googlegroups.com.

Reply via email to