【问题标题】:Build Tree from List of "Contains" relationships从“包含”关系列表构建树
【发布时间】:2014-07-23 16:37:59
【问题描述】:

我有一个区域列表 (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#)的算法的指针来派生层次结构吗?

我开发了一些我认为可行的东西,但我更喜欢数学上更确定的东西,而不是“这似乎可行”。

如果没有唯一的层次结构,我很高兴打破它。

非常感谢

【问题讨论】:

  • StackOverflow 中有数百个(如果不是数千个)算法问题。另外,我不认为这个问题算作“关于软件开发的概念问题”。如果我指定答案必须在 C# 中,会不会突然好起来? (老实说,拆分似乎几乎完全是任意的,不过,不出所料,程序员的 StackExchange 获得了 1/100 的流量。对于 StackExchange 来说,这并不是一个伟大的举措......)
  • 此站点用于解决现有代码中的错误;另一方面,查看 StackOverflow 常见问题解答我认为您是对的,这可以很容易地发布在这里。我撤回了我之前的建议,即把它移到程序员那里并道歉。
  • 不需要道歉。可悲的是,我认为这个问题上的 -1(无论是谁)注定会得到答案......
  • 那是我的,我不能撤消它。
  • C'est la vie。如果我在接下来的几天内没有任何回复,我会在这个问题上添加我的“似乎正在工作”的算法答案。

标签: data-structures tree hierarchy contains


【解决方案1】:

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

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

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

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

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

再次:假设如果区域 X 包含区域 Y 包含的城镇,那么区域 X 包含区域 Y 包含的所有城镇,这似乎有效,反之亦然。

在我的例子中,我通过修改第 1 步来测试这个(同样非常低效,但我的数据集很小(

如果有人知道正确的答案(或更有效的答案,我将不胜感激。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多