我知道还有其他相似的线程,我的朋友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方法中。此时感谢任何帮助,提前谢谢!