您是否有此解决方案问题的决策树示例。
我想画出决策树用于回答问题(大多数人都能理解)。但我不知道如何绘制这个决策树。举个例子,我不知道叶子是用来表示这个算法的
问题2
假设给你 n 个红色和 n 个蓝色的水壶,它们都有不同的形状和大小。所有红色的水壶都装有不同数量的水,蓝色的也一样。此外,对于每个红色水壶,都有一个装有相同水量的蓝色水壶,反之亦然。
你的任务是找到一组水罐,分成几对装有相同水量的红色和蓝色水罐。为此,您可以执行以下操作:挑选一对红壶和蓝壶,将红壶装满水,然后将水倒入蓝色壶中。此操作将告诉您红色或蓝色水壶是否可以容纳更多的水,或者它们的体积相同。假设这样的比较需要一个时间单位。您的目标是找到一种算法,该算法可以进行最少数量的比较以确定分组。请记住,您不能直接比较两个红壶或两个蓝壶。
1. 描述一种确定性算法,该算法使用 Θ(n2) 比较来将水壶分组成对。2.证明解决此问题的算法必须进行的比较次数的下限 Ω(nlgn)。
为了解决这个问题,算法必须执行一系列比较,直到它有足够的信息来确定匹配。我们可以根据决策树来查看算法的计算。每个内部节点都标有我们比较的两个水壶(一个红色,一个蓝色),并具有三个输出边(红色水壶小于、相同大小或大于蓝色水壶)。叶子上标有独特的水壶匹配。第8 章的解决方案:线性时间排序8-17 决策树的高度等于算法为确定匹配而必须进行的最坏情况比较次数。为了限制这个大小,让我们首先计算 n 个红色和 n 个蓝色罐子的可能匹配数。如果我们在开始比较之前将红色水罐从 1 标记为 n,并将蓝色水罐从 1 标记为 n,该算法的每个结果都可以表示为一个集合 {(i,π(i)) : 1 ≤ i ≤ n 并且 π 是 {1,..., n}} 上的一个排列,其中包含成对的红壶(第一个组件)和匹配的蓝色水壶(第二个组件)。由于每个排列 π 对应于不同的结果,因此必须恰好有 n!不同的结果。现在我们可以限制决策树的高度 h。每棵分支因子为 3 的树(每个内部节点最多有三个子节点)最多有 3h 个叶子。由于决策树必须至少有 n! 孩子们,因此 3h ≥ n! ≥ (n/e) n ⇒ h ≥ n log3 n - n log3 e = (n lg n) 。所以任何解决问题的算法都必须使用 (n lg n) 比较。其中包含配对的红色水壶(第一个组件)和蓝色水壶(第二个组件)。由于每个排列 π 对应于不同的结果,因此必须恰好有 n!不同的结果。现在我们可以限制决策树的高度 h。每棵分支因子为 3 的树(每个内部节点最多有三个子节点)最多有 3h 个叶子。由于决策树必须至少有 n! 孩子们,因此 3h ≥ n! ≥ (n/e) n ⇒ h ≥ n log3 n - n log3 e = (n lg n) 。所以任何解决问题的算法都必须使用 (n lg n) 比较。其中包含配对的红色水壶(第一个组件)和蓝色水壶(第二个组件)。由于每个排列 π 对应于不同的结果,因此必须恰好有 n!不同的结果。现在我们可以限制决策树的高度 h。每棵分支因子为 3 的树(每个内部节点最多有三个子节点)最多有 3h 个叶子。由于决策树必须至少有 n! 孩子们,因此 3h ≥ n! ≥ (n/e) n ⇒ h ≥ n log3 n - n log3 e = (n lg n) 。所以任何解决问题的算法都必须使用 (n lg n) 比较。每棵分支因子为 3 的树(每个内部节点最多有三个子节点)最多有 3h 个叶子。由于决策树必须至少有 n! 孩子们,因此 3h ≥ n! ≥ (n/e) n ⇒ h ≥ n log3 n - n log3 e = (n lg n) 。所以任何解决问题的算法都必须使用 (n lg n) 比较。每棵分支因子为 3 的树(每个内部节点最多有三个子节点)最多有 3h 个叶子。由于决策树必须至少有 n! 孩子们,因此 3h ≥ n! ≥ (n/e) n ⇒ h ≥ n log3 n - n log3 e = (n lg n) 。所以任何解决问题的算法都必须使用 (n lg n) 比较。