最大化矢量比较中的方差

时间:2015-08-06 12:04:35

标签: r

假设我有一组数字:

a <- 1:10

我想从这些数字中创建所有非冗余对:

pairs <- t(combn(1:10,2))

然后,对于每一对,我检查该对的第一个元素是否大于第二个元素:

a[pairs[,1]]>a[pairs[,2]]

由于数据集已排序,因此每对的FALSE得到a<-sample(a) ,因为该对的第二个元素总是更大。

我可以重新调整原始数据集:

 a[pairs[,1]]>a[pairs[,2]]

并重做相同的比较:

a

现在我得到了TRUE和FALSE两种情况。

我的问题是:有没有办法最大化方差:即,任何大小的变量if let stillOptional = viewController.navigationController, let notOptional = stillOptional { //use notOptional here } 都有相等或近似相等的TRUE和FALSE个案数?

2 个答案:

答案 0 :(得分:0)

这样的事情可行。期望你收敛到相等数量的TRUE和FALSE。

pairs <- t(combn(1:10,2))

for (i in 1:nrow(pairs)) {
  if (runif(1) > .5) {
    tmp <- pairs[i,1]
    pairs[i,1] <- pairs[i,2]
    pairs[i,2] <- tmp
  }
}
table(pairs[,1] > pairs[,2])
# FALSE  TRUE
#    25    20

答案 1 :(得分:0)

有趣的问题!

这是一个算法,为您提供X =(1,2,3 ...,n)所需的排列:

最初取空结果向量Y并设置round = 1。每轮都做:

  1. 从X
  2. 中取出第一个和最后一个项目
  3. 将这对项目附加到Y.如果round-number是奇数,则先将较小的一个附加。如果是圆形,那么首先加大一个。
  4. 从X
  5. 中删除所选项目

    重复直到X耗尽。如果X的长度是奇数,那么最后只需将最终项添加到Y.

    所以最后Y =(1,n,n-1,2,3,n-3,...,n / 2)。

    以下是上述算法的R实现:

    这是非随机的,并且保证返回相等(或如果总数不均匀则返回尽可能相等)所有长度的真假数例n > 1

    max_var_sequence = function(n) {
      mid_point = ceiling((n+1)/2)
    
      #initiate the vector
      a1 = rep(mid_point,n)
    
      for(i in 1:(n/2)) {
        even = i %% 2
        a1[i*2 - even] = i
        a1[i*2 - !even] = n + 1 -i
    
      }
      return(a1)
    }
    
    n = 20
    pairs <- t(combn(1:n,2))
    s = max_var_sequence(n)
    x = s[pairs[,1]]>s[pairs[,2]]
    
    table(x)