我正在学习时间复杂性,理论上我已经读过,要检查Anagram中两个相同长度的字符串,可以有两个版本:
但是我想继续使用代码来体验同样的情况。
因此,我已经编写了两个版本的代码,并使用python timeit模块检查了时间,但结果却有所不同。
import timeit
def method_one(input1, input2):
"""
Check if two string are anagram
"""
if len(input1) == len(input2):
if sorted(input1) == sorted(input2):
return True
return False
def method_two(input1, input2):
"""
Check if two string are anagram using count the character method
"""
count_char = [0] * 26
if len(input1) == len(input2):
for i in range(0, len(input1)):
count_char[ord(input1[i])-ord("a")] += 1
count_char[ord(input2[i])-ord("a")] -= 1
for i in count_char:
if(bool(i)):
return False
return True
return False
timer1 = timeit.Timer("method_one('apple','pleap')", "from __main__ import method_one")
timer2 = timeit.Timer("method_two('apple','pleap')", "from __main__ import method_two")
print(timer1.timeit(number=10000))
print(timer2.timeit(number=10000))
method_one: 0.0203204
method_two: 0.1090699
理想情况下,应该计算字符数,但结果却与我的预期相反。
答案 0 :(得分:0)
时间复杂度告诉您的是,随着输入大小接近无穷大,最有效的算法将运行得更快。