请教gh中两个任意的树型数据究竟是按什么原则匹配运算并按什么原则进行保存的?

RT
这个问题困扰了我很久,虽然现在很多讲解GH树形数据的视频、文章,但基本上看不到讲解这个原理的。
我唯一一能找到的讲解是 曾旭东 等著的《Rhinoceros & Grasshopper 参数化建模》第11.3.2节 路径长度不相等的树状数据配对方式(P344~P346 )中,有一段比较详细的讲解,大致原则我归纳为下面4条:
1、先对树型数据的路径(含数据的路径)排序:从最长的一条路径的根部排到端部,然后是该路径的第二长的分支,同样方法排序,再然后是第二长的路径同样方式排序,以此类推;
2、两组树型数据的路径排序完成后,路径和路径之间按长列表匹配;
3、匹配后的路径中所含的数据之间按长列表、短列表、crossreference原则匹配;
4、运算完成后,把数据保存在较长的那个路径中;
但我自己随便试了一下,发现这4条原则中,只有第2条和第3条是正确的,第1条也基本正确(其实面板上路径的排序就是匹配的排序);但最最最最最重要的第4条却并不对!其实稍微看一下就知道它有问题,比如如果两个匹配的路径长度一样,怎么办?如果两组运算的路径一样,结果难道要归并吗?因此这个问题一致困扰着我。
很多时候我会这样安慰自己:谁会没事去匹配两组"乱七八糟"的树型数据呢?一般都是匹配有规律的,而且基本上都是树和列表匹配,没必要去深究树和树匹配的问题。
但想一想,其实**只要把树和树匹配这个问题讲清楚了,其余的问题只不过都是它的特例而已**,讲解GH树型数据本不用那么多花里胡哨的讲解的,只需把任意的树和任意的树的匹配原则讲清楚,其他问题自然就都清楚了。
不知道我是否把问题想简单了,可能tree和tree的匹配是数据结构和算法的问题,很难三言两语讲清楚。但望版主和有了解的朋友可以给予指点一二,给点文章或是提示,我很想弄明白这个原理。 :pray:
PS:图片没什么特别意思,就是想说明第4条是不准确的。

你的表达一片混乱,基本看不懂。 :laughing:
建议在初学阶段少看第三方资料。看得越多,总结和归纳越多,最后到头来无意义的损耗也就越多。

其实没啥好总结的,因为都是最简单的规律。
99.99%的情况,路径内数据是对齐的,路径本身也是对齐的。

你图上的情况。。。我认为是比较浪费时间的。
理解起来也很简单,D和C找不到匹配项目了,找到了最后那个路径456去匹配
不是很理解你的问题,但是还是建议别纠结了。GH没你想的那么复杂

版主你好。
首先我不算是GH初学者,用这个软件很久了。
我只是纯粹对GH中数据匹配的最底层逻辑比较好奇,所以发问了。
就像你说的,99%的情况可能是对齐的,但我就想知道出现那1%的情况下(比如我图上这样的),是采用什么底层逻辑而已,比如为何两次运算结果保存路径不一致,它总有个基本的底层逻辑吧?
可能在你看来我的问题有些无聊和浪费时间,但我就是好奇想知道而已。那怕你告诉我说:“嗯,这个你得去读GH作者的源代码去看他是如何为每个运算器进行设计的”。那我也觉得这是个可以接受的回复。

你要是一开始就将问题讲清楚,就不至于浪费回答者的时间了。你说是吗?
至少你应该“保存路径”这样的自己发明创造的描述,在图上给圈出来
我到现在才明白过来你的问题说的是什么地方。

看起来问题一点都不幼稚

我只能说尽可能给你提供一些信息和我个人的理解,不敢保证100%准确回答你的问题
尽量不用那么不切实际的路径去测试和考察软件底层内核的原理。毕竟软件是工具,而不是博士论文。针对你这个情况,说真的我也无法理解第二个的0;2;4和0;2;5怎么来的
只能说是推测在找不到匹配路径的时候,将末位数做一个简单的累加。
GH没有你想象的那么严谨,有整套的理论体系,我也比较反对你通过看书(这本书很老了)的方式去研究他背后的东西,因为极有可能他就是作者并没有非常在意的一些细枝末节,以他自己理解能用的方式先处理了。他也不会想到有用户会用那么极端的情况去测试他的逻辑。就好比你学过的语文课拼命揣测作者当时写某句话的用意,但其实作者当时可能就是:“噢。我随便写的“,当然我并不是说David Rutton是一个随便的人,而是GH涉及到的细枝末节太多了,要考虑到的各种情况也太多了
你把他当作绝对严谨的数学模型,试图用奇怪的特例想要摸清他最底层的逻辑
确实是挺浪费时间的

这个问题困扰了我很久

工具就是工具,一切都应该以解决问题为导向。工具只是为了你达成目的服务的,不要成为工具的奴隶。哪怕强大如苹果,微软,谷歌,他们的软件和硬件都经常会出现令你摸不着头脑的反馈,深究他们的底层也会发现有无数纰漏和错误。然而这并不影响他们作为工具给我们提供了最好的服务。

所以不要为这个问题困扰了,只要是面对电脑上的东西,你就要做好时时刻刻碰到意料之外的情况的准备。
而并不能因为某软件的某逻辑不符合常理,而让自己的工作计划和状态受到影响。
哪怕你真的碰到了最令人崩溃的bug,哪怕软件不管从哪个层面上来说,都没按照常理出牌
你也得有绕开bug解决问题的技术储备和心理准备
千万不能钻牛角尖。


你可以在A端口右键后选择principle
他就会以A为逻辑去输出路径

也可以是以B为principle
希望这可以解答你的困扰

至于在你不给principle的情况下到底以那个为准。
参考我上一个回帖,可以无视掉 :laughing:

感谢回复。抱歉用了一些不是很专业的术语且没有标注,导致问题比较模糊不清。
你这么一说,我也就释然一些了。可能就像你说的,这个过程或许并没有一个非常严谨的数学模型(我一直以为是有的,比如叫“树匹配算法”之类的,看来纯粹是我自己想多了)。
记得我曾经还特地搜过EI和SCI库想看看有没有类似的论文,当然是没有找到。那时我觉得主要自己并不是计算机专业的所以没有搜对关键词而已。
今天突然想起这事情,来了兴致,所以特来发帖问一下。
再次感谢回复。