Math 百分比和树
我有一棵无序的树。 每个节点表示可以完成(1)、未完成(0)或具有子任务的任务 例如: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
-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%。顺便说一句,大声说并不代表你是对的,只是大声而已。