我最近开始使用 python 并且正在使用 python 构建一个家谱。我的想法是树应该在两边生长,即)老一代和年轻一代都可以添加到同一棵树上。
我尝试使用二叉树 ADT 和 N 叉树 ADT 来实现,但效果不佳。谁能给我推荐一个最适合构建家谱的 ADT,并指导我如何实现它?
我最近开始使用 python 并且正在使用 python 构建一个家谱。我的想法是树应该在两边生长,即)老一代和年轻一代都可以添加到同一棵树上。
我尝试使用二叉树 ADT 和 N 叉树 ADT 来实现,但效果不佳。谁能给我推荐一个最适合构建家谱的 ADT,并指导我如何实现它?
如果您查看应用程序“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@
人际关系远比用基本的树状数据结构表示的要复杂得多。
经过一番搜索,我发现Graph ADT更适合上述问题。由于一个家庭在各个方向都有广泛的关系,因此使用图 ADT 将是常规的。
这个想法是这样的,我认为这将有助于解决这个问题!