1

我最近开始使用 python 并且正在使用 python 构建一个家谱。我的想法是树应该在两边生长,即)老一代和年轻一代都可以添加到同一棵树上。

我尝试使用二叉树 ADT 和 N 叉树 ADT 来实现,但效果不佳。谁能给我推荐一个最适合构建家谱的 ADT,并指导我如何实现它?

4

2 回答 2

1

如果您查看应用程序“longlines”、GEDCOM 文件格式(不是 XML 版本)和其他家谱软件,它会为每个人和每个家庭单位创建一个唯一记录,然后使用这些记录的 ID 创建符号引用给家庭成员和儿童。

如果您查看此 GEDCOM 记录,它会识别 ID 为“I25”的个人,他是家庭 ID F11 的孩子 (FAMC) 和家庭 F6 和 F12 的配偶 (FAMS)。

  0 @I25@ INDI
  1 NAME Thomas Trask /Wetmore/ Sr
  1 SEX M
  1 BIRT
    2 DATE 13 March 1866
    2 PLAC St. Mary's Bay, Digby, Nova Scotia
    2 SOUR Social Security application
  1 NATU
    2 NAME Thomas T. Wetmore
    2 DATE 26 October 1888
    2 PLAC Norwich, New London, Connecticut
    2 AGE 22 years
    2 COUR New London County Court of Common Pleas
    2 SOUR court record from National Archives
  1 OCCU Antiques Dealer
  1 DEAT
    2 NAME Thomas Trask Wetmore
    2 DATE 17 February 1947
    2 PLAC New London, New London, Connecticut
    2 AGE 80 years, 11 months, 4 days
    2 CAUS Heart Attack
    2 SOUR New London Death Records
  1 FAMC @F11@
  1 FAMS @F6@
  1 FAMS @F12@

人际关系远比用基本的树状数据结构表示的要复杂得多。

于 2014-04-18T03:48:22.673 回答
0

经过一番搜索,我发现Graph ADT更适合上述问题。由于一个家庭在各个方向都有广泛的关系,因此使用图 ADT 将是常规的。

  • 每个节点都可以存储一个人的详细信息。
  • 节点可以包含父节点链接,以及查找两个节点之间关系的一些功能等。
  • 要查找关系,假设父节点为父母,父节点的父节点为祖父母等。
  • 遍历父节点,查找是否还有其他子节点,标记为兄弟节点等。

这个想法是这样的,我认为这将有助于解决这个问题!

于 2015-12-08T16:44:32.423 回答