• 當前位置:首頁 > IT技術 > 編程語言 > 正文

    動態規劃問題之貪婪算法實現硬幣最優解
    2022-04-29 14:09:07


    動態規劃問題之貪婪算法實現硬幣最優解動態規劃問題之貪婪算法實現硬幣最優解_算法

    貪婪問題實現最少的硬幣找零問題:

    start_time = time.time()

    end_time = time.time()

    print(‘Took %f second’ % (end_time - start_time))

    是我們加入用來計算運算時間的

    首先定義一個函數:rec(coinValueList,change) 其中coinValueList是我們的硬幣的面值,change是我們的需要找零的金額

    [c for c in coinValueList if c<=change]:這里創建一個列表用來存儲這次找零可以用到的面值金額,然后進行循環調用和遞歸運算。

    import time
    start_time = time.time()

    def rec(coinValueList,change):
    minCoins=change
    if change in coinValueList:
    return 1
    else:
    for i in [c for c in coinValueList if c<=change]:
    numCoins=1+rec(coinValueList,change-i)
    if numCoins<minCoins:
    minCoins=numCoins
    return minCoins
    print(rec([1,5,10,25],63))
    end_time = time.time()
    print('Took %f second' % (end_time - start_time))

    動態規劃問題之貪婪算法實現硬幣最優解_貪婪算法_02

    我們可以看出這種算法耗時非常多,需要進行優化:

    加入一個可查詢的列表,就不用重復計算已經算過的此面值最優的找零方法,可以節約非常巨大的一部分時間。

    import time
    start_time = time.time()

    def rec(coinValueList,change,list):
    minCoins=change
    if change in coinValueList:
    list[change]=1
    return 1
    elif list[change]>0:
    return list[change]
    else:
    for i in [c for c in coinValueList if c<=change]:
    numCoins=1+rec(coinValueList,change-i,list)
    if numCoins<minCoins:
    minCoins=numCoins
    list[change]=minCoins
    return minCoins
    print(rec([1,5,10,25],63,[0]*64))
    end_time = time.time()
    print('Took %f second' % (end_time - start_time))

    動態規劃問題之貪婪算法實現硬幣最優解_python_03



    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码