几天前,我在一个巨大的图(几乎一百万个顶点和六百万条边)上运行Kosaraju 的算法时遇到了一个问题。问题出在算法的DFS(深度优先搜索)部分,即递归堆栈级别太深。我在 Ruby 中实现了算法,我使用的 Ruby 版本是 1.9.3。
为了检查堆栈大小,我决定运行简单的程序:
def r n
p n
r n+1
end
r 1
表示终止前的堆栈大小。我用了
ulimit -a
命令检查堆栈大小和
ulimit -s 32768 # Seems like this is the maximum stack size for mac OS
ulimit -s unlimited # => Invalid argument error
更改堆栈大小。即使在我更改堆栈大小后,r-procedure 仍显示相同的数字 - 8193。在我将 Ruby 更改为 1.8.7 后,最后一个数字变为 19177。
最终我找到了一个使用 Ubuntu 的朋友,并且堆栈大小没有限制。我成功运行了 Kosaraju 的算法。
我怎样才能在mac上做到这一点?