给出1和0的矩阵(n x n),其中1代表土地,0代表水。 如何以最有效的方式找到土地面积的中位数?
例如:
1 1 0 0 0
1 0 0 1 1
1 0 1 0 0
有三个岛屿,面积为[1,2,4],中位数为2
一个岛可以由包含1的连续非对角细胞组成: 例如:
1 0 1
0 1 0
此矩阵包含[1,1,1]的三个岛
我的解决方案是递归地找到面积,然后对它们进行排序以找到取O(n ^ 2log(n ^ 2))的中位数,有没有更有效的方法呢?
答案 0 :(得分:3)
第一步,在网格上递归运行DFS,并在AttributeError: 'tuple' object has no attribute 'get'
时间发现所有孤岛并计算面积。
第二步,您可以使用Median of Medians算法来计算预期O(n^2)
时间内未排序的岛屿区域阵列的中位数,其中O(m)
是岛屿的数量。
总体时间复杂度m
。
如果您需要进一步的帮助,我可以提供我的实施方案。
答案 1 :(得分:1)
使用disjoint set可以得到O(A(N)),其中A是逆阿克曼函数来查找孤岛,然后使用nth_element(aka IntroSelect)在其中找到N / 2 O(N)来找到中位数。
jq -r -c $foo sample.json
O(A(N))的总数远小于O(N ^ 2)