BFS,想要找到节点之间最长的路径,花费太长时间

时间:2016-08-20 10:52:38

标签: python breadth-first-search

我知道还有其他相似的线程,我的朋友Wertyle和我正在与这个bfs项目一起寻找两个节点之间最长的路径。我们所拥有的是一个包含3个字母单词的文本文件,只有3个字母单词。我还有一个Word(节点)和队列类。代码当前正在运行,但这是学校的一项任务,运行代码的时间不到1分钟,我们的代码大约需要2-3分钟,所以速度太慢了。

我的代码看起来像这样:

def way2(mangd,start):         
    queue=Queue()
    queue.enqueue(Word(start))
    visited=set()                       
    while not queue.isempty():
        s=queue.get()
        if s.ordet not in visited:
            visited.add(s.ordet)
            barn=findchildren(mangd,s.ordet)
            for elem in barn:
                if elem not in visited:
                    b=Word(elem)
                    b.fldr=s
                    queue.put(b)
    return s

def printpath2(start):
    ordet=way2(setlista(),start)
    path=[]
    p=ordet
    while p is not None:
        path.append(p.ordet)
        p=p.fldr
    path.reverse()
    print(path)
    return len(path)


def ordpar(lista):
    s=lista
    a=[]
    a.append(7)
    for elem in s:
        if a[0]<printpath2(elem):
            a.pop(0)
            a.append(printpath2(elem))
    print(a)

def findchildren(mangd,parent): 
    children=[]
    lparent=list(parent)
    mangd.remove(parent)
    for word in mangd:
        letters=list(word)
        count=0
        i=0
        for a in letters:
            if a==lparent[i]:
                count+=1
                i+=1
            else:
                i+=1
            if count==2:
                if word not in children:
                    children.append(word)
            if i>2:
                break
    return children

way2和printpath2函数运行时间为半秒(它返回给定单词与任意单词之间的最长路径)。由于我的文本文件包含大约700个单词,所以你做了数学运算。我怀疑我的way2方法太慢了,但我不知道如何加快速度。 Findchildren方法是一种为病房创建所有“孩子”的方法,例如,“粉丝”的孩子将是“fin”,“fat”,“fbn”等......

正如我所说,我们确实发布了类似于这个问题的东西,我试图从我们得到的答案中做出一些东西,但不幸的是我认为我们发布的代码太少,因为我怀疑我们的问题是在way2方法中。此时感谢任何帮助,提前谢谢!

0 个答案:

没有答案