从"包含"的列表构建树关系

时间:2014-07-23 16:38:00

标签: data-structures tree hierarchy contains

我有一个区域列表(A,B,C ......),每个区域都包含它们包含的城镇(1,2,3,4)列表。

请注意,这些不是直接父母,同一个城镇显示在包含它的任何区域。

A: 1 2 3 4 5 6 7 8 9 
B: 2 3 4 5
C: 4 5
D: 2 3
E: 5 6 7

就我而言,它们总是形成一种独特的等级关系,其中一个区域可以包含另一个区域,以及不属于任何子区域的城镇。

A: B E   1 8 9
B: C D
C:       4 5
D:       2 3
E:       5 6 7

如果我们假设层次结构是唯一的,有人可以给我一个指向任何通用语言(或伪代码)的算法的指针(我使用C#)来推导层次结构吗?

我已经开发了一些我觉得有用的东西,但是我更喜欢一些在数学上更确定的东西,而不是"这似乎有效。"

如果没有独特的等级制度,我很高兴让它破裂。

非常感谢

1 个答案:

答案 0 :(得分:0)

我的解决方案,我认为是正确的,但效率不高,是

(1)确定每个城镇的直接父母区域:

对于每个城镇,找到包含该城镇的城镇数量最少的区域。

(2)确定每个区域的直接父母:

对于每个区域,找到完全包含该区域的城镇数量最少的区域(当然不包括其自身)[完全包含=区域A中的所有城镇也在区域B]

再次:假设如果区域X包含区域Y包含的城镇,则区域X包含区域Y包含的所有城镇,反之亦然。

在我的情况下,我测试了这个(再次大规模效率低下,但我通过修改步骤1来获得小(<1,000个城镇)数据集)。对于每个城镇,我找到包含该城镇的所有区域按照该地区的城镇数量对它们进行排序。然后,我检查每个区域是否包含在列表中的下一个区域。

如果有人知道正确答案(或者更有效率,我会感激您的贡献。)