Box-muller method is the good solution without a lot of computation overhead
2011/8/8 Puneet Gautam <puneet.nsi...@gmail.com> > You may be right..we cant remove collisions in O(1) time... > > But hey, hash table is still an effective way.. > > > On 8/8/11, Puneet Gautam <puneet.nsi...@gmail.com> wrote: > > Hey avoiding collisions using hash table can be real easy : > > eg: > > if 192 is the no generated let it hash to say index 7 of hash > > table...so when it is again generated, it hashes to the same 7th index > > of hash table, but we have a non zero value already present at that > > index , 192 so we can reject this generated no. and proceed to the > > next one.. > > > > Whereas in an array , avoiding collision is a really hectic way...u > > need to scan all the previously generated no.s for duplicacy...well > > that aint gonna run in O(1) time.. > > > > So implementing hash table reduces that overhead and runs it in O(1) > > time..(it just has to check one if condition)....with a bigger > > constant. > > > > And moreover, we may even dont want an ordered sequence...just put the > > generated no.s in hash table as soon as they are generated...dats it.. > > > > then afterwards display that hash table.. > > > > Did u get me...? > > > > > > On 8/7/11, Gaurav Menghani <gaurav.mengh...@gmail.com> wrote: > >> We can have a sorted sequence and display them in random order, but > >> that is the same problem. How do we display them in random order? We > >> need to have a sequence of random indices, that is the same problem as > >> having random numbers, isn't it. > >> > >> Moreover, I don't think collisions can be avoided in less than O(n). > >> We can have an efficient hash-table, but I am not sure how it can be > >> done in O(1) or better. > >> > >> On Sat, Aug 6, 2011 at 12:37 PM, Puneet Gautam <puneet.nsi...@gmail.com > > > >> wrote: > >>> I rhink to avoid collisions altogether we should generate an ordered > >>> sequence , in a dec. or inc. order and > >>> display them randomly, i mean: > >>> > >>> Let say a[10] contains all the random no.s , map all the 10 indexes to > >>> a hash table and then display the arrays with the hashed index... > >>> > >>> I think it may work... > >>> > >>> what say..? > >>> > >>> > >>> On 8/5/11, Gaurav Menghani <gaurav.mengh...@gmail.com> wrote: > >>>> 1. Get a good seed. > >>>> 2. Increase the degree of the polynomial. > >>>> > >>>> This is no fixed algorithm, if you find that more than T steps have > >>>> passed and a new number has not been generated, you can always change > >>>> the polynomial. And, please remember it is a 'pseudo-random number > >>>> generator'. You can read the theory about PRNGs and LFSRs, all of them > >>>> repeat. > >>>> > >>>> On Fri, Aug 5, 2011 at 7:14 PM, payel roy <smithpa...@gmail.com> > wrote: > >>>>> How do you guarantee termination of your algorithm if duplication > >>>>> occurs > >>>>> ?? > >>>>> > >>>>> On 5 August 2011 18:25, Gaurav Menghani <gaurav.mengh...@gmail.com> > >>>>> wrote: > >>>>>> > >>>>>> You might want to read the theory on Pseudo-Random Number Generators > >>>>>> [0] and Linear Feedback Shift Register [1] > >>>>>> > >>>>>> The basic way of generating a random number is taking up a > >>>>>> polynomial, > >>>>>> f(x) = ax^n + bx^(n-1) + .. + yx + z, and finding f(i + seed) % N, > >>>>>> where i is the ith random number you want, and seed can be anything > >>>>>> random available, for example, you can find the current millisecond > >>>>>> using time.h functions. > >>>>>> > >>>>>> A simple implementation, without the time thing is below: > >>>>>> > >>>>>> #include<iostream> > >>>>>> using namespace std; > >>>>>> > >>>>>> int poly[10],pn,N,M; > >>>>>> int get(int seed) > >>>>>> { > >>>>>> int t=0; > >>>>>> for(int i=0;i<pn;i++) > >>>>>> { > >>>>>> int res=poly[i]; > >>>>>> for(int j=1;j<=(i+1);j++) { res = (res*seed); > >>>>>> if(res>=N) > >>>>>> res%=N; } > >>>>>> t+=res; > >>>>>> if(t>=N) t%=N; > >>>>>> } > >>>>>> t=(t+seed); > >>>>>> t%=N; > >>>>>> return t; > >>>>>> } > >>>>>> > >>>>>> void setup_prng() > >>>>>> { > >>>>>> pn=5; > >>>>>> poly[0]=2; poly[1]=3; poly[2]=5; poly[3]=7; poly[4]=11; > >>>>>> N=200; M=100; > >>>>>> } > >>>>>> > >>>>>> int main() > >>>>>> { > >>>>>> setup_prng(); > >>>>>> for(int i=1;i<=M;i++) > >>>>>> cout<<get(i)<<endl; > >>>>>> return 0; > >>>>>> } > >>>>>> > >>>>>> Whenever there is a collision, you can increment the value passed to > >>>>>> the random number generator and continue. However, I am not sure how > >>>>>> to check for collisions in O(1) space. > >>>>>> > >>>>>> [0] http://en.wikipedia.org/wiki/Pseudorandom_number_generator > >>>>>> [1] http://en.wikipedia.org/wiki/Linear_feedback_shift_register > >>>>>> > >>>>>> On Fri, Aug 5, 2011 at 5:19 PM, payel roy <smithpa...@gmail.com> > >>>>>> wrote: > >>>>>> > Given a range 0-N, generate 'M' random numbers from the range > >>>>>> > without > >>>>>> > any > >>>>>> > duplication. The space complexity is O(1). > >>>>>> > > >>>>>> > -- > >>>>>> > You received this message because you are subscribed to the Google > >>>>>> > Groups > >>>>>> > "Algorithm Geeks" group. > >>>>>> > To post to this group, send email to algogeeks@googlegroups.com. > >>>>>> > To unsubscribe from this group, send email to > >>>>>> > algogeeks+unsubscr...@googlegroups.com. > >>>>>> > For more options, visit this group at > >>>>>> > http://groups.google.com/group/algogeeks?hl=en. > >>>>>> > > >>>>>> > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Gaurav Menghani > >>>>>> > >>>>>> -- > >>>>>> You received this message because you are subscribed to the Google > >>>>>> Groups > >>>>>> "Algorithm Geeks" group. > >>>>>> To post to this group, send email to algogeeks@googlegroups.com. > >>>>>> To unsubscribe from this group, send email to > >>>>>> algogeeks+unsubscr...@googlegroups.com. > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/algogeeks?hl=en. > >>>>>> > >>>>> > >>>>> -- > >>>>> You received this message because you are subscribed to the Google > >>>>> Groups > >>>>> "Algorithm Geeks" group. > >>>>> To post to this group, send email to algogeeks@googlegroups.com. > >>>>> To unsubscribe from this group, send email to > >>>>> algogeeks+unsubscr...@googlegroups.com. > >>>>> For more options, visit this group at > >>>>> http://groups.google.com/group/algogeeks?hl=en. > >>>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> Gaurav Menghani > >>>> > >>>> -- > >>>> You received this message because you are subscribed to the Google > >>>> Groups > >>>> "Algorithm Geeks" group. > >>>> To post to this group, send email to algogeeks@googlegroups.com. > >>>> To unsubscribe from this group, send email to > >>>> algogeeks+unsubscr...@googlegroups.com. > >>>> For more options, visit this group at > >>>> http://groups.google.com/group/algogeeks?hl=en. > >>>> > >>>> > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > >>> Groups > >>> "Algorithm Geeks" group. > >>> To post to this group, send email to algogeeks@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> algogeeks+unsubscr...@googlegroups.com. > >>> For more options, visit this group at > >>> http://groups.google.com/group/algogeeks?hl=en. > >>> > >>> > >> > >> > >> > >> -- > >> Gaurav Menghani > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups > >> "Algorithm Geeks" group. > >> To post to this group, send email to algogeeks@googlegroups.com. > >> To unsubscribe from this group, send email to > >> algogeeks+unsubscr...@googlegroups.com. > >> For more options, visit this group at > >> http://groups.google.com/group/algogeeks?hl=en. > >> > >> > > > > -- > You received this message because you are subscribed to the Google Groups > "Algorithm Geeks" group. > To post to this group, send email to algogeeks@googlegroups.com. > To unsubscribe from this group, send email to > algogeeks+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/algogeeks?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.