【发布时间】:2014-01-18 13:39:09
【问题描述】:
我的问题:我有一个由node struct 组成的图表
struct node {
node *n1;
node *n2;
}
我想添加一些成员来创建一个新结构newNode
struct newNode {
newNode *n1;
newNode *n2;
newNode *n3; // new member
int a; // new member
}
我想在图中保留原来的“节点连接”,这样我就可以做到了
newNode *n;
n->n1->n2...
就像
node *n;
n->n1->n2...
其中两个结构的n1(或n2)代表图中的同一个节点,而我也可以这样做
newNode *n;
n->n1->a...
n->n1->n3...
修改 node 结构体很棘手,因为它是在大型库中定义的。
我的想法是在newNode struct 中再添加一个成员
struct newNode {
node *n; // added member
newNode *n1;
newNode *n2;
newNode *n3;
int a;
}
首先,我为每个node n 创建一个newNode n_new。然后我遍历每一对n_news,比如n_new1和n_new2,看看n_new1->n和n_new2->n之间是否有联系,即是n_new1->n->n1 == n_new2->n,还是n_new1->n->n2 == n_new2->n,反之亦然。如果是这样,我制作n_new1->n1 = n_new2,或n_new1->n2 = n_new2,反之亦然。
但是时间复杂度是O(#node^2)。效率低下。
还有其他想法吗?
P.S.该图是一个降序二元决策图。
【问题讨论】:
-
你想要一个包含 new_node 和 node 的图吗?
-
@user3125280 我想保留原始节点(和连接),但还要添加一些新节点。这两个结构首先应该代表同一个图。
-
啊,我现在明白了——你想基本上复制一个图形结构。您所描述的确实是一种非常缓慢的方式。我建议你谷歌复制一个图形数据结构或类似的。基本上要复制一个节点,创建一个 n_new,然后用旧节点的 n1 和 n2 的副本填充其 n1 和 n2。您将需要一种机制来确定您已经复制了哪个节点(可能您需要一个 bst 或哈希,除非您可以更改节点的源)。
标签: c algorithm data-structures struct