algorithm - 为合并排序算法创建决策树

标签 algorithm sorting merge mergesort decision-tree

在我的作业中,我需要为任意输入 S={a,b,c} 创建 n=3 的决策树。

这是我的递归调用树。 S={a,b,c} 变成 S={a} 和 S={b,c} 和 S={b,c} 变成 S={b} 和 S={c}。在基本情况下,我有 S={a}、S={b} 和 S={c}。

当我将 S={b} 与 S={c} 合并时,我只有 1 个决定,检查是否 b < c。如果为真,则 S={b,c}。否则,S={c,b}。

之前合并 b 和 c 返回的任何内容都与 S={a} 合并。

在 S={a} 和 S={b,c} 的合并中,我有几个决定。我首先检查是否 a < b。如果为真,并且由于 S={b,c} 已排序,则 S={a,b,c}。如果为假,我还有另一个决定要做。检查是否 a < c。如果为真,则 S={b,a,c}。否则,S={b,c,a}。

这让我陷入困境。如何将我的所有工作合并到一个决策树中?我可以毫无问题地为迭代算法创建决策树,但是由于该算法是递归的,所以我很困惑。

感谢任何帮助。谢谢。

最佳答案

您必须从递归的最深层次开始遵循补丁。在这种情况下,树的顶部是“if (b <= c)”。然后,如果为真,正如您已经提到的,它是“if (a <= b”) S={a,b,c} else “if (a <= c”) S = {b,a,c}” “else S = {b, c, a}”,则当“if (b <= c)”为假时,模式类似。

我不确定这有什么意义。在 n=4 的情况下,您有 24 种可能的排列,对于 n = 5,有 120 种排列,相当大的树。

关于algorithm - 为合并排序算法创建决策树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623376/

相关文章:

r - 如何从邻接表中找到循环路径

arrays - 计算 DAG 中所有长度的路径数

java - 不带库方法的二分查找

python - 将数据帧与多次包含 id 的行合并时拆分值的总计

r - gvisMerge + gvisAnnotatedTimeLine公共(public)RangeSelector

algorithm - 找到系列的第 N 项

algorithm - 贝尔曼-福特变体

javascript - 使用 JavaScript 对 JSON 文件或至少一个下拉列表进行排序的替代方法?

java - 如何在 Quicksort (DualPivotQuicksort) 的 java 实现中引入随机性

python - 将数组列表合并为一个数组列表