在Matlab中动态地将节点和边添加到图数据结构中

时间:2016-09-02 04:37:41

标签: python algorithm matlab graph

我通常在matlab中创建图形如下:

private static bool Check2DictionariesAreEqual(Dictionary<string, object> entry1, Dictionary<string, object> entry2)
{
    if(entry1 == null && entry2 == null)
    {
        return true;
    }
    else if(entry1 == null || entry2 == null)
    {
        return false;
    }

    if(entry1.Count != entry2.Count)
    {
        return false;
    }

    bool result = true;

    foreach (string key in entry1.Keys)
    {
        // Check Key
        result &= entry2.ContainsKey(key);

        if (!result) // Quick Break
        {
            break;
        }

        // Check Value
        result &= entry2[key] == entry1[key];

        if(!result) // Quick Break
        {
            break;
        }
    }

    return result;
}

等等。

如果我预先创建了图形并以比喻的方式给我,这非常有效,因此我必须创建一个表示该图形的邻接矩阵。但现在我有一个不同的问题。我必须动态地从头开始创建图形。我有一堆节点,比如500个节点。现在我必须遍历这500个节点,如果满足某些条件,我将放置一些节点,比如我的图形结构中的200个节点。然后我将在这个200个节点的池中的不同节点对上运行一个循环,如果满足某些条件,那么我将添加一个边。

我在Matlab工作,我可以想到的一个方法是,我将初始化一个大小为500x500的邻接矩阵。只需为通过该标准的边添加边。这是不可取的。我根本不想在我的图表结构中包含500个点。

基本上,我想在Matlab中这样做。在研究论文中的伪代码中,它被告知:

g=sparse(5,5);
g(2,3)=1;

我该如何实现?

然后一个伪代码告诉

Add vertex v0 to graph G.

最后,如果图Add edge (v0,v1) to graph G. 中已经存在边缘,并且您被告知:

(v0,v1)

我想有效地完成这些步骤。我希望能够动态创建我的图表。我不想创建一个巨大的邻接矩阵,然后在其中指定边缘。如果需要,我想逐步构建我的图表。如果可以在Matlab中完成,请告诉我。否则我也对python开放。

1 个答案:

答案 0 :(得分:0)

您是否尝试过研究MATLAB的新版graph课程?它是在R2015b中引入的,并且具有可用于有效执行这些步骤的方法。具体来说,它有addnodeaddedgermedge等。您还可以使用graphadjacency对象中提取邻接矩阵。

http://www.mathworks.com/help/matlab/graph-and-network-algorithms.html