• the Most crowded room --- (expected # of max. Birthday collisions)

From henhanna@gmail.com@21:1/5 to All on Wed Sep 14 14:42:32 2022
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
---> the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
---> the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
---> the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Richard Heathfield@21:1/5 to Anton Shepelev on Thu Sep 15 13:38:19 2022
On 15/09/2022 1:22 pm, Anton Shepelev wrote:
Hen Hanna:

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
---> the Most crowded room is occupied by 5 people. (A)

Your approach as faulty. The number of people in the most
crowded room is a random variable, and only, when the amount
of experiment is infinite can you rely on your simulations.

I did an infinite simulation, which took a while, and it turns
out that the actual answer is 6, possibly because in that room
there was a Charlie's Angels box set binge watch in progress.

--
Richard Heathfield
Email: rjh at cpax dot org dot uk
"Usenet is a strange place" - dmr 29 July 1999
Sig line 4 vacant - apply within

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Anton Shepelev@21:1/5 to All on Thu Sep 15 15:22:49 2022
Hen Hanna:

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

Your approach as faulty. The number of people in the most
crowded room is a random variable, and only, when the amount
of experiment is infinite can you rely on your simulations.

--
() ascii ribbon campaign - against html e-mail
/\ http://preview.tinyurl.com/qcy6mjc [archived]

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Ilan Mayer@21:1/5 to henh...@gmail.com on Thu Sep 15 09:01:46 2022
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?
22 above seems to be wrong.

Analytic values for 1-4 rooms:
1 1
2 1.5 (3/2)
3 1.889 (17/9)
4 2.125 (17/8)

Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Ilan Mayer on Thu Sep 15 18:15:33 2022
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ? ( i may have, but if so, i had forgotten)

100 ppl in 100 (random) rooms --> ~ 63.2 rooms get occupied

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

22 above seems to be wrong.

really ? waht do you propose ?

Analytic values for 1-4 rooms:
1 --- 1
2 --- 1.5 (3/2)
3 --- 1.889 (17/9)
4 --- 2.125 (17/8)

6 --------------- 2.408179012345679

8 -------------- 2.5972328186035156

10 ------------- 2.74868911 (exact number) ----------- a very close match with what you got !

Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Ilan Mayer on Fri Sep 16 10:36:04 2022
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?
22 above seems to be wrong.

Analytic values for 1-4 rooms:
1 1
2 1.5 (3/2)
3 1.889 (17/9)
4 2.125 (17/8)

Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

really nice... i have basically 2 comments.

in my Python code, i was stuck with the idea that i had to use a Dictionary to do the counting (tallying up).
This (what i was doing) must be a much, MUCH slower way to do it.

dic= { }
for digit in Lis:
if (digit in dic): dic[ digit ] += 1
else: dic[ digit ] = 1

MaxVal = max(dic.values())

---------- Also, it must be a bit faster to initialize the Dictionary to all 0's in the beginning.

__________________________________________

py RanDrop.py 100 100
Average maximum bin occupation is 4
py RanDrop.py 1000 1000
Average maximum bin occupation is 5

At first i was getting only integer results (as above), and i had to insert one line
(apparently, to convert the int into a Floating Point number). ( i dn't really get it)

average *= 1.0 <----------------- (i inserted this line.)
average /= trials
print("Average maximum bin occupation is " + str(average))

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to henh...@gmail.com on Fri Sep 16 10:54:28 2022
On Thursday, September 15, 2022 at 6:15:35 PM UTC-7, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ? ( i may have, but if so, i had forgotten)

---------- 100 ppl in 100 (random) rooms --> ~ 63.2 rooms get occupied

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

22 above seems to be wrong.

> really ? waht do you propose ? (or suggest, instead) ?

i inserted two characters [*10] into your program, to find :

Crowded\iMayer> py RanDrop10.py 1000 100
Average maximum bin occupation is 21.56
Crowded\iMayer> py RanDrop10.py 1000 200
Average maximum bin occupation is 21.615
Crowded\iMayer> py RanDrop10.py 1000 400
Average maximum bin occupation is 21.6375
Crowded\iMayer> py RanDrop10.py 1000 1000
Average maximum bin occupation is 21.616

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Jonathan Dushoff@21:1/5 to henh...@gmail.com on Fri Sep 16 12:16:34 2022
0.632 is 1 - e^-1, and it shows up everywhere. For example, it's the proportion of rooms that will be occupied if you randomly drop a large number of people into the same number of rooms.

Jonathan

On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From duncan smith@21:1/5 to duncan smith on Sat Sep 17 17:36:41 2022
On 17/09/2022 17:33, duncan smith wrote:
On 16/09/2022 18:36, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4,
henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most
crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in
SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?
22 above seems to be wrong.

Analytic values for 1-4 rooms:
1 1
2 1.5 (3/2)
3 1.889 (17/9)
4 2.125 (17/8)

Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

really nice...                  i have basically  2 comments.

in my Python code,  i was stuck with the idea that i had to use a
Dictionary to do the counting (tallying up).
This (what i was doing)  must be a much, MUCH slower way to do it.

dic= { }
for digit in Lis:
if (digit in dic):       dic[ digit ] += 1
else:                        dic[ digit ] = 1

MaxVal = max(dic.values())

---------- Also,  it must be a bit faster to initialize the Dictionary
to  all  0's  in the beginning.

__________________________________________

py RanDrop.py    100     100
Average maximum bin occupation is    4
py RanDrop.py    1000     1000
Average maximum bin occupation is    5

At first i was getting only  integer  results (as above),   and   i
(apparently,   to convert the int into a Floating Point number).
( i dn't really get it)

average *= 1.0                          <-----------------  (i
inserted  this line.)
average /= trials
print("Average maximum bin occupation is " + str(average))

You can use a defaultdict as a counter,

from collections import defaultdict
cntr = defaultdict(int)
cntr[6] += 1
cntr[6] += 1
cntr[6]
2
cntr[1]
0

and initialise it to use the float type if you want (I wouldn't as it's
more natural for counts to be integer valued).

[snip]

I didn't mean integer valued, I meant of type int.

Duncan

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From duncan smith@21:1/5 to henh...@gmail.com on Sat Sep 17 17:33:25 2022
On 16/09/2022 18:36, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?
22 above seems to be wrong.

Analytic values for 1-4 rooms:
1 1
2 1.5 (3/2)
3 1.889 (17/9)
4 2.125 (17/8)

Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

really nice... i have basically 2 comments.

in my Python code, i was stuck with the idea that i had to use a Dictionary to do the counting (tallying up).
This (what i was doing) must be a much, MUCH slower way to do it.

dic= { }
for digit in Lis:
if (digit in dic): dic[ digit ] += 1
else: dic[ digit ] = 1

MaxVal = max(dic.values())

---------- Also, it must be a bit faster to initialize the Dictionary to all 0's in the beginning.

__________________________________________

py RanDrop.py 100 100
Average maximum bin occupation is 4
py RanDrop.py 1000 1000
Average maximum bin occupation is 5

At first i was getting only integer results (as above), and i had to insert one line
(apparently, to convert the int into a Floating Point number). ( i dn't really get it)

average *= 1.0 <----------------- (i inserted this line.)
average /= trials
print("Average maximum bin occupation is " + str(average))

You can use a defaultdict as a counter,

from collections import defaultdict
cntr = defaultdict(int)
cntr[6] += 1
cntr[6] += 1
cntr[6]
2
cntr[1]
0

and initialise it to use the float type if you want (I wouldn't as it's
more natural for counts to be integer valued).

cntr = defaultdict(float)
cntr[6] += 1
cntr[6] += 1
cntr[6]
2.0
cntr[1]
0.0

class for counters.

from collections import Counter
cntr = Counter()
cntr[6] += 1
cntr[6] += 1
cntr[6]
2
cntr[1]
0

This also has a most_common method.

cntr[8] = 1
cntr
Counter({6: 2, 8: 1})
cntr.most_common(n=1)
[(6, 2)]

The random module has a choices function for sampling with replacement.

import random
random.choices(range(10), k=10)
[4, 6, 3, 2, 8, 7, 8, 8, 7, 0]

You could combine the above into a one-liner for sampling and finding
the maximum count.

Counter(random.choices(range(10), k=10)).most_common(n=1)[0][1]
2
Counter(random.choices(range(10), k=10)).most_common(n=1)[0][1]
3
Counter(random.choices(range(10), k=10)).most_common(n=1)[0][1]
2

total = 0
for _ in range(10000):
total += Counter(random.choices(range(10),
k=10)).most_common(n=1)[0][1]

total / 10000
2.7497

You must be using Python2 to get integer division by default. So it's
probably time to install Python3. Cheers.

Duncan

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to duncan smith on Sun Sep 18 08:34:06 2022
On Saturday, September 17, 2022 at 9:33:32 AM UTC-7, duncan smith wrote:
On 16/09/2022 18:36, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?
22 above seems to be wrong.

Analytic values for 1-4 rooms:
1 1
2 1.5 (3/2)
3 1.889 (17/9)
4 2.125 (17/8)

Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

really nice... i have basically 2 comments.

in my Python code, i was stuck with the idea that i had to use a Dictionary to do the counting (tallying up).
This (what i was doing) must be a much, MUCH slower way to do it.

dic= { }
for digit in Lis:
if (digit in dic): dic[ digit ] += 1
else: dic[ digit ] = 1

MaxVal = max(dic.values())

---------- Also, it must be a bit faster to initialize the Dictionary to all 0's in the beginning.

__________________________________________

py RanDrop.py 100 100
Average maximum bin occupation is 4
py RanDrop.py 1000 1000
Average maximum bin occupation is 5

At first i was getting only integer results (as above), and i had to insert one line
(apparently, to convert the int into a Floating Point number). ( i dn't really get it)

average *= 1.0 <----------------- (i inserted this line.)
average /= trials
print("Average maximum bin occupation is " + str(average))
You can use a defaultdict as a counter,

from collections import defaultdict
cntr = defaultdict(int)
cntr[6] += 1
cntr[6] += 1
cntr[6]
2
cntr[1]
0

and initialise it to use the float type if you want (I wouldn't as it's
more natural for counts to be integer valued).

cntr = defaultdict(float)
cntr[6] += 1
cntr[6] += 1
cntr[6]
2.0
cntr[1]
0.0

class for counters.

from collections import Counter
cntr = Counter()
cntr[6] += 1
cntr[6] += 1
cntr[6]
2
cntr[1]
0

This also has a most_common method.

cntr[8] = 1
cntr
Counter({6: 2, 8: 1})
cntr.most_common(n=1)
[(6, 2)]

The random module has a choices function for sampling with replacement.

import random
random.choices(range(10), k=10)
[4, 6, 3, 2, 8, 7, 8, 8, 7, 0]

You could combine the above into a one-liner for sampling and finding
the maximum count.

Counter(random.choices(range(10), k=10)).most_common(n=1)[0][1]
2
Counter(random.choices(range(10), k=10)).most_common(n=1)[0][1]
3
Counter(random.choices(range(10), k=10)).most_common(n=1)[0][1]
2

total = 0
for _ in range(10000):
total += Counter(random.choices(range(10),
k=10)).most_common(n=1)[0][1]

total / 10000
2.7497

You must be using Python2 to get integer division by default. So it's probably time to install Python3. Cheers.

Duncan

thanks... that's good to know... i've only used the latest version of Python 3

i guess you never (?) use [type declarations] (on variables) in Python (3)
....................
>>> Can you declare a type in Python? -- Python is completely object oriented, and not "statically typed". You do not need to declare variables before using them, or declare their type. Every variable in Python is an
object.

___________________________
re: the Most crowded room --- (expected # of max. Birthday collisions)

another, similar topic would be... if all the games in NFL, NBA, MLB... were like a (fair) coin-toss, what is the theoretical , expected Longest winning (and losing) streaks every year (for one team, for all the teams)
------------------ vs. What we actually get.

Can the actual stats be simulated if we assume (model) that the strongest (riches) teams (Yankees, Red Sox...) are likely to win any game by , say, 60 % probability ?

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Ilan Mayer@21:1/5 to henh...@gmail.com on Sun Sep 18 13:10:41 2022
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

The exact number for 100 people / 100 rooms is 4.23259523879579 (found by a C# program).

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Ilan Mayer@21:1/5 to henh...@gmail.com on Sun Sep 18 13:00:52 2022
On Friday, September 16, 2022 at 1:54:30 PM UTC-4, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 6:15:35 PM UTC-7, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ? ( i may have, but if so, i had forgotten)
---------- 100 ppl in 100 (random) rooms --> ~ 63.2 rooms get occupied
and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

22 above seems to be wrong.
really ? waht do you propose ? (or suggest, instead) ?

i inserted two characters [*10] into your program, to find :

Crowded\iMayer> py RanDrop10.py 1000 100
Average maximum bin occupation is 21.56
Crowded\iMayer> py RanDrop10.py 1000 200
Average maximum bin occupation is 21.615
Crowded\iMayer> py RanDrop10.py 1000 400
Average maximum bin occupation is 21.6375
Crowded\iMayer> py RanDrop10.py 1000 1000
Average maximum bin occupation is 21.616

These numbers seem to be incorrect. Here are my results from the program below: 1000 balls, 100 bins, 1000 trials - 18.76
1000 balls, 200 bins, 1000 trials - 12.15
1000 balls, 400 bins, 1000 trials - 8.28
1000 balls, 1000 bins, 1000 trials - 5.50
Intuitively the number should decrease as the number of bins (rooms) increases for the same number of balls (people).

Here is a revised version of my program that allows any number of balls/bins (or people/rooms):

#! python
import sys
import random

def process(balls, bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(balls):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 4:
error = False
try:
balls = int(sys.argv[1])
bins = int(sys.argv[2])
trials = int(sys.argv[3])
except ValueError:
print("Numbers of balls, bins and trials must be integers")
error = True
if not error and (balls <= 0 or bins <= 0 or trials <= 0):
if balls <= 1:
print("Number of balls must be greater than 0")
elif bins <= 1:
print("Number of bins must be greater than 0")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(balls, bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-balls> <number-of-bins> <number-of-trials>")

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Ilan Mayer@21:1/5 to henh...@gmail.com on Sun Sep 18 14:00:17 2022
On Sunday, September 18, 2022 at 4:38:02 PM UTC-4, henh...@gmail.com wrote:
On Sunday, September 18, 2022 at 1:10:42 PM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

The exact number for 100 people / 100 rooms is 4.23259523879579 (found by a C# program).
How long is (was) the execution (run-time) for that program?

Less than 10 min. would be impressive , but it depends on how fast the PC is

It took about 8 minutes on a rather old laptop.
The time grows exponentially with the number of people/rooms, so for 1000/1000 it is not going to be feasible even on the fastest pc.

i don't think i can do 1000 people / 1000+ rooms on my slow home PC
1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)
---------------- i'm starting to understand why young ppl omit the final periods
( seems too formal )

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Ilan Mayer on Sun Sep 18 13:38:01 2022
On Sunday, September 18, 2022 at 1:10:42 PM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

The exact number for 100 people / 100 rooms is 4.23259523879579 (found by a C# program).

How long is (was) the execution (run-time) for that program?

Less than 10 min. would be impressive , but it depends on how fast the PC is

i don't think i can do 1000 people / 1000+ rooms on my slow home PC

1000 ppl are randomly assigned to 1000 rooms...
---> the Most crowded room is occupied by 5 people. (B)

---------------- i'm starting to understand why young ppl omit the final periods
( seems too formal )

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Ilan Mayer@21:1/5 to henh...@gmail.com on Sun Sep 18 13:15:34 2022
On Thursday, September 15, 2022 at 9:15:35 PM UTC-4, henh...@gmail.com wrote:
On Thursday, September 15, 2022 at 9:01:47 AM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ? ( i may have, but if so, i had forgotten)
100 ppl in 100 (random) rooms --> ~ 63.2 rooms get occupied

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

22 above seems to be wrong.
really ? waht do you propose ?

Sorry, I misread as 10000 people / 10000 rooms. For 10000 people / 1000 rooms 22 is in agreement with my results.

Analytic values for 1-4 rooms:
1 --- 1
2 --- 1.5 (3/2)
3 --- 1.889 (17/9)
4 --- 2.125 (17/8)

6 --------------- 2.408179012345679

8 -------------- 2.5972328186035156

10 ------------- 2.74868911 (exact number) ----------- a very close match with what you got !
Simulation approximate results for 10,100,1000,10000 rooms:
10 2.75
100 4.23
1000 5.52
10000 6.66

Python program for simulation:

#! python
import sys
import random

def process(bins, trials):
average = 0
counts = []
for n in range(bins):
counts.append(0)
random.seed(None)
for n in range(trials):
for m in range(bins):
counts[m] = 0
for m in range(bins):
counts[random.randint(0, bins - 1)] += 1
maximum = 0
for m in range(bins):
if counts[m] > maximum:
maximum = counts[m]
average += maximum
average /= trials
print("Average maximum bin occupation is " + str(average))

if len(sys.argv) == 3:
error = False
try:
bins = int(sys.argv[1])
trials = int(sys.argv[2])
except ValueError:
print("Number of bins and number of trials must be integers")
error = True
if not error and (bins <= 1 or trials <= 0):
if bins <= 1:
print("Number of bins must be greater than 1")
else:
print("Number of trials must be greater than 0")
error = True
if not error:
try:
process(bins, trials)
except KeyboardInterrupt:
print("Cancelled")
else:
print("Usage: RandomDrop <number-of-bins> <number-of-trials>")

__/\__
\ /
__/\\ //\__ Ilan Mayer
\ /
/__ __\
||

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Ilan Mayer on Mon Sep 19 10:09:22 2022
On Sunday, September 18, 2022 at 2:00:19 PM UTC-7, Ilan Mayer wrote:
On Sunday, September 18, 2022 at 4:38:02 PM UTC-4, henh...@gmail.com wrote:
On Sunday, September 18, 2022 at 1:10:42 PM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

The exact number for 100 people / 100 rooms is 4.23259523879579 (found by a C# program).
How long is (was) the execution (run-time) for that program?

Less than 10 min. would be impressive , but it depends on how fast the PC is

It took about 8 minutes on a rather old laptop.
The time grows exponentially with the number of people/rooms, so for 1000/1000 it is not going to be feasible even on the fastest pc.

-------- The time grows [exponentially] with the number of people/rooms, (my emphasis)

i don't want to seem Nit-picky
(but we're all Puzzle Nerds here, right ?)

where N= number of people/rooms
the relevant numbers (we're concerned about) grows proportional to N^N

is that called Super-Exponential or Supra--..... or something like that ?

i don't think i can do 1000 people / 1000+ rooms on my slow home PC
1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)
---------------- i'm starting to understand why young ppl omit the final periods
( seems too formal )

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Ilan Mayer@21:1/5 to henh...@gmail.com on Mon Sep 19 18:35:04 2022
On Monday, September 19, 2022 at 1:09:24 PM UTC-4, henh...@gmail.com wrote:
On Sunday, September 18, 2022 at 2:00:19 PM UTC-7, Ilan Mayer wrote:
On Sunday, September 18, 2022 at 4:38:02 PM UTC-4, henh...@gmail.com wrote:
On Sunday, September 18, 2022 at 1:10:42 PM UTC-7, Ilan Mayer wrote:
On Wednesday, September 14, 2022 at 5:42:33 PM UTC-4, henh...@gmail.com wrote:
Have you encountered this number (63.2 %) some time earlier ?
( i may have, but if so, i had forgotten)

and also ..........

What's the formula that gives me the expected # of ppl in the Most crowded room ( 5, 5, 22 below) ?

(is there a Web-page that explains it? ------ i couldn't find it in SE (StackExchange), etc.)

according to the simulations i've done...

100 ppl are randomly assigned to 100 rooms...
the Most crowded room is occupied by 5 people. (A)

1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)

10000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 22 people.

---------------- what are the theoretical values for (A) and (B) ?

The exact number for 100 people / 100 rooms is 4.23259523879579 (found by a C# program).
How long is (was) the execution (run-time) for that program?

Less than 10 min. would be impressive , but it depends on how fast the PC is

It took about 8 minutes on a rather old laptop.
The time grows exponentially with the number of people/rooms, so for 1000/1000 it is not going to be feasible even on the fastest pc.

-------- The time grows [exponentially] with the number of people/rooms, (my emphasis)

i don't want to seem Nit-picky
(but we're all Puzzle Nerds here, right ?)

where N= number of people/rooms
the relevant numbers (we're concerned about) grows proportional to N^N

is that called Super-Exponential or Supra--..... or something like that ?

The program enumerates all the partitions and calculates the number of permutations of people/rooms for each partition, rather than going through all N^N combinations individually, so it is much less than O(N^N), but still run time grows too fast to go
much beyond 100; the term "exponentially" was used loosely.

i don't think i can do 1000 people / 1000+ rooms on my slow home PC
1000 ppl are randomly assigned to 1000 rooms...
the Most crowded room is occupied by 5 people. (B)
---------------- i'm starting to understand why young ppl omit the final periods
( seems too formal )

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Anton Shepelev@21:1/5 to All on Fri Sep 23 01:34:14 2022
HH:

What's the formula that gives me the expected # of ppl in
the Most crowded room

according to the simulations i've done...

Instead of simulation, you can compute the exact value.
Observe that allocations of p people in r rooms can be
expressed as the expanded terms of a multinomial of power p
with r terms. For example:

r p
1:2 (a)^2 = a^2
E(m) = 2 = 2

2:1 (a+b)^1 = a + b
E(m) = (1 + 1)/2 = 1

2:2 (a+b)^2 = a^2 + b^2 + ab + ba =>
E(m) = ( 2 + 2 1 + 1 )/4 = 1 1/2

3:2 (a+b)^3 = a^3 + b^3 + 3b^2a + 3ab^2
E(m) =( 3 + 3 + 3 *2 + 3 * 2)/8 = 2 1/4

2:3 (a+b+c)^2 = a^2 + b^2 + c^2 + 2 a b + 2 a c + 2 b c
E(m) = ( 2 + 2 + 2 + 2 * 1 + 2 * 1 + 2 * 1)/9 = 4/3

This is regular and easily computable by sequential
generation of the terms and their corresponding multinomial
coefficient.

--
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org - against proprietary attachments

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Anton Shepelev on Tue Sep 27 14:54:11 2022
On Thursday, September 22, 2022 at 3:34:17 PM UTC-7, Anton Shepelev wrote:
HH:
What's the formula that gives me the expected # of ppl in
the Most crowded room

according to the simulations i've done...
Instead of simulation, you can compute the exact value.
Observe that allocations of p people in r rooms can be
expressed as the expanded terms of a multinomial of power p
with r terms. For example:

r p
1:2 (a)^2 = a^2
E(m) = 2 = 2

2:1 (a+b)^1 = a + b
E(m) = (1 + 1)/2 = 1

2:2 (a+b)^2 = a^2 + b^2 + ab + ba =>
E(m) = ( 2 + 2 1 + 1 )/4 = 1 1/2

3:2 (a+b)^3 = a^3 + b^3 + 3b^2a + 3ab^2
E(m) =( 3 + 3 + 3 *2 + 3 * 2)/8 = 2 1/4

2:3 (a+b+c)^2 = a^2 + b^2 + c^2 + 2 a b + 2 a c + 2 b c
E(m) = ( 2 + 2 + 2 + 2 * 1 + 2 * 1 + 2 * 1)/9 = 4/3

This is regular and easily computable by sequential
generation of the terms and their corresponding multinomial
coefficient.
--
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org - against proprietary attachments

really?

can we get the fraction (expected value) for 10 ppl in 10 rooms this way ?

( in the very beginning, i was thinking of something like this... )

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Anton Shepelev on Thu Oct 6 14:49:15 2022
On Thursday, October 6, 2022 at 2:28:32 PM UTC-7, Anton Shepelev wrote:
henh... to Anton Shepelev:
Instead of simulation, you can compute the exact value.
Observe that allocations of p people in r rooms can be
expressed as the expanded terms of a multinomial of
power p with r terms. For example:
[...]
This is regular and easily computable by sequential
generation of the terms and their corresponding
multinomial coefficient.

can we get the fraction (expected value) for 10 ppl in 10
rooms this way ?

State your doubts, if any. I say we can, and my C program
reports:

1168918030 / 424490995 ~= 2.753693

Now, what is your result, if any?

on Sept 15, i posted (in this thread) ...

6 --------------- 2.408179012345679

8 -------------- 2.5972328186035156

10 ------------- 2.74868911 (exact number) ----

(very early on) i think i deicided to go a diff. way... which is faster.

----------- i'm still wondering if there's a Really Fast way (algorithm) to compute these fractions.

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Anton Shepelev@21:1/5 to All on Fri Oct 7 00:28:27 2022
henh... to Anton Shepelev:

Instead of simulation, you can compute the exact value.
Observe that allocations of p people in r rooms can be
expressed as the expanded terms of a multinomial of
power p with r terms. For example:
[...]
This is regular and easily computable by sequential
generation of the terms and their corresponding
multinomial coefficient.

really?

State you doubts, if any.

can we get the fraction (expected value) for 10 ppl in 10
rooms this way ?

State your doubts, if any. I say we can, and my C program
reports:

1168918030 / 424490995 ~= 2.753693

Now, what is your result, if any?

( in the very beginning, i was thinking of something like
this... )

And what was your conclusion, if any?

--
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org - against proprietary attachments

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Anton Shepelev@21:1/5 to All on Sat Oct 8 03:18:30 2022
Anton Shepelev to henh...:

can we get the fraction (expected value) for 10 ppl in
10 rooms this way ?

State your doubts, if any. I say we can, and my C program
reports:

1168918030 / 424490995 ~= 2.753693

Thanks to the analytic values by Ilan Mayer, I have found an
error in my program and fixed it. My corrected analytic
values for n people in n rooms are:

1: 1 / 1 = 1.000000000000000
2: 6 / 4 = 1.500000000000000
3: 51 / 27 ~ 1.888888888888889
4: 544 / 256 = 2.125000000000000
5: 7145 / 3125 = 2.286400000000000
6: 112356 / 46656 ~ 2.408179012345679
7: 2066323 / 823543 ~ 2.509065100425843
8: 43574336 / 16777216 ~ 2.597232818603516
9: 1036922769 / 387420489 ~ 2.676478912296247
10: 27486891100 / 10000000000 = 2.748689110000000
11: 803137535321 / 285311670611 ~ 2.814948065745319
12: 25642631336400 / 8916100448256 ~ 2.875991750565768
13: 888148407804853 / 302875106592253 ~ 2.932391564951315
14: 33165208812574216 / 11112006825558016 ~ 2.984628189418768

That is the precision limit of my C program. Futher values
are approximate:

15: 3.033122027793592
16: 3.078246797314360
17: 3.120336673764227
18: 3.159690951821744
19: 3.196575256074798
20: 3.231235911954644
21: 3.263840995156228
22: 3.294677258703217
23: 3.323501424317847
24: 3.351204745044710
25: 3.375940763093699
26: 3.400997883301979
27: 3.420098995014796
28: 3.442852016690488
29: 3.453774951545424
30: 3.474683387544387
31: 3.476040838397223

Perhaps a big-number library or more accurate implementation
could help...

My program confirms your "exact value" for 10-by-10. How
did *you* calculate it? Have you published your solution?

--
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org - against proprietary attachments

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From Anton Shepelev@21:1/5 to All on Wed Oct 12 03:02:43 2022
henh...:

where N= number of people/rooms the relevant numbers
(we're concerned about) grows proportional to N^N

N^N is the total number of terms in the expansion of:

(a_1 + ... + a_n)^n

But if you group compatible terms there will remain much
fewer summands, and then if you group terms with identical
power-sets (e.b. a^2 b and a b^2) the total number of unique
summands will futher decrease and become equal to the number
of partitions (OEIS A000041). The performance of my program
is roughly proportional to that number, but in fact a bit
worse because as the sheer numbers increase the calculation
of factorial ratios becomes harder. In the following table,
`n' is the number of rooms and people, `s' the number of
summands, `ms' calculation time in milliseconds, and `res'

n s ms s/ms res

1 1 0 0 1.000000
2 2 0 0 1.500000
3 3 0 0 1.888889
4 5 0 0 2.125000
5 7 0 0 2.286400
6 11 0 0 2.408179
7 15 0 0 2.509065
8 22 0 0 2.597233
9 30 0 0 2.676479
10 42 0 0 2.748689
.....................................
30 5604 15 373 3.492990
31 6842 32 213 3.513329
32 8349 31 269 3.532941
33 10143 47 215 3.551881
34 12310 47 261 3.570201
35 14883 62 240 3.587945
36 17977 78 230 3.605155
37 21637 94 230 3.621868
38 26015 125 208 3.638117
39 31185 141 221 3.653932
40 37338 171 218 3.669340
41 44583 204 218 3.684366
42 53174 250 212 3.699032
43 63261 328 192 3.713357
44 75175 375 200 3.727360
45 89134 453 196 3.741058
46 105558 562 187 3.754466
47 124754 641 194 3.767597
48 147273 734 200 3.780465
49 173525 907 191 3.793081
50 204226 1062 192 3.805455
51 239943 1313 182 3.817597
52 281589 1578 178 3.829517
53 329931 1797 183 3.841223
54 386155 2125 181 3.852722
55 451276 2500 180 3.864022
56 526823 2921 180 3.875129
57 614154 3500 175 3.886051
58 715220 4094 174 3.896791
59 831820 4750 175 3.907358
60 966467 5547 174 3.917754
61 1121505 6547 171 3.927986
62 1300156 7719 168 3.938057
63 1505499 9609 156 3.947973
64 1741630 10891 159 3.957737
65 2012558 12500 161 3.967353
66 2323520 15187 152 3.976826
67 2679689 16625 161 3.986158
68 3087735 19235 160 3.995353
69 3554345 22484 158 4.004414
70 4087968 25953 157 4.013345
.....................................
99 169229875 1321266 128 4.226524
100 190569292 1502828 126 4.232595

I wonder what is the sequence and formula for the number
of summands when the number of people is not equal to the
number of rooms...

--
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org - against proprietary attachments

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)
• From henhanna@gmail.com@21:1/5 to Anton Shepelev on Wed Oct 12 17:29:13 2022
On Friday, October 7, 2022 at 5:18:33 PM UTC-7, Anton Shepelev wrote:
Anton Shepelev to henh...:
can we get the fraction (expected value) for 10 ppl in
10 rooms this way ?

State your doubts, if any. I say we can, and my C program
reports:

1168918030 / 424490995 ~= 2.753693

Thanks to the analytic values by Ilan Mayer, I have found an
error in my program and fixed it. My corrected analytic
values for n people in n rooms are:

1: 1 / 1 = 1.000000000000000
2: 6 / 4 = 1.500000000000000
3: 51 / 27 ~ 1.888888888888889
4: 544 / 256 = 2.125000000000000
5: 7145 / 3125 = 2.286400000000000
6: 112356 / 46656 ~ 2.408179012345679
7: 2066323 / 823543 ~ 2.509065100425843
8: 43574336 / 16777216 ~ 2.597232818603516
9: 1036922769 / 387420489 ~ 2.676478912296247
10: 27486891100 / 10000000000 = 2.748689110000000
11: 803137535321 / 285311670611 ~ 2.814948065745319
12: 25642631336400 / 8916100448256 ~ 2.875991750565768
13: 888148407804853 / 302875106592253 ~ 2.932391564951315
14: 33165208812574216 / 11112006825558016 ~ 2.984628189418768

That is the precision limit of my C program. Futher values
are approximate:

15: 3.033122027793592

thank you....

Pascal+ triangle+ (or Pyramid) for 3 rooms (or 3 variables X,Y,Z) (or trinomials (?)) looks nice.

building up a Pascal+ triangle+ from (1, 1, 1, ..., 1) (100 One's)
-- maybe this is a better way -- i'll think about it.

(The way i was doing it, (i think) it'd been hard to get Approximate values)

--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)