字谜排序版本与计数字符版本

时间:2019-07-03 06:43:32

标签: python time-complexity anagram timeit

我正在学习时间复杂性,理论上我已经读过,要检查Anagram中两个相同长度的字符串,可以有两个版本:

  1. 排序字符串并比较O(nlogn)
  2. 计算字符O(n)

但是我想继续使用代码来体验同样的情况。

因此,我已经编写了两个版本的代码,并使用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

理想情况下,应该计算字符数,但结果却与我的预期相反。

1 个答案:

答案 0 :(得分:0)

时间复杂度描述了当所述算法的输入增加时算法的执行时间如何缩放。由于它会忽略常量,因此该算法具有更高的时间复杂度,因此不能保证比其他具有较高边界的算法运行得更快。

时间复杂度告诉您的是,随着输入大小接近无穷大,最有效的算法将运行得更快。