老师您好,关于实际生产环境中DFS实现的问题
来源:3-4 实现图的深度优先遍历
qq_不睡觉的怪叔叔_0
2023-01-07
我用《算法四》中的测试数据(一百万个结点,七百万条边)去测试我的DFS递归实现(C++),发现很容易就栈溢出了,加大栈容量到16M,最多也就遍历两三万个结点就栈溢出。所以想请教一下,实际生产环境中或者成熟的软件产品中,它们的图的DFS实现是不是都是使用迭代(配合后入先出栈)方式实现?
写回答
1回答
-
liuyubobobo
2023-01-07
如果数据量确实到达当前环境的内存无法承受的程度,需要把递归算法改成非递归算法。所有的递归算法都一定能改成非递归算法,方法是手动设置一个栈模拟系统栈的运行。
另外一个解决方案是使用 BFS。
另外,对于现代一般家用计算机来说,100 万节点的递归应该不成问题,通常是编译或者运行环境限制了对系统内存的使用。你可以设置你的编译运行环境的相关参数。比如可以查询类似这样的问题:https://stackoverflow.com/questions/54821412/how-to-increase-stack-size-when-compiling-a-c-program-using-mingw-compiler
继续加油!:)
022023-01-11
相似问题