"순열 (permutation)"이 정확히 맞는 단어인지는 모르겠지만 시나리오는 제가 List
~ 40 Objects
입니다. 각각 다른 Object
은 value
과 cost
이 다릅니다.개체의 순열에 대한 최저 비용 찾기; 메모리 문제를 극복하는 방법?
내 개체에 1과 5 사이의 value
이 포함되어 있다고 가정 해보십시오. 일부 targetValue
을 초과하는 개체 목록을 결합하려고 시도하고 가장 낮은 합계 인 cost
의 조합을 찾아 반환합니다. 이 조합에는 잠재적으로 List
에있는 개체 중 하나의 복제본이 많이 포함될 수 있습니다.
예를 들어, 내 개체 목록이 {a, b, c, d} 인 경우; 은이 {a, a, a, a, a, a, a, a}가 될 수 있습니다. 그러나 주문도과 관련이 있습니다. {a, a, b}는 (a, b, a)와 다른 합계를 가질 수 있습니다.
현재 솔루션을 무력화하려고했습니다. 그러나, 40! 조합, 나는 모든 다른 "순열"을 추적하면서 기억이 부족합니다.
정확도를 위해 모든 조합을 실행하는 것이 더 좋지만 계산을 수행하는 데 시간이 많이 걸리지는 않지만 이전에 말씀 드린 것처럼 가장 큰 문제는 메모리입니다.
현재 코드 : (incompleteList가 처음으로 시작 이 개체)
while (incompleteList.size() > 0)
{
Container container = incompleteList.get(0);
for (myObject o : objectList)
{
Container newAdditionContainer = new Container(container);//copies the list of objects into a new container
newAdditionContainer.addMyObject(o);
if (newAdditionContainer.getTotalValue()) < targetValue)
{
incompleteList.add(newAdditionContainer);
} else {
completeList.add(newAdditionContainer);
}
}
incompleteList.remove(container);
} //code then loops through completeList and grabs the container with the cheapest cost,
//but in actuality that code hasn't been able to run yet.
나는 확신 위 일할 수있는, 그것은 완료 할 수 있다면 (하지만 캔트 때문에 메모리); 알고리즘을 변경하여 최저 비용을 얻고 메모리 한도를 유지하려면 어떻게해야합니까?
성숙 제출에 대한 사과; 나는 downvote가 무엇을 위해 thats라고 생각한다? – DoubleDouble
나는 그 일이 아주 분명하지 않다고 생각한다.주문이 중요 할 때 총 '비용'과 '가치'는 어떻게 계산됩니까? 각각의 객체가 'cost'와 'value'를 갖도록 지정하면'List'는'List
사과를합니다. 계산에 포함되는 방정식이 문제의 범위를 벗어나서 문제를 복잡하게 만든다고 생각합니다. 'Container' 클래스는 포함 된 Object의 값을 계산할 수 있으며'cost'는 모든 객체간에 간단히 추가되지만 런타임까지 알 수 없습니다. – DoubleDouble