@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