python - 无休止的程序执行
问题描述
任务:需要输出一个单词链,使下一个单词从前一个单词的最后一个字母开始。
输入示例:"aac", "cas", "baa", "eeb"
示例输出:"eeb", "baa", "aac", "cas"
当使用大量单词(~ 980)时,程序进入无限循环。我认为问题就在这里,但我无法解决:
for j in range(0,N-U):
if (s[j][0] == words[i][-1]):
searchNextWord(s,j,U)
代码:
def searchNextWord(words,i,U):
global Result
s = [None]*N
if (Result==True):
return
res[U] = words[i]
U += 1
if (U == N):
Result = res[U - 1] == words[i]
if (Result==True):
return
for j in range(0,N-U):
if (j<i):
s[j]=words[j]
else:
s[j]=words[j+1]
for j in range(0,N-U):
if (s[j][0] == words[i][-1]):
searchNextWord(s,j,U)
words=[]
N=int(input())
if (N<1 or N>1000):
exit()
for i in range(N):
new_element = str(input())
words.append(new_element)
res = [None]*N
for i in words:
if (len(i)>10):
exit()
Result = False
for i in range(0,N):
if (Result==False):
searchNextWord(words, i, 0)
if (Result==True):
for i in range(0,N):
print(res[i])
else:
print("NO")
解决方案
太多的 for 循环,你的程序不会无休止,但执行起来需要大量的时间!
使用链表来做到这一点。每个单词会占用更多内存,但它会使搜索更容易。由于您正在重新排序输入,因此您需要考虑实现一个浏览器类,将这些对缓存到二叉树的变体中(其中每个节点都包含所包含元素的开始和结束。这将减少您需要执行的传递搜索。
推荐阅读
- ios - 在 SwiftUI 中使用 Kotlin 多平台类
- javascript - 如果逗号是对象中的最后一项,则删除它
- uvm - x.stop_sequences() 导致这个 UVM FATAL Item_done() 在没有未完成请求的情况下被调用
- elasticsearch - ElasticSearch - 完全匹配等于操作的单词
- postgresql - 教师 SQL 的课数
- javascript - 吊装说明
- python - Python - 在数据框中查找值并返回随机对应值
- java - 提醒通知未在 android O 及更高版本中显示
- javascript - 将 ImageData 转换为 JS 中的 blob?
- emacs - Emacs - 如何让弹丸在当前窗口中打开文件?