作者dinohsu1019 (杰生方的铁粉)
看板Programming
标题[问题] 从n中取k可重复的组合想不全部展开
时间Wed May 1 08:19:12 2024
投资组合为1将权重k等分分配到n个股票,每个股票可分配权重0(零),1/k,2/k,...1
(全部)将k等分分配到n个股票。
即「从n中取k可重复的组合」,组合数为 C(n+k-1,n-1)。
故权重编号范围为1~C(n+k-1,n-1)
权重串列(整数版)为(n,0,...0,0),(n-1,1,...,0,0),...(0,0,...,0,n)。
权重串列(小数版) = 权重串列(整数版)/n。
如连结是我的Python程式,我使用「全部组合展开」的方法:
k_i=10 n_j=5 cnt_j=1001 base_j=3.98 duration_j=0.01
当k=10, n=5时共有1001种组合,全部组合展开需时0.01秒,但:
k_i=20 n_j=10 cnt_j=10015005 base_j=5.01 duration_j=86.33
当k=20, n=10时共有10015005种组合,需时已达86.33秒,
这样对k,n值形成很大的限制。
我的目的不是要将全部组合展开,而是要随机映射编号和组合,
例如:n=8, k=4时有165种组合,
正向:当我输入编号21时要输出 (0.375, 0.375, 0.25, 0.0)
反向:当我输入(0.375,0.375,0.25,0.0)要得到编号21
有什麽方法可以计算?感谢先
https://tinyurl.com/yvkpanm6
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.238.10 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1714522756.A.8FE.html
1F:推 gusion: 按照开头叙述,权重不是1/k的倍数吗?但是 1.169.71.217 05/01 09:44
2F:→ gusion: 范例怎麽好像是1/n的倍数? 1.169.71.217 05/01 09:44
3F:推 LPH66: 范例写反了吧, 那看起来是 n=4 k=8123.194.181.180 05/01 10:10
4F:→ dinohsu1019: 例如k=10(10等份)分给3个股票 219.68.238.10 05/01 19:28
5F:→ dinohsu1019: (3/10,4/10,3/10)是一种分法 n=3 219.68.238.10 05/01 19:29
6F:→ dinohsu1019: 我上面写错了,应该是k=8,n=4 219.68.238.10 05/01 19:31
7F:→ dinohsu1019: 抱歉:(小数版) = (整数版)/k 才对 219.68.238.10 05/02 08:54