【问题标题】:Why does passing a dictionary as a parameter take more time?为什么将字典作为参数传递需要更多时间?
【发布时间】:2017-07-04 06:11:17
【问题描述】:

我尝试了一个 leetcode 问题。我发现以下代码之一引发了超出时间限制的错误。我创建了以下测试代码。我发现第一个传递字典作为参数需要更多时间另一个。 0.94 秒对 0.84 秒。 谁能解释一下?

class Solution(object):
    def longestPalindromeSubseq(self, x):
        """
        :type s: str
        :rtype: int
        """

        #dic = {}

        def helper(s, dic):
            if len(s) == 0:
                return 0
            if len(s) == 1:
                return 1

            if s in dic:
                return dic[s]

            if s[0] == s[-1]:
                res = helper(s[1:-1], dic)+2
            else:
                l1 = helper(s[:-1], dic)
                l2 = helper(s[1:], dic)
                res = max(l1,l2)
            dic[s] = res
            #print (id(dic), dic)  
            return res
        d = {}
        ans = helper(x, d)
        #print (id(d), d)
        return ans

class Solution1(object):
    def longestPalindromeSubseq(self, x):
        """
        :type s: str
        :rtype: int
        """

        dic = {}

        def helper(s):
            if len(s) == 0:
                return 0
            if len(s) == 1:
                return 1

            if s in dic:
                return dic[s]

            if s[0] == s[-1]:
                res = helper(s[1:-1])+2
            else:
                l1 = helper(s[:-1])
                l2 = helper(s[1:])
                res = max(l1,l2)
            dic[s] = res
            #print (id(dic), dic)
            return res
        ans = helper(x)
        #print (id(dic), dic)
        return ans

import time
if __name__ == "__main__":
    x = "gphyvqruxjmwhonjjrgumxjhfyupajxbjgthzdvrdqmdouuukeaxhjumkmmhdglqrrohydrmbvtuwstgkobyzjjtdtjroqpyusfsbjlusekghtfbdctvgmqzeybnwzlhdnhwzptgkzmujfldoiejmvxnorvbiubfflygrkedyirienybosqzrkbpcfidvkkafftgzwrcitqizelhfsruwmtrgaocjcyxdkovtdennrkmxwpdsxpxuarhgusizmwakrmhdwcgvfljhzcskclgrvvbrkesojyhofwqiwhiupujmkcvlywjtmbncurxxmpdskupyvvweuhbsnanzfioirecfxvmgcpwrpmbhmkdtckhvbxnsbcifhqwjjczfokovpqyjmbywtpaqcfjowxnmtirdsfeujyogbzjnjcmqyzciwjqxxgrxblvqbutqittroqadqlsdzihngpfpjovbkpeveidjpfjktavvwurqrgqdomiibfgqxwybcyovysydxyyymmiuwovnevzsjisdwgkcbsookbarezbhnwyqthcvzyodbcwjptvigcphawzxouixhbpezzirbhvomqhxkfdbokblqmrhhioyqubpyqhjrnwhjxsrodtblqxkhezubprqftrqcyrzwywqrgockioqdmzuqjkpmsyohtlcnesbgzqhkalwixfcgyeqdzhnnlzawrdgskurcxfbekbspupbduxqxjeczpmdvssikbivjhinaopbabrmvscthvoqqbkgekcgyrelxkwoawpbrcbszelnxlyikbulgmlwyffurimlfxurjsbzgddxbgqpcdsuutfiivjbyqzhprdqhahpgenjkbiukurvdwapuewrbehczrtswubthodv"
    print (x)
    t0 = time.time()
    sol = Solution()
    print (sol.longestPalindromeSubseq(x))
    t1 = time.time()
    print(t1- t0)

    sol1 = Solution1()
    print (sol1.longestPalindromeSubseq(x))
    t2 = time.time()
    print(t2-t1)

【问题讨论】:

  • 传递参数比不传递参数需要更多的时间。它是什么类型并不重要。而且由于您在所有递归调用中都传递了参数,因此它会成倍增加。

标签: python dictionary


【解决方案1】:

Python 使用了一种叫做共享调用的东西。该函数仅获取参数的别名。考虑到这一点,传递给函数的内容并不重要。

但是脚本可能需要不同的时间来执行。它不是一成不变的。使用递归使预测变得更加困难

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2021-09-27
    • 2018-01-08
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多