You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3D版最大岛屿体积算法运行出现Core dumped错误如何优化

问题原因分析

首先你遇到的core dumped错误并非代码运行效率过低导致,核心诱因是递归实现的DFS触发了栈溢出:Python默认的递归调用栈深度上限通常在1000左右,当遇到超大连通岛屿时,递归深度会远超这个阈值,操作系统会直接终止进程抛出core dumped错误。

优化方案
  • 替换递归DFS为迭代DFS/BFS:这是解决栈溢出的核心优化点。手动维护栈/队列存储待访问的坐标,这部分内存会在堆空间分配,不受系统递归栈大小的限制,完全规避深度过大导致的崩溃问题。
  • 提前缓存维度参数:原代码每次边界判断都会重复计算三个维度的长度,提前缓存为常量可以减少不必要的重复运算开销。
  • 保留原地修改标记访问的逻辑:原代码直接将访问过的体素设为0,无需额外开辟访问标记数组,已经是内存占用最低的实现方式,无需调整。
优化后代码示例

下面给出BFS实现的版本,可稳定处理200x200x200规模的体素输入:

from collections import deque

class Solution3D:
    def maxAreaOfIsland3D(self, grid):
        max_volume = 0
        # 提前缓存三个维度的长度,避免重复计算
        R = len(grid)
        if R == 0:
            return 0
        C = len(grid[0])
        if C == 0:
            return 0
        L = len(grid[0][0])
        if L == 0:
            return 0
        # 预定义6个搜索方向
        dirs = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)]
        
        for r in range(R):
            for c in range(C):
                for l in range(L):
                    if grid[r][c][l] == 1:
                        current_volume = 0
                        q = deque()
                        q.append((r, c, l))
                        grid[r][c][l] = 0
                        while q:
                            x, y, z = q.popleft()
                            current_volume += 1
                            for dx, dy, dz in dirs:
                                nx, ny, nz = x + dx, y + dy, z + dz
                                if 0 <= nx < R and 0 <= ny < C and 0 <= nz < L and grid[nx][ny][nz] == 1:
                                    grid[nx][ny][nz] = 0
                                    q.append((nx, ny, nz))
                        max_volume = max(max_volume, current_volume)
        return max_volume

如果偏好DFS逻辑,只需将队列的popleft()改为pop()即可转为迭代DFS实现,二者内存占用和运行效率差异很小。


内容的提问来源于stack exchange,提问作者An Hernández

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:27:00