1

我有一个节点树,其中每个节点都有一个 id(节点号)、一个子节点列表和一个债务指标。然后给我一个节点列表,我要找到它的债务。为此,我使用递归函数。

这一切都很好,但我想加快这个过程。我一直在研究多处理,但是每次尝试时,与根本不使用其他进程相比,计算时间都会增加(进程数越高,运行时间越长)。

由于试图理解许多不同的示例,我的代码看起来像是垃圾,所以我发布了这个伪代码。

class Node:
    id = int
    children = int[]
    debth = int

function makeNodeTree() ...

function find(x, node):
    for c in node.children:
        if c.id == x: return c
        else:
            if find(x, c) != None: return result
    return None

function main():
    search = [nodeid, nodeid, nodeid...]

    timerstart
    for x in search: find(x, rootNode)
    timerstop

    timerstart
    <split list over number of processes>
    <do some multiprocess magic>
    <get results>
    timerstop

    compare the two

我已经尝试了各种不同的树大小,看看是否有任何收益,但我还没有找到这样的案例,这让我觉得我做错了什么。我想我要的是使用多处理来进行这种遍历并提高性能的示例/方式。

我知道有很多方法可以组织节点以使这项任务变得容易,但我想检查可能的(?)性能提升,如果有可能的话。

4

1 回答 1

0

多处理有开销,因为每次添加进程都需要时间来设置它。此外,如果您使用标准 Python 线程,则不太可能获得任何加速,因为所有线程仍将在一个处理器上运行。所以三个想法(1)你真的那么大,你需要加快速度吗?(2) 生成子进程 (3) 不要在每个节点上使用并行性,只在顶部几个级别使用以最小化开销。

于 2012-09-05T17:34:20.953 回答