Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 树,其中每个节点可以有多个父节点_Oop_Design Patterns_Tree_Graph Theory_Composite - Fatal编程技术网

Oop 树,其中每个节点可以有多个父节点

Oop 树,其中每个节点可以有多个父节点,oop,design-patterns,tree,graph-theory,composite,Oop,Design Patterns,Tree,Graph Theory,Composite,这里有一个理论性/学究式的问题:想象一下,房产中的每一个都可能被多个其他人拥有。此外,从所有权的一次迭代到下一次迭代,两个相邻的所有者可以决定部分合并所有权。例如: territory 1, t=0: a,b,c,d territory 2, t=0: e,f,g,h territory 1, t=1: a,b,g,h territory 2, t=1: g,h 也就是说,c和d不再拥有财产;可以说,g和h变成了肥猫 我目前将此数据结构表示为一棵树,其中每个孩子可以有多个家长。我的目标是将其

这里有一个理论性/学究式的问题:想象一下,房产中的每一个都可能被多个其他人拥有。此外,从所有权的一次迭代到下一次迭代,两个相邻的所有者可以决定部分合并所有权。例如:

territory 1, t=0: a,b,c,d
territory 2, t=0: e,f,g,h

territory 1, t=1: a,b,g,h
territory 2, t=1: g,h
也就是说,
c
d
不再拥有财产;可以说,
g
h
变成了肥猫

我目前将此数据结构表示为一棵树,其中每个孩子可以有多个家长。我的目标是将其填充到复合设计模式中;但是,我在如何让客户能够返回并更新以前的所有权而不破坏整个结构的概念基础上遇到了问题

我的问题有两方面

  • 简单:这个数据结构的方便名称是什么,我可以自己用谷歌搜索它

  • 哈德:我做错了什么?当我编写代码时,我试图在脑海中记住“保持简单,愚蠢”,我觉得我打破了这个信条

  • 您的所有者和您的领地(财产)之间存在多对多关系。我不确定您使用的是哪种语言,但这种东西可以很容易地在关系数据库中表示和跟踪。(您可能希望每个实体都有一个表,并且关系可能需要第三个“连接”表。如果需要能够查询“返回时间”,这也可能有某种“时间索引”列。)

    如果您使用的是面向对象语言,则可以创建两个类Territory和Owner,其中Territory类有一个属性/成员/字段,它是指向所有者的引用/指针的集合,而Owner类有一个类似的Territory集合。(这两个集合之一可能需要包含“弱”引用,具体取决于语言。)

    在这种情况下,如果您希望能够返回并查看早些时候某个特定点的网络状态,可能会出现一些困难。(如果这是你需要的,那么说出来,我(或其他人)就可以发布一个解决方案

    我不确定您所追求的简化程度,但在这两种情况下,更新所有权关系都没有那么“困难”。也许如果你发布一些代码,给你更具体的建议会更容易

    我的问题有两个:简单:这个数据的方便名称是什么 这样我就可以自己用谷歌搜索了

    这里的不是一棵树,而是一幅图。多重地图将在这里帮助您。 但是任何邻接列表或邻接矩阵都会给你一个好的开始

    以下是关于邻接矩阵和列表的视频:

    哈德:我做错了什么

    这真的很难说。也许你没有对这种关系进行建模 以适当的方式。考虑到一个良好的数据结构,这并不难

    而且,当您要求设计模式时(但您可能自己发现了),
    复合模式可以让您轻松地对这种设置进行建模。

    我欣赏您的推理能力。不幸的是,我没有代码。只是一块白板。我认为,在数据库计算的早期表示数据在最佳和概念上都没有多大意义。就OOP而言,我在想…我不能换行,请耐心听我说:类teritorry{$owners=array();$lastOwners=array();$vertices=array();}而且……在树的更高层次上注入所有权的方法是绝对必要的。@user1119810我不确定我是否理解你最后的评论。正如Mare Infinitus正确指出的那样,这里没有真正的“树”,因此我不确定“更高级别”是什么意思。@user1119810是您的伪代码,如果您跟踪
    $lastOwners
    ,我想这意味着您希望能够至少一个时间步回顾过去。你还需要更多吗?(如果是这样的话,一个数组是不够的。)除此之外,您还需要对这个数据结构进行其他类型的“查询”,这一点非常重要。例如,您是否需要知道给定所有者现在和/或过去拥有什么?还是你对领土更感兴趣?或者你有兴趣获得一些集体数据,比如说,你的世界的“肥猫”程度?哇,turix。谢谢你的提问。这也需要时间。我会再打给你的。我想回答一个简单的问题,更高的层次,我的意思是,更早的时间。也就是说,根据定义,不是一棵树。请看一下我的答案。如果您需要更详细的信息,请提供一些有关您使用的语言的信息。有鉴于此,更具体的例子更容易给出。该死,你的答案需要时间来考虑。我怀疑有好东西。特别是,我希望有关于这方面的图表的干净的文献,而不是第三方的东西。是的,也许我没有很好地模拟这种关系。。。我会再打给你的,不客气。给定任何具有引用或指针的语言,您不需要第三方库。如果您还有其他问题,请留下评论。