동일한 길이의 두 목록, ls1
및 ls2
이 있다고 가정 해보십시오. 예를 들어, 우리는두 목록에있는 요소들 사이의 가장 작은 차이 합
ls1 = [4, 6]
ls2 = [3, 5]
있고 ls1
의 각 요소에 대해, 우리는 방식으로, ls2
한 요소와 하나 개의 원소와 페어링 갖도록 전체 요소 사이에서 (절대) 차이 ls1
에 있고 요소는 ls2
입니다. 한 요소는 한 번만 일치 할 수 있습니다. 위의 예에서, 최적의 방법은 4
이 최소 총 반환 ls2
에 3
와 ls1
및 I 프로그램을 필요
(4 - 3) + (6 - 5) = 2
총 차이를 산출 ls2
에 6
와 ls1
에 5
이고 일치하는 이 두 목록에있는 요소 간의 차이. 목록의 길이는 임의적이며 목록의 요소 값도 마찬가지입니다 (그러나 모두 양의 정수입니다).
나는 현재 솔루션에 대한 순열을 사용하는 것이 해결책이라는 것을 알고 있지만, 최적의 시간과 공간의 복잡성을 가진 코드가 필요하다. 동적 프로그래밍의 개념에 대해 들어 봤지만, 제 경우에는 그것을 구현하는 방법을 모릅니다. 회신에 미리 감사드립니다.
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'색인 간의 최소 차이 또는 전체 목록의 최소 차이, 즉 두 목록의 요소 사이의 최소 차이를 원하십니까? –
정말로 피연산자를 공유하지 않는 두 개의 가장 작은 절대 차이를 찾고 있습니다. –