python中的Mime类型优化
我想解决编码games.com中的mime挑战。我的代码可以通过所有测试,但不能通过优化测试 我试图删除所有无用的函数,比如解析为字符串,但问题正在我考虑的过程中 导入系统 输入数学 #下面自动生成的代码旨在帮助您解析 #根据问题陈述的标准输入。 n=int(input())#组成关联表的元素数。 q=int(输入()) #要分析的文件名的数量Q。 dico={} #我的职能 def检查(word): 对于dico中的项目: 如果(单词[-len(item)-1:][.upper()=“+”item.upper()): 退货(dico[项目]) 返回(“未知”) 对于范围(n)中的i: #扩展名:文件扩展名 #mt:MIME类型。 ext,mt=input().split() dico[ext]=mt 对于范围(q)内的i: fname=input() fname=fname 打印(支票(fname)) #使用print编写操作 #调试:打印(“调试消息…”,file=sys.stderr) #打印(“调试消息…”,文件=sys.stderr) 失败python中的Mime类型优化,python,python-3.x,dictionary,optimization,Python,Python 3.x,Dictionary,Optimization,我想解决编码games.com中的mime挑战。我的代码可以通过所有测试,但不能通过优化测试 我试图删除所有无用的函数,比如解析为字符串,但问题正在我考虑的过程中 导入系统 输入数学 #下面自动生成的代码旨在帮助您解析 #根据问题陈述的标准输入。 n=int(input())#组成关联表的元素数。 q=int(输入()) #要分析的文件名的数量Q。 dico={} #我的职能 def检查(word): 对于dico中的项目: 如果(单词[-len(item)-1:][.upper()=“+”it
进程已超时。这可能意味着您的解决方案没有优化到足以处理某些情况。这是正确的想法,但一个细节似乎破坏了性能。问题在于dico:中item的
行,它不必要地循环了该行中的每个条目。这是一个线性搜索O(n),逐项检查目标项。但这在很大程度上违背了字典数据结构的目的,即提供恒定时间的O(1)查找。“恒定时间”意味着无论字典有多大,查找条目所需的时间总是一样的(多亏了)
打个比方,想象你正在厨房里找一把勺子。如果你提前知道所有的餐具、用具和炊具都在哪里,你就不需要在每个抽屉里寻找餐具。取而代之的是,你只需直接走到盛着你想要的勺子的餐具抽屉,这是一次性的
另一方面,如果你在别人的厨房,很难找到勺子。你必须从橱柜的一端开始,检查每个抽屉,直到找到餐具为止。在最坏的情况下,你可能会运气不好,在找到餐具抽屉之前,你必须检查每个抽屉
回到代码,上面的代码片段使用的是后一种方法,但我们正在尝试在10k个不熟悉的厨房中找到一些东西,每个厨房都有10k个抽屉。相当慢,对吧
如果您可以调整解决方案以在固定时间内检查字典,而无需循环,那么您就可以处理n=10000
和q=10000
,而无需进行q*n
迭代(您可以在q
迭代中执行,速度更快!) 谢谢你的帮助,
我想出了解决办法
n = int(input()) # Number of elements which make up the association table.
q = int(input()) # Number Q of file names to be analyzed.
dico = {}
# My function
def check(word):
if("." in word):
n = len(word)-(word.rfind(".")+1)
extension = word[-n:].lower()
if(extension in dico):
return(dico[extension])
return("UNKNOWN")
for i in range(n):
# ext: file extension
# mt: MIME type.
ext, mt = input().split()
dico[ext.lower()] = mt
for i in range(q):
fname = input()
print(check(fname))
你的解释很清楚:D
多谢各位