@sundi..

Lets put is this way..

Probability of (a1 wins + a1 draws + a1 losses) = 1,

Now,  sample count a1 wins = 46298 ( using the above given code)
                Hence, the probability (win) = 46298/474552 = .097561
[ @ Don - as i mentioned in my previous post that i had initially
missed a factor 2, hence the above calculated value shall justify
that]

Based on explanation given in the previous post, you can use the same
approach and find out the sample count for a1's draw and loss..

Add the following code snippet to calculate the same:

// Draws ( a1 = a2 + a3 )

int sampleCount2 = 0;
for(int i =0; i <23; ++i)
{
    for(int j = 0; j <i; ++j)
    {
        if(i - j == j)
           sampleCount2 += a[j] * a[j] * a[i];
        else if (i - j > j)
           sampleCount2 += 2 * a[j] * a[i-j] * a[i];
    }
}

// Losses ( a1 < a2 + a3 )

int sampleCount3 = 0;
for(int i =0; i <23; ++i)
{
   for(int j = 0; j <23; ++j)
   {
      if (i - j + 1 ==j)
      {
         sampleCount3 += a[j] * a[j] * a[i];
         sampleCount3 += 2 * a[j] * (b[22] - b[i-j+1]) * a[i];
      }
      else if(i - j + 1 > j)
      {
          // this is a special case as both i and j are smaller than
          // (i - j + 1)
          if ( i==0 && j ==0 )
             sampleCount3 = a[j] * a[j] * a[i];

          sampleCount3 += 2 * a[j] * (b[22] - b[i-j]) * a[i];
      }
      else
      {
         sampleCount3 += a[j] * a[j] * a[i];
         sampleCount3 += 2 * a[j] * (b[22] - b[j]) * a[i];
      }
   }
}

On executing the given snippet you will get:
sampleCount2 = 10184 (draw)
samepleCount3 = 418070 ( loss)

Now, for the probability to be 1:
sampleCount + sampleCount2 + sampleCount3 should be 78^3 (474552)..

Now,
46298 + 10184 + 418070 = 474552 which is equal to (78^3)..


