Questions tagged «graph-traversal»

3
如何找到带有虫洞节点的最短路径?
这是我想通过代码执行的示例。我知道您可以使用跳转点搜索轻松地从绿色节点到红色节点,甚至A *也不会出现问题。但是,如何计算变形呢? 在图中,您可以看到,沿着蓝色路径,从绿色节点到红色节点仅需8步。蓝色路径会立即将您的位置从一个紫色节点移动到另一个紫色节点。花费2个动作的中间空间是您必须移动到的两个变形区域之间的一个点。 显然,走蓝色路径更快,因为您只需要(大约)移动一半到黄色路径,但是我该如何编程呢? 为了解决此问题,我们假设您可以使用图形周围有多个紫色“变形”,并且我们确切知道每个紫色点将变形到什么位置以及它们在图形上的位置。 有些紫色经线是双向的,而有些不是,这意味着,有时您只能从一侧进入经线,而在扭曲后不能返回。 我已经考虑了解决方案,但得出的结论是,我可以通过检查到每个变形点的距离(减去单向点)以及这些点之间的差以及与之接近的点来计算问题。 。 该程序必须弄清楚采用第二种经线比从第一条跳跃走更有益。因此,与其先移动6个点,然后进行变形,然后再步行剩余的8步(这比根本不使用经线要快),不如先移动6个点,然后再进行两次移动到第二个经线。 编辑:我意识到蓝色的路径实际上将采取12步,而不是8步,但问题仍然相同。

3
二叉树前后遍历的有用性
这可能很幼稚,但是我想知道,它是所有遍历类型的二叉树(普通树,排序树和平衡树)的上下文: 深度优先预购 深度优先 深度优先后继 广度优先 预购和后购商品的实际用途是什么?我的意思是,是否存在某种类型和/或配置的二叉树,其中前顺序和/或后顺序遍历将比其他两个具有(某些)优势? AFAICS,二进制树的某些类型和配置对于顺序和广度优先的二进制树可能具有一定的优势: 对于平衡二叉树,与深度优先相比,任何深度优先遍历将使用较少的内存存储空间(例如,对于6或7个节点的平衡二叉树,高度为2,因此任何深度优先遍历将需要存储最大值为在任何给定时间有2个节点,而最后一级有3个或4个节点,因此广度优先遍历在某个点最多需要存储3个或4个节点。在这种情况下,使用有序遍历将占用最少的内存,并以其自然顺序访问节点。 对于不平衡的二叉树,如果它接近最坏情况的插入方案,则与深度优先遍历相比,广度优先遍历将减少占用的内存。因此,在这种情况下,广度优先提供了优势。顺序遍历又具有按其自然顺序访问值的优点。 但是,我无法想到在遍历前后都比其他两个更有利的情况。


1
灵活实施DIFF的启发式方法
我创建了一个DIFF实现,以比较工作中的文档修订。它基于O(ND)差分算法及其变体。 变得很重要的一件事是获取更改列表并将其解释为人类可读的文本。尽管当前算法非常有效,但它是如此之大,以至于难以扩展。 简短问题 我当时正在考虑尝试使用A *和一种启发式方法,该方法会增加“转弯”的惩罚。想法是消除不必要的“添加,删除,添加,删除,添加,删除”,以便更轻松地解析为人类可以阅读的内容。基本上,将我的最短路径问题变成最简单的路径问题。 当然,不要创建始终为“删除所有内容,添加所有内容 ”的输出 听起来合理吗? 在DIFF实现中使用启发式算法是否有优先权?什么是启发式? 问题: 如果删除了一个长句子,又删除了另一个长句子,但它们确实共享至少一个单词,请说“与”。不理会常见单词(不要同时添加和删除它)将创建最短路径。但是,这实际上只是使尝试混淆更改打印内容的人感到困惑。 当前DIFF的示例: 旧文本: 清洁:用力洗净并用车间空气吹干。 新文本: 清洁:用丙酮和无绒布擦拭。 变更单清单: 将“强力清洗并吹干”更改为“用丙酮擦拭” 将“商店空气”更改为“丙酮和无绒布” 注意:使用“更改”代替 “删除'购买空气',添加'丙酮'” 如您所见,第二个注释失去了所有上下文,并且在没有查看完整的旧文本和新文本集的情况下,您无法理解其含义。 关于标点符号的注意事项: 我将标点符号分隔为单独的“单词”,这样我就可以 添加“(” 代替 将“修复”更改为“((修复) 因为这令人讨厌。但是,这意味着如果两个文本中甚至有一个逗号(与前面示例中的单词“ with”相对),就会发生相同的情况。 可能的解决方案: 我认为我可以使用不同的路径查找算法,从而使我能够灵活地为可能对人更有意义的不同更改“路径”增加权重。也许,我什至可以使旅行到包含标点符号的节点的权重很小(不确定这将如何影响其他事情)。 然后,我可以得到前面的示例以列出以下内容: 变更单清单: 将“ Powerwash并用商店空气吹干”更改为“用丙酮和不起毛的布擦拭” 看到!更清晰! 我知道我会在性能上受到打击,并且可能必须对程序进行大刀阔斧的检修,但是获得所需的最终结果更为重要。 底线: 同样,在DIFF实现中使用启发式方法是否有优先次序,这是什么? 其他想法?合理的时间投入?还有其他想法吗?其他算法? 提前致谢! 编辑: 我试图澄清/巩固我的问题,并推广我的问题,以在我的算法中添加启发式方法,而不是使用A *。在这种情况下,基本上是相同的事情,但是我现在仍然认为更准确。 这篇文章很有见地。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.