当该算法创建的组中没有更多更改时,如何停止该算法

如何解决当该算法创建的组中没有更多更改时,如何停止该算法

我正在尝试寻找一种替代算法,将直接或间接连接的列表中的向量分组-通过“ connected”,我的意思是拥有一个非空的交集。

此过程应该是有效的,因为它可以花很短的向量(大约10个向量,每个向量最多5个条目)在可能成千上万个列表上运行就不会花费太长时间。 在这个问题中,我还有一个使用igraph 解决方案:How to merge two different groupings if they are not disjoint with dplyr

但是,我的代码花了太长时间才能运行它。

以下是在纸上尝试一些示例后我转向的示例:

vectors <- list(1:3,3:4,4:5,6)

最终输出应将前三个元素组合在一起,最后一个分开。 vectors[[1]]通过拥有2和3共同连接到vectors[[2]]。从vectors[[2]]vectors[[3]],因为4。vectors[[1]]vectors[[3]]之所以合并,是因为它们具有公共交点。这应该概括为“更长的链”。

因此,我试图编写自己的函数来迭代如下所示的过程:

1-在vectors[[i]]中的unlist(vectors)中找到最常见的条目,并取它们的最小值(如果我们采用多模式情况):

 modes <- function(x,y) {
      ux <- unique(x)
      tab <- tabulate(match(y,ux))
      ux[tab == max(tab)]
    }

      z <- map(vectors,~ modes(.,unlist(vectors)) %>%
                 map(.,min))

此步骤应产生:z <- list(3,4,6)。创建vectors2,它接受​​vectors[[i]]并具有相同z[[i]]的{​​{1}}的并集。

再次重复上一步:

vectors2 <- list(1:3,3:5,6)

这样z2 <- map(vectors2,unlist(vectors2)) %>% map(.,min)) z2 <- list(3,3,6)

由于如果要重复执行该算法,则不会发生任何变化,因此该过程将停止并返回vectors3 <- list(1:5,1:5,6)

说了这么多,我想知道如何在z2中实现一些上述步骤:

  • 如何通过合并上一步中具有相同R的条目来形成vectors2vectors3等。
  • 如何为算法设置停止时间-可能是硬停止(在n次迭代后停止),或者在z s收敛后停止。

最后,我问这种算法是否可能比链接解决方案更有效。

如果这种解释不清楚,请在数学交换中的一个链接中要求我提供算法证明:https://math.stackexchange.com/questions/3854566/how-would-one-prove-that-this-algorithm-to-find-connected-dots-works-and-converg

也许这是很多问题,但是我很感谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?