On Jan 23, 2:34 am, Sundi <sundi...@gmail.com> wrote:
> Hi Lucifer,
>           Have you checked the sum of probability of (a winning + b
> winning + c winning + draw)==1 ?
>
> On Jan 22, 2:38 pm, Lucifer <sourabhd2...@gmail.com> wrote:
>
>
>
>
>
>
>
> > @above
>
> > editing mistake.. (btw the working code covers it)
> > /*
> > int j =*1*;
> > for(int i = 0; i < 12 ; i+=2)
> > {
> >     A[i] = A[i+1] = A[22-i] = A[21-i] = j;
> >     ++j;}
>
> > */
> > On Jan 22, 6:53 pm, Lucifer <sourabhd2...@gmail.com> wrote:
>
> > > @Don..
>
> > > Well i will explain the approach that i took to arrive at the
> > > probability..
> > > Well yes u are correct in saying that it doesn't make a lot of sense
> > > but then the no. of wins by a1 keeping in mind that a1 > a2 + a3 is
> > > much less than a1 <= a2 + a3..
> > > Or may be I have gone wrong in calculating the same..
>
> > > Please let me know if u find some issue in the below given
> > > explanation..
>
> > > --------------------------------
> > > now, the given nos. are 1,2,3,4,.....13..
>
> > > Hence, the possible pair sums are 3,4,5,....,25...
>
> > > The total no. of pairs that can  be formed are 13 C 2 = 78.
>
> > > Now, for each pair within 3-25 (including both extremes) lets find the
> > > no. of ways we get to the particular sum.
> > > i.e for 3 its 1 ( 1 + 2)
> > >      for 7 its 3 (1 + 6, 2 + 5, 3 + 4)
>
> > > Lets take an array A[23], to store the count of occurrences for pair
> > > sums (3 - 25)
> > > A[i] -> will store the no. of ways of getting 'i+3' pair-sum
>
> > > A[i] values will be:
> > > i  ->
> > > 0  1  2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
> > > 18  19  20  21  22
>
> > > A[i] ->
> > > 1  1  2   2   3   3   4   4   5   5    6   6    6   5    5    4    4
> > > 3    3    2   2    1    1
>
> > > Now, the above can be generated by using the following code:
>
> > > Lets say the input is stored in X[R] = {1,2, ..., 13}
> > > Here R is 13..
>
> > > Lets say, the array  A is initialized with 0.
>
> > > for (int i = 0; i < R-1; ++i)
> > >   for ( int j = 1; i < R; ++j)
> > >       ++A[ X[i] + X[j] ];
>
> > > Well, as the nos. are continuous , hence we can minimize the
> > > initialization operation as follows
> > > (based on fact that there is a pattern and holds for any set of
> > > continuous nos. from 1 to K)
>
> > > // initialze pair counts.. ( 3 ...  25)
> > > int j =0;
> > > for(int i = 0; i < 12 ; i+=2)
> > > {
> > >     A[i] = A[i+1] = A[22-i] = A[21-i] = j;
> > >     ++j;}
>
> > > a[12] = 6;
>
> > > [ the above code is specifically written for 1 to 13 (K), but you can
> > > generalize it based on ur need.
> > > All you need to do is take care of the last initialization statement
> > > "a[12] = 6;" based on value K (13).]
> > > --------------------------------
>
> > > Now, A[i] basically represent the no. of ways we can get 'i+3' -> lets
> > > say this is a1's current pick.
> > > Now, for sum of a2 and a3's pick to be smaller than a1's we can do the
> > > following:
>
> > > If A[i] is picked by a1, then let a2 pick A[p] where p < i, then the
> > > possible picks by a3 would be
> > > from anywhere b/w A[p] to A[i - p - 1].
> > > Here, there is a catch .. we need to insure that i - p -1 > = p
> > > otherwise the range for a3's pick would be invalid.
> > > Also, the above explanation is based on the assumption that a2 <=a3.
> > > Hence, to complete figure out all the possibilities of  a1, a2 and a3,
> > > we need to do the following..
>
> > > For a given pick by a1 say A[i], then the no. of possiblites such that
> > > a1> a2 + a3 would be:
>
> > > 1) if a2=a3,  A[p] * A[p] * A[i]
> > > 2) if a2!=a3  , 2 * A[p] *( cumulative sum of A[p+1] to A[i - p -1])
> > > *A[i]
> > >                      [ a factor of 2 is multiplied to remove the
> > > assumption a2 < a3 ]
>
> > > Now, once we get the total no. of possibities by the above given
> > > equation, the probability would be:
> > > (No. of possiblites) / (78^3) ..
> > > [ 78 -> 13 C 2]
>
> > > Code:
> > > int a[23];// to store the count
> > > int b[23];// to store the cumulative count
> > > int k = 1;
>
> > > // initialze pair counts.. ( 3 ... 25)
> > > for(int i = 0; i <12; i+=2)
> > > {
> > >     a[i] = a[i+1] = a[22-i] = a[21-i] = k;
> > >     ++k;}
>
> > > a[12] = 6;
>
> > > b[0]=a[0];
>
> > > //cumulative sum
> > > for(int i = 1; i <23; i+=1)
> > > {
> > >    b[i] = b[i-1] + a[i];
>
> > > }
>
> > > // calculate possibilities..
> > > // i =0 (3 :minimum sum pair)... i=22 (25 : max sum pair)
> > > int sampleCount = 0;
> > > for(int i =0; i <23; ++i)
> > > {
> > >     for(int j = 0; j <i; ++j)
> > >     {
> > >        if(i - j - 1 >= j)
> > >        {
> > >             sampleCount += a[j] * a[j] * a[i];
> > >             if (i - j - 1 > j)
> > >                sampleCount += 2 * a[j] * (b[i-j-1] - b[j]) * a[i];
> > >        }
> > >     }
>
> > > }
>
> > > int R = 78*78*78;
> > > printf("probability = %f ", (float)sampleCount / R);
>
> > > --------------------------------------------
> > > Don, as I mentioned in the start that there is possibility i might
> > > have gone wrong in calculation. The fact being that i missed the
> > > factor 2 when i wrote the code.
> > > But, then the main point here is that whether the approach is correct
> > > or not.
> > > ---------------------------------------------
>
> > > On Jan 20, 3:41 am, Don <dondod...@gmail.com> wrote:
>
> > > > You are saying that a1 wins roughly 1 in 20 times? How does that make
> > > > any sence?
> > > > Don
>
> > > > On Jan 19, 2:35 pm, Lucifer <sourabhd2...@gmail.com> wrote:
>
> > > > > @correction:
>
> > > > > Probalilty (a1 wins) = 24575/474552 = .051786
>
> > > > > On Jan 20, 1:30 am, Lucifer <sourabhd2...@gmail.com> wrote:
>
> > > > > > hoping that the cards are numbered 1,2,3,....,13..
>
> > > > > > Probalilty (a1 wins) = 21723/474552 = .045776
>
> > > > > > On Jan 20, 12:47 am, Don <dondod...@gmail.com> wrote:
>
> > > > > > > P= 8800/28561 ~= 0.308112461...
>
> > > > > > > On Jan 18, 7:40 pm, Sundi <sundi...@gmail.com> wrote:
>
> > > > > > > > there are 52 cards.. there are 3 players a1,a2,a3 each player 
> > > > > > > > is given
> > > > > > > > 2 cards each one of A=2...J=11,Q=12,K=13..a user wins if his 
> > > > > > > > sum of
> > > > > > > > cards is greater then the other two players sum.
>
> > > > > > > > find the probability of a1 being the winner?- Hide quoted text -
>
> > > > > - Show quoted text -

-- 
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.

Reply via email to