我如何摆脱Kosaraju算法的python中的堆栈溢出问题?

问题描述

我是一名新程序员,我正在edx上学习斯坦福的算法课程。

编程任务之一是使用Kosaraju算法在具有〜1,000,000个顶点的图上找到强连通的组件。我的实现是从教科书的伪代码到Python的最基本的翻译,并且在较小的图形上也可以正常工作,所以我认为这是正确的。

Python的默认递归限制为1000,它达到了限制。

我尝试过sys.setrecursionlimit(1000000),但这无济于事,相反,我得到了“进程以退出代码-1073741571完成”,这是堆栈溢出。

我发现这两个页面用于增加堆栈大小限制,但不确定如何使用它们之一:Set stack sizeulimit command

另一个相关的信息是Python不能优化尾递归,但是我不确定它是否适用于我的代码。

G = {}
for i in range(1,875715):
    G[i] = [0]
for l in open('SCC.txt'):
    items = list(map(int,l.split()))
    G[items[0]].append(items[1])

Grev = {}
for i in range(1,875715):
    Grev[i] = [0]
for l in open('SCC.txt'):
    items = list(map(int,l.split()))
    Grev[items[1]].append(items[0])

def TopoSort(G):
    for v in G:
        if G[v][0] == 0:
            DFStopo(G,v)

def DFStopo(G,s):
    G[s][0] = 1
    global orderedVertexList
    for v in G[s][1:]:
        if G[v][0] == 0:
            DFStopo(G,v)
    orderedVertexList.insert(0,s)

def Kosaraju(G,Grev):
    TopoSort(Grev)
    global numSCC
    for v in orderedVertexList:
        if G[v][0] == 0:
            numSCC = numSCC + 1
            DFSSCC(G,v)

def DFSSCC(G,s):
    G[s][0] = 1
    global SCC
    SCC.append(numSCC)
    for v in G[s][1:]:
        if G[v][0] == 0:
            DFSSCC(G,v)

numSCC = 0
orderedVertexList = []
SCC = []

Kosaraju(copy.deepcopy(G),copy.deepcopy(Grev))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...