假设的过程链的过程树以树结构表示。每个进程产生的进程数与其进程号相同,即进程号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/

10-12 19:47