我想知道基数幂X ^ n中的元素数量(一组X的主要乘积本身,n次)和多数约束:X ^ n中有多少元素具有(相对)多数集合中的一个元素(比如x)?
最重要的是,我想将基本功率中的一个元素固定到某个值(比如第二个),并用这个固定值计算可能性的数量。
我们举个简单的例子,X = {A,B,C},n = 4。问题是:在第二个位置有多少四个字母的单词有一个(相对)多数的A(答案:13,见here)?有多少人有(相对)多数的B?
在具有3行({A,B,C})和n = 4列的网络中,假设从左到右的路径(例如,使用节点A1,然后是B2,然后是A3,最后是C3),问题变为:有多少路径通过节点A2并且(相对)大多数是A节点?
I'm looking for a closed form formula,但找不到一个。
是否可以枚举所有产品并在python中过滤它们?
我的原始集合中有8个元素,我重复它们n = 24次。它非常大(> 10'9),但可能会简化,也许?
答案 0 :(得分:1)
我不能给你一个理论上的答案,但这里有一些python代码可以帮助你入门。
import itertools, collections
items = 'ABCDEFGH'
n = 4
r = collections.Counter()
# for symmetry reasons, it doesn't matter which position you "fix"
# so to count `'ABCD'^n` with fixed 'A'
# we have to count `'ABCD'^n-1` and just add 1 for 'A'.
for p in itertools.product(items, repeat=n-1):
c = collections.Counter(p)
c['A'] += 1
m = c.most_common(2)
if len(m) == 1 or m[0][1] > m[1][1]:
r[m[0][0]] += 1
else:
r['no_major'] += 1
print r
关于您的具体数字,迭代8^24
项目听起来并不现实。在你走到这一步之前,你必须得出一个公式!
答案 1 :(得分:0)
无法过滤,并且有一个封闭的表格公式(参见数学here)。
以下是如何在python中解决这个问题(灵感来自here):
python setup.py install
,那就是它)来自sympy.abc import x
来自sympy import expand
来自sympy import factorial
小心:不要使用数学中的因子,而应该使用同情的因子;所以不要from math import factorial
(见here)。
d1 = expand()
打印d1 [x ** n]
对于简单示例 here(n = 4,m = 3),我们需要在其上导入求和,字母j,k,
来自sympy import summation
来自sympy.abc import j,k
导入数学
d1 =展开(求和(x **(k-1)/阶乘(k-1)*求和(x **(j-1)/阶乘(j-1),(j,1,k) )** 2,(k,0,4)))。as_coefficients_dict()
d1 [x ** 3] * math.factorial(3)
解决方案是13。
对于大例子,,n = 24,m = 8:
d2 =展开(求和(x **(k-1)/阶乘(k-1)*求和(x **(j-1)/阶乘(j-1),(j,1,k) )** 7,(k,0,24)))。as_coefficients_dict()
d2 [x ** 23] * math.factorial(23)
解决方案是105097074808684277656。计算需要1-2小时。