假設我們有兩個相同長度的列表ls1
和ls2
。例如,我們有兩個列表中元素之間的最小差異總和
ls1 = [4, 6]
ls2 = [3, 5]
以及用於ls1
每個元素,我們有一個元件帶有一個元件配對它在ls2
,以這樣的方式,使得總的元件之間(絕對)差在ls1
和ls2
中的元素是最小的。一個元素只能匹配一次。在上面的例子中,最佳的方式是,以匹配4
是ls1
在ls2
3
,和在ls1
5
與6
在ls2
,其產生的
(4 - 3) + (6 - 5) = 2
我需要的程序的總差,返回這個最小總這兩個列表中的元素之間的差異。列表的長度是任意的,列表中元素的值也是任意的(但它們都是正整數)。
我目前知道,使用排列來強制解決方案是一個選項,但我需要的是具有最佳時間和空間複雜性的代碼。我聽說過動態編程的概念,但我不知道如何在我的情況下實現它。預先感謝回覆。
Ps。這是我目前使用蠻力代碼排列,這是不是在運行時或內存使用效率:
from itertools import permutations
def minimum_total_difference(ls1, ls2):
length = len(ls1)
possibilities = list(permuations(ls1, length))
out = 10**10
for possibility in possibilities:
out_ = 0
for _ in range(length):
diff = abs(possibility[_] - ls2[_])
out += diff
if out_ < out:
out = out_
return out
這看起來像功課,你可以告訴你已經嘗試過什麼,如果是家庭作業,請注意,你的問題? – TemporalWolf
另外,您想要每個列表的'n'索引或整個最小差異(即兩個列表中的任何元素)之間的最小差異? –
真的你只是找不共享操作數 –