数据生成:创建向量向量

时间:2017-04-26 01:30:58

标签: r

我有一个长度未知的正整数向量。我们用元素a [1],a [2],...

称它为矢量a

我想对向量b执行计算,其中对于所有i,0< = b [i]< = a [i]。

以下不起作用:

for(b in 0:a)
{
  # calculations
}

我想出的最好的是:

probabilities <- function(a,p)
{
  k <- a
  k[1] <- 1
  h <- rep(0,sum(a)+1)
  for(i in 2:length(a))
  {
    k[i] <- k[i-1]*(a[i-1]+1)
  }
  for(i in 0:prod(a+1))
  {
    b <- a
    for(j in 1:length(a))
    {
      b[j] <- (floor(i/k[j]) %% (a[j]+1))
    }
    t <- 1
    for(j in 1:length(a))
    {
      t <- t * choose(a[j],b[j])*(p[j])^(b[j])*(1-p[j])^(a[j]-b[j])
    }
    h[sum(b)+1] <- h[sum(b)+1] + t
  }
  return(h)
}

在我的功能中间是我创建b的地方。我首先将b设置为等于a(因此它的大小相同)。然后,我用不同的元素替换b的所有元素,这些元素非常难以计算。这似乎是一种效率低下的解决方案。它有效,但随着数字变大,速度相当慢。关于如何减少处理时间的任何想法?从本质上讲,这对b的作用是第一次通过,b全部为零。然后,它是1,0,0,0,......第一个元素继续递增,直到达到[1],然后b [2]递增,b [1]设置为0.然后b [1]启动再次递增。

我知道数学是合理的,我只是不相信它是有效的。我研究组合学已有几年了,但从未研究过计算复杂性理论,因此提出一种快速算法有点超出了我的知识范畴。任何想法都会有所帮助!

0 个答案:

没有答案