如何解决我如何摆脱Kosaraju算法的python中的堆栈溢出问题?
我是一名新程序员,我正在edx上学习斯坦福的算法课程。
编程任务之一是使用KoSaraju算法在具有〜1,000,000个顶点的图上找到强连通的组件。我的实现是从教科书的伪代码到Python的最基本的翻译,并且在较小的图形上也可以正常工作,所以我认为这是正确的。
Python的默认递归限制为1000,它达到了限制。
我尝试过sys.setrecursionlimit(1000000)
,但这无济于事,相反,我得到了“进程以退出代码-1073741571完成”,这是堆栈溢出。
我发现这两个页面用于增加堆栈大小限制,但不确定如何使用它们之一:Set stack size,ulimit 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 举报,一经查实,本站将立刻删除。