问题标签 [multiway-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
354 浏览

c - 如何树遍历多路树

我试图遍历一棵多路树,但我试图以一种有效的方式来做,但这并没有真正帮助我,更重要的是我想递归地做。

我的想法是这样的:我有一棵树,一个孩子和它的兄弟姐妹。我想递归地和孩子们一起下去,然后只要它有兄弟姐妹也递归地去他们身上。

在这里,我将向您介绍我的数据结构以及我如何尝试实现它。这是一个完整的功能“可测试”,它还将创建一张照片供您查看树并使用代码:

我要创建的功能保持不变,即:

我希望找到孩子,但如果节点不是根的直接孩子,它会返回 NULL。我要创建的功能的期望:在树中以最有效的方式找到孩子。

0 投票
2 回答
108 浏览

c - 有效打印树节点及其所有子节点

我正在尝试制作一个可以打印节点及其所有子节点的函数,但我正在尝试使其高效且递归。但它并没有真正起作用。

此代码将为您提供一个可验证的示例,这就是我尝试做的:

我得到的结果0 1 2 3 4 5就是所有节点,但我想打印如下内容:

0 投票
2 回答
315 浏览

haskell - 如何记住游戏树(可能无限的玫瑰树)的重复子树?

我正在尝试在 Haskell 中实现Negamax算法。

为此,我代表游戏在玫瑰树中的未来可能性(Data.Tree.Forest (depth, move, position))。但是,通常可以通过两种不同的移动顺序到达某些位置。重新评估重复位置(的子树)是一种浪费(并且很快变得非常慢)。

这是我到目前为止所尝试的:

  • 实现打结的变体以共享常见的子结果。但是,我只能找到为(可能是无限的)列表打结的解释,而没有找到关于重用子树的解释。

  • 我考虑过的另一种方法是在Statemonad 内构建一棵树,其中要保留的状态将是Map (depth, position) (Forest (depth, move, position))执行显式记忆,但到目前为止我也无法正确设置它。

我认为这两种方法都可能存在只能以核心递归方式构建博弈树的问题:我们不是从叶子到根构建树,而是从根向下懒惰地构建一个(可能是无限的)树。


编辑:给你一个我目前正在使用的代码的例子(太慢了):

(TypeFamilies 用于允许每个Game实现都有自己的 a 概念,Move然后需要 FlexibleContexts 来强制Move s实现Ord.

0 投票
3 回答
389 浏览

algorithm - 在插入过程中逐步存储从根节点到多路树节点的路径,使得存储操作没有O(n)的复杂度

我想问一下是否有人知道在插入新节点期间存储从根节点到多路树的新节点的路径的高效方法。例如,如果我有以下树:

多路树

对于每个节点,我目前在插入过程中存储一个从根节点到节点的路径数组,方法是通过int为相同深度的每个子节点分配一个唯一的 ID:

如果我现在从深度 3 的叶节点插入一个新节点1,我将必须为其创建一个新的路径数组,以存储父节点的所有节点1(即[1, 1, 3, 1])加上新的子 ID,该 ID1用于第一个子节点:

由于我的树在高度上增长了很多(每个深度的孩子数量相对较少,但深度可以很高),该算法的缓慢部分将是这个数组重新创建过程。想象一下深度树1.000.000,如果我从深度节点插入一个新节点1.000.000,我必须为这个新节点创建一个新数组,存储1.000.001父节点的所有 ID 并附加新节点的 ID:

在节点插入期间是否有更有效的方法来存储每个节点上的路径?

我基本上需要这个来确定任何给定的节点是否是树中可能的父节点的子节点,并且由于我将路径存储在每个节点中,我可以通过检查子节点的路径数组轻松做到这一点,如下所示:

这种查找操作会很快,问题是随着树的深入而创建路径数组。

任何建议,将不胜感激。

感谢您的关注。

0 投票
1 回答
125 浏览

haskell - 在 Haskell 中查找多路树(玫瑰树)的给定节点的邻居数

考虑以下玫瑰树的定义: 树可以包含唯一的节点。

如何找到玫瑰树的给定节点的邻居数?示例我的意思:

我不知道如何实现该功能

你能帮我实现这个功能吗?

编辑: 我想出了这个解决方案:

而且我认为这是一个非常糟糕的解决方案。你能给我一些改进的建议吗?

0 投票
0 回答
18 浏览

algorithm - 多类决策树上的多路分裂

我正在尝试在如下所示的多类数据集上实现具有多路拆分的决策树: 在此处输入图像描述

我试图在网上找到一种算法,但我只找到了以下两种情况的一些算法:

  • 使用多类数据集进行二进制拆分;
  • 使用二元类数据集进行多路拆分。

是因为我正在尝试的事情是不可能的吗?

如果您知道可以帮助我解决问题的在线资源,可以与我分享。

致以我的问候!

0 投票
1 回答
286 浏览

ocaml - 使用 OCaml 查找多路(通用树)的高度

作为函数式编程 (OCaml) 的新手,我一直遇到这个问题。

我想出了如下所示的代码:

但是 OCaml 的顶层(utop)给出了警告:

当我跑步时

utop 抛出关于匹配失败的异常。

我也实现了这个:

它返回

另外,我还尝试了另一种方式:

那么错误是:

那么,我该如何克服这个问题呢?

0 投票
1 回答
45 浏览

recursion - Elm - 使用列表折叠递归类型无法编译

我正在关注这篇关于 catamorphism 的文章,我正在尝试为这样的递归数据类型定义折叠函数

我写的是这样的:

如果我不推断foldTree函数编译的类型,但它似乎不可用:

抛出以下内容:

自动推断其类型foldTree使其不可编译并抛出以下内容:

如果我尝试按照提示进行操作,仍然无法编译

我被困住了。准确地遵循文章上的类型似乎也不起作用。我知道文章中的代码是 F#,我正在研究 Elm,但我认为在这种情况下,它应该是 100% 可翻译的。

我哪里错了?

提前致谢!

0 投票
2 回答
54 浏览

json - Elm - 解码递归多路树

我正在研究这种类型的递归树

在哪里

我正在尝试将这种json解码成它

要解码 Id 类型,我正在使用这些解码器

为了解码树结构,我尝试了以下方法,使用 Json.Decode.Pipeline:

但是当我尝试解码结构时,出现以下错误:

但我不明白为什么,因为这两个领域identries在那里,但它却抱怨。

我究竟做错了什么?

在此先感谢您的帮助