Recursion 查找强连接组件-无递归

Recursion 查找强连接组件-无递归,recursion,graph,components,Recursion,Graph,Components,我需要找到有向图的强连通分量。 我决定使用Tarjan的算法。到现在为止,一直都还不错。 然而,我需要我的程序操作的数据集是巨大的,我得到了stackoverflow异常。我无法增加堆栈大小,因此需要找到其他解决方案 我可以将递归算法改为迭代算法,但我想知道是否有“更干净的解决方案” 我想不会,但我想在开始实现迭代版本之前确定一下 谢谢你的建议 查找SCC的已知算法都基于DFS,DFS本质上是递归的,因此您基本上有以下选项: 生活在递归中。不是真正的选项,每个节点的递归将很快填满堆栈 用迭代重

我需要找到有向图的强连通分量。 我决定使用Tarjan的算法。到现在为止,一直都还不错。 然而,我需要我的程序操作的数据集是巨大的,我得到了stackoverflow异常。我无法增加堆栈大小,因此需要找到其他解决方案

我可以将递归算法改为迭代算法,但我想知道是否有“更干净的解决方案”

我想不会,但我想在开始实现迭代版本之前确定一下


谢谢你的建议

查找SCC的已知算法都基于DFS,DFS本质上是递归的,因此您基本上有以下选项:

  • 生活在递归中。不是真正的选项,每个节点的递归将很快填满堆栈
  • 用迭代重写递归,为DFS提供自己的堆栈。没那么难,我推荐这个
  • 发明一种非递归算法。祝你好运

    • 我也遇到了这个问题,我发现解决这个问题的最好方法是将所有代码传输到一个新线程,如下所示:

      public class Class implements Runnable {
          @Override
          public void run() {
              ...
          }
      } 
      
      在你的主课上,你要做到:

      public class Main {
          public static void main(String[] args) {
              Thread th = new Thread(null, new Class(), "solution", 32 << 20);
              th.start();
          }
      } 
      
      Thread(ThreadGroup group, Runnable target, String name, long stackSize)
      
      公共类主{
      公共静态void main(字符串[]args){
      
      Thread th=new Thread(null,new Class(),“solution”,32你是说StackOverflow异常吗?这是一个正确的论坛-_-