我通常在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开放。
答案 0 :(得分:0)
您是否尝试过研究MATLAB的新版graph
课程?它是在R2015b中引入的,并且具有可用于有效执行这些步骤的方法。具体来说,它有addnode
,addedge
,rmedge
等。您还可以使用graph
从adjacency
对象中提取邻接矩阵。
http://www.mathworks.com/help/matlab/graph-and-network-algorithms.html