假设的过程链的过程树以树结构表示。每个进程产生的进程数与其进程号相同,即进程号3具有3个子进程。进程按级别顺序命名,根目录为1,其子项从2命名,依此类推。给定流程的父流程的流程编号是多少?
1
\
2
/ \
3 4
| |
+-+-+ +-+--+-+
| | | | | | |
5 6 7 8 9 10 11
因此,对于6,父进程将为3。
我在O(n)中编写了一个函数,该函数仅将树构建到n,然后从树中找到父树,但是我相信有更好的方法来解决此问题。
最佳答案
好的,这可以通过一些数学公式解决。
如果您仔细观察,对于任何给定的节点,它的最高子值为parent_node * (parent_node + 1) / 2 + 1
。
因此,假设您要查找进程9
的父级。
我们将必须求解parent_node * (parent_node + 1) / 2 = 9
的方程。在这里,parent_node
是未知值。
因此,我们可以将方程式重新转换为parent_node2 + parent_node-18 = 0。
现在,我们可以在quadratic formula的帮助下找到根源。
我们发现正根为3.772
,仅取整数值,即3
。
现在,有两种情况:
如果当前节点值(此处为9
)大于parent_node * (parent_node + 1) / 2 + 1
,则答案为公式+ 1的正根,因此为3 + 1 = 4
。
如果当前节点值(此处为9
)不大于parent_node * (parent_node + 1) / 2 + 1
,则答案为正整数根值本身。
关于algorithm - 流程树问题的最佳解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59648618/