【问题标题】:Need help to quicken this code in Python 2需要帮助以加快 Python 2 中的代码速度
【发布时间】:2014-10-03 22:45:42
【问题描述】:

我正在hackerrank 中解决这个问题。

我的代码用 1000 长度的输入解决了 0.07 秒,但对于长度为 100,000 的输入,此代码无法在 10 秒内解决它。我想知道我的代码的哪些步骤可以修改以加快 执行。

我的代码是:

# Read input from STDIN. Print output to STDOUT
def find_payoff(t,m): 
    if m<=3:
        return sum(t)                
    else:
        t1=[sum(t[i:]) for i in range(m)]
        opt_pay=[0]*m
        opt_pay[m-3:m]=[sum(t[m-i:m]) for i in range(3,0,-1)]
        for i in range(m-4,-1,-1):
            opt_pay[i]=max([sum(t[i:i+j+1])+t1[i+j+1]-opt_pay[i+j+1] for j in range(3)])
    return opt_pay[0]


n=input()

for i in range(n):
    m=input()   
    t=map(int, raw_input().split())
    print find_payoff(t,m)

【问题讨论】:

  • 您可能需要仔细检查该链接,它似乎不会导致任何在您的问题上下文中有意义的内容。
  • @TML,如果你去链接,点击标题中的Problem
  • 100,000 你的代码用了多长时间?听起来您正在寻找不是线性缩放或更好的算法的一部分。这很可能在您的循环中 - 我会专注于它在那里所做的事情。
  • 你确定这段代码能正确解决问题吗?看起来不是最优的。
  • 我确信这段代码正确地解决了这个问题,因为它的变量长度少于 1000 个。我相信它也是最优的,因为它与我被教导为程序员的圣杯的数据大小成线性关系。我只是在网站上运行代码,它说它无法在 10 秒内解决它。一旦我将在我的机器上运行代码,我将提供更多更新。

标签: python optimization dynamic-programming


【解决方案1】:

我终于能够解决这个问题了。我为变量t1opt_pay 使用了太多空间。使用我的新代码,我将这些变量的长度减少到 3,并将执行时间减少到 1 秒。如果您有兴趣,最终代码在这里。

# Enter your code here. Read input from STDIN. Print output to STDOUT
def find_payoff(t,m): 
    if m<=3:
        return sum(t)                
    else:
        t1=[sum(t[m-i:]) for i in range(3,0,-1)]
        opt_pay=t1[:]        
        for i in range(m-4,-1,-1):
            tmp=max([sum(t[i:i+j+1])+t1[j]-opt_pay[j] for j in range(3)])
            opt_pay[0],opt_pay[1:]=tmp,opt_pay[0:2]
            t1[0],t1[1:]=t1[0]+t[i],t1[0:2]          
    return opt_pay[0]


n=input()

for i in range(n):
    m=input()   
    t=map(int, raw_input().split())
    print find_payoff(t,m)

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2020-06-20
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多