假设我有一个非常大的矩阵,10000x10000个元素的值都为'0'。可以说有一些'1'的大“巢”。这些区域甚至可能是连接的,但是每周都通过'1'的'管道'连接。
我希望得到一种非常快速的算法(如有必要,可以弄脏)找到'1'的'巢'。在这里,它不应该“分割”两个每周连接的'巢'。
知道我应该怎么做这样的算法吗?
答案 0 :(得分:1)
在这种情况下,像A*这样的寻路算法(或者像BFS或DFS这样简单的东西)可能会起作用。
你可以:
答案 1 :(得分:0)
我想说这取决于如何需要数据。如果给出两点,你需要检查它们是否在1的同一块中,我认为@Jack的答案是最好的。如果您对块最初的位置有所了解,也是如此,因为您可以将它们用作算法的起点。
如果您没有任何其他信息,可能有其中一种可能:
如果给定一个点,您希望找到同一个块中的所有元素,flood fill是合适的。然后你可以在找到它时缓存每个嵌套,当你得到另一个点时,首先看看它是否在一个已知的嵌套中,如果它没有进行泛洪填充以找到这个嵌套,那么将它添加到缓存中。
作为一个实现细节,当您遍历矩阵时,每一行应该具有前一行中存在的一组嵌套。然后你只需要检查那些巢穴而不是整套的新点,以确定新点是否在已知的集合中。
如果可以处理概率效应,请确保使用具有极低查找成本的集合实现,例如哈希表或可能是Bloom过滤器。
答案 2 :(得分:0)
AND
输出7和5以获取所有管道的连接点。