如何将这种DFS算法问题扩展/分发到分布式系统中

时间:2019-02-23 22:37:25

标签: algorithm parallel-processing scaling

我正在准备Google采访,并找到了一些后续消息

以下面的问题为例。 如果输入大小真的很大而无法在一台机器上完成,该怎么办。

我的想法是将其分成很多块。 但是,困难在于我不知道如何减少/合并答案。

这类问题的任何想法或方向。

https://leetcode.com/problems/max-area-of-island/

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

1 个答案:

答案 0 :(得分:1)

假设您有一张非常大的地图。然后将其分解为矩形,并为每个实例分配一个片段:

  • 然后,每个实例将运行与您从LeetCode链接的事物的解决方案相似的事物。

  • 它会知道自己完全被包围的岛屿是什么,然后它将知道其中最大的岛屿并将其报告给排行榜。

  • 它将有一个自己的与边缘相邻的岛的列表,以及相邻的索引,这对于四个边缘中的每一个来说都是一对,如果该岛没有碰到该边缘,则为null。基本上,这涵盖了一块横跨整个实例的土地。

  • 它将知道它获得了哪张地图,以及在哪里查询其边缘岛。只会说“我从这里到这里都在这片土地上。你呢?”

  • 它需要能够将相邻岛的列表(大小,索引,其他邻接关系)返回给另一个实例。

  • 它需要查询下一跳实例,直到发现所有多地图岛为止。

  • 您需要一个特殊的实例,将所有结果合并到全局排行榜中。

  • 要获得额外的荣誉,您需要确定两个或多个实例何时已计数相同的大岛并删除重复项。也许只是将边缘信息存储在哈希中。