Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 百分比和树_Math_Tree - Fatal编程技术网

Math 百分比和树

Math 百分比和树,math,tree,Math,Tree,我有一棵无序的树。 每个节点表示可以完成(1)、未完成(0)或具有子任务的任务 例如: 1 -1.1 -1.2 --1.2.1 --1.2.2 -1.3 2 3 -3.1 4 -4.1 --4.1.1 5 1 50% -1.1* 100% -1.2 0% 2 0% 3 33% -3.1* 100% -3.2 0% -3.3 0% 假设叶1.2.1、3.1和5已完成 我想计算每个节点的完整性百分比。叶子很容易用0%或100%计算,但是如何计算所有其

我有一棵无序的树。 每个节点表示可以完成(1)、未完成(0)或具有子任务的任务

例如:

1
-1.1
-1.2
--1.2.1
--1.2.2
-1.3
2
3
-3.1
4
-4.1
--4.1.1
5
1      50%
-1.1*  100%
-1.2   0%
2      0%
3      33%
-3.1*  100%
-3.2   0%
-3.3   0%
假设叶1.2.1、3.1和5已完成

我想计算每个节点的完整性百分比。叶子很容易用0%或100%计算,但是如何计算所有其他的呢

现在,我从树上的叶子开始走,每个节点都是根据子节点的完整性百分比来计算的。例如:

1
-1.1
-1.2
--1.2.1
--1.2.2
-1.3
2
3
-3.1
4
-4.1
--4.1.1
5
1      50%
-1.1*  100%
-1.2   0%
2      0%
3      33%
-3.1*  100%
-3.2   0%
-3.3   0%
现在,1.2中添加了更多的子节点(即不再是叶,而是节点)。如果孩子们“没有完成”,1.2永远是0%,因此1是50%,但我希望1小于50%,因为从他的孩子和孙子孙女的角度来看,要完成100%的任务,需要完成的任务数量会更多

1       50%
-1.1*   100%
-1.2    0%
--1.2.1 0%
--1.2.2 0%
2       0%
3       33%
-3.1*   100%
-3.2    0%
-3.3    0%
最好的计算方法是什么?谢谢

您可以尝试使用(伪代码):


您可以将完成百分比定义为完成的总(子)节点数除以总(子)节点数。只数树叶

在这种情况下:

       1  (1/2 = 50%)
      / \
   1.1*  1.2
添加额外节点:

       1  (1/3 = 33%)
      / \
   1.1*  1.2 (0/2 = 0%)
         / \
    1.2.1   1.2.2
如果这还不够,您可以为每个任务添加一个权重,并计算完成的权重除以总权重。

对于任何节点, %完成=#子代叶完成/总#子代叶

其中:


子代叶数=总和(子代叶数)

这取决于您希望赋予每个级别的权重。如果我是你,我会选择你提到的第一种方法(即,在同一级别的项目上放置相同的权重),因此我认为50%的1是正确的,并且1.2个节点的“完成”百分比的缓慢增长会体现出拥有更多节点的差异


为了让一个节点影响更遥远的祖先,你可以将祖先百分比计算为其子树中所有叶子的平均值(这将为任务1提供33%的完成率),但这对我来说似乎不太正确。这一切都取决于您真正想要如何表示数据-我认为没有一种“正确”的方法。

我认为每个节点的百分比是其子节点(而非子节点)百分比的平均值。

比如说

 1_per = (1.1_per + 1.2_per) / 2
 3_per = (3.1_per + 3.2_per + 3.3_per) / 3

回答得好。仅此图表就值得+1。我不同意给出的大多数答案,我认为,除非您附加基于权重的系统,否则现有系统中的任务完成百分比是准确的。子任务的数量与主(根级别)任务的完成百分比无关。好吧,假设我正在从头开始构建一辆汽车。我有一个节点“物理构建”,包含10.000个子任务,在同一级别上有一个叶子“选择一个名称”。我不会这么说,一旦我决定叫它“Oldsmobile2000”,我就完成了一半@塞伯鲁斯:你在试图用你的逻辑来解决他的问题。如果他想以某种方式计算完成的百分比,那么根据定义,这是正确的方法。我确实认为他应该给每个节点增加一个显式的权重,但他暗示说每个叶节点都有相同的权重,解决方案应该只使用叶节点。这不符合该约束。为什么只使用叶节点?这是错误的,因为“我想计算每个节点的完整性百分比”他想计算每个节点的完整性,是的,但只有叶节点计入权重。使用您的逻辑,节点1将计算完成25%,而不是正确的33%。顺便说一句,大声说并不代表你是对的,只是大声而已。