计算向量中所有路径的最快方法

时间:2016-05-23 21:32:01

标签: c++ algorithm recursion vector traversal

我正在寻找在向量内的节点之间生成所有路由的最有效方法。想象一下以下(伪)代码:

vector<vector<Node>> step(vector<Node> list, Node nextStep)
{
    // 1. Erase current Node to avoid an infinite loop
    for(vector<Node>::iterator it = list.begin(); it != list.end(); ++it)
    {
        if((*it) == nextStep)
        {
              list.erase(e);
              break;
        }
    }

    // 2. Dig deeper into the list if more elements are available

    vector<vector<Node>> returnVector;
    if(list.size() > 0)
    {
        for(vector<Node>::iterator it = list.begin(); it != list.end(); ++it)
        {
            if(/* (*it) meets certain conditions*/)
            {
                vector<vector<Node>> tmp = step(list, (*it)); // Here the function calls itself



                for(vector<vector<Node>>::iterator n = tmp.begin(); n != tmp.end(); ++n)
                {
                    // 3. Insert "nextStep" at the beginning of the new path

                    (*n).insert((*n).begin(), nextStep);

                    // 4. Add new path to returnVector

                    returnVector.push_back((*n));
                }

                if(/* "nextStep" meets certain conditions */)
                {
                    // 5. Add "nextStep" as Node aswell

                    returnVector.push_back(std::vector<Node>{nextStep});
                }
            }
        }
    }

    return returnVector;
}

    /*****
      .
      .
      .
      .
    */

void run()
{
    vector<Node> v(100, Node());

    for(auto n : v)
    {
        step(v, n);
    }

}

此函数递归计算向量中的所有路由。我已经测试了它并且它工作得很好 - 只要向量中的元素数量不会太大。

我对这个编程领域非常陌生(递归和函数,其中性能实际上非常重要)。正如我上面已经写过的,我正在寻找一种更有效的方法来完成同样的任务。向量的大小可能会变得非常大并且性能会受到严重影响,从而导致CPU和RAM的使用,这可能是由于递归造成的。

我知道可以有很多组合,但也许已经有更好的算法用于此任务。

0 个答案:

没有答案