如何构造for和if循环以构造拉丁方?

卡尔·约克托

我的目标是构造每个给定大小n的唯一拉丁广场R命令rlatin(n)使用马尔可夫链构造大小为nx n的随机拉丁方。但是,此命令不仅会构造其大小的所有拉丁方。

下面是我的代码:

library(magic)

L <- function(n){
  size <- factorial(n) * factorial(n-1)
  l <- list()
  l[[1]] <- rlatin(n)
  for(k in 2:size){
    new <- rlatin(n)
    for(j in 1:(k-1)){
      if(new == l[[j]]){
        new <- rlatin(n)
      }
    }
    l[[k]] <- new
  }
  l
} 

这不能正常工作,我不明白为什么。有人可以说明我的错误吗?此外,一旦所有拉丁广场建成,我是否可以组织它们,以便在拉丁广场中有一些清晰的地方?

爱德华

您的代码无法防止重复,因为一旦您的相等性测试成功,您就会找到一个新的拉丁方,但是您不会使用当前的拉丁方列表来测试该新方!您可能需要一个while循环,仅当当前拉丁方与之前所有拉丁方都不相同时才中断。可以使用进行评估sapply,尽管当n变大时可能会变慢。

L <- function(n) {
  size <- factorial(n) * factorial(n-1)
  l <- list()
  l[[1]] <- rlatin(n)
  for(k in 2:size) {
    new <- rlatin(n)
    while(sum(sapply(l, function(x) any(identical(x, new)))) > 0) {
      new <- rlatin(n)
    }
    l[[k]] <- new
  }
  l
} 

对于n = 4(大小= 144),代码仅需几秒钟。但是对于n = 5(大小= 2880),代码将花费一整天的时间。也许有一个更快的解决方案。


L4 <- L(4)  # About 10 seconds.

检查重复项:

x <- list()
for(i in 1:length(L4)) {
    x[[i]] <- sapply(L4[-i], function(x) any(identical(x, L4[[i]])))
}

sum(sapply(x, sum))
# [1] 0

L5 <- L(5) # Still waiting... or as grampa used to say: 
                                            "you'll be wait'n til the cows come home".

啊,终于。

   user  system elapsed 
 816.16    0.54  827.20

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环引用和构造函数

来自分类Dev

如何构造此嵌套的for循环?

来自分类Dev

在R中构造For循环和if循环

来自分类Dev

如何使用函数构造 JavaScript for 循环

来自分类Dev

如何在 Python 的循环中构造条件?

来自分类Dev

如何设置猪拉丁循环?

来自分类Dev

循环构造函数约束

来自分类Dev

如何使用文件和malloc构造函数

来自分类Dev

如何构造许多和/或复杂的SQL查询?

来自分类Dev

构造

来自分类Dev

如何在C ++中构造用于循环的化合物?

来自分类Dev

反编译器-如何构造循环

来自分类Dev

“ for each”循环构造如何适用于数组?

来自分类Dev

如何在for循环中调用参数化的构造函数。

来自分类Dev

如何使用 jQuery 在 .each 循环中构造数组?

来自分类Dev

如何使用由 for 循环创建的向量向量构造链表?

来自分类Dev

构造函数和构造文字之间的区别

来自分类Dev

构造函数和无参数构造函数?

来自分类Dev

构造函数和构造文字之间的区别

来自分类Dev

构造函数和转换

来自分类Dev

最终在构造和性能

来自分类Dev

分组和构造消息

来自分类Dev

构造自定义的for循环

来自分类Dev

构造自定义的for循环

来自分类Dev

Javascript TypeError:...不是构造函数-如何从构造函数构造函数?

来自分类Dev

如何构造PDOStatement类?

来自分类Dev

如何构造rxjs代码

来自分类Dev

如何定义构造函数?

来自分类Dev

构造`print`如何工作?