2015-01-06 3 views
0

다음과 같은 결정 스타일을위한 표준 알고리즘 또는 패턴이 있습니까? n 개의 리소스가 있습니다 (현재 2 개는 리소스 1과 리소스 2). 의사 코드를 고려해보십시오."매트릭스 스타일"비교를위한 패턴이 있습니까?

Request for X units, requiring resources 1 and 2 { 
If (enough of resource 1) 
    if (enough of resource 2) 
     fulfill request for X units. 
    else (not enough of resource 2) 
     partially fulfill, to max of resource 2 
else (not enough of resource 1) 
    if (there is enough of resource 2) 
     partially fulfill, to max of resource 1. 
    else (not enough of resource 2) 
     partially fulfill, to max of resource 2 
} 

n> 2 인 경우 매우 빠르게 빠져 나와 많은 중복 코드가 있습니다. 이 알고리즘을 구현하는보다 효율적인 방법이 있습니까?

문제가있는 경우이 문제에 대해 자바 스크립트로 프로그래밍하고 있습니다.

+0

는 간단한 루프가 트릭을 할해야을, 그것은 안 ? –

+0

지금 당장 (if if 문 레이아웃으로) 그 일을하고 있지만, 큰 n을 사용하면 교차 수의 수위가 떨어집니다. – Dirk

+1

예를 들어, 하나의 리소스가 다른 리소스보다 우선 순위가 높은 것 같습니다. 두 가지 리소스가 충분하지 않지만 두 번째 리소스가 허용하는 것보다 먼저 수행 할 수있는 리소스가 충분하지 않은 경우 어떻게해야합니까? – didierc

답변

1

글쎄, 다음은 원하는 수의 리소스를 설정하고 키와 연결하고 원하는 단위 수와 각 리소스의 비용을 설정하는 예제입니다.

function Request(qty){ 
    this.quantity = qty; // quantity of units to make 
    this.required = {}; // required resources 
    var request = this; 

    this.checkAvailability = function(resources){ 
     var available = request.quantity; 
     var spent = {}; 
     var left = {}; 
     for(var key in request.required){ // for each required resource 
      var max = Math.min(request.quantity, Math.floor(resources[key].quantity/request.required[key])) // set max as wanted quantity or available quantity if it is less than wanted 
      available = Math.min(max, available) // update max of units you can make 
     } 
     return available 
    } 

    this.spendResources = function(resources, qty){ // spend required resources 
     for(var key in request.required){ 
      resources[key].quantity -= request.required[key]*qty; 
     } 
    } 

} 

function Resource(qty){ 
    this.quantity = qty; 
} 

var available = { 
    1: new Resource(200), 
    2: new Resource(140) 
} 

var request = new Request(7) 
request.required = {1: 40, 2: 30} 
var availableQty = request.checkAvailability(available) 
request.spendResources(available, availableQty) 
console.log(availableQty, available) 

작업 Jsfiddle : 2 개 기능, 당신이 가지고있는 자원으로 가능한 최대 단위를 얻는다 하나, 그 자원을 소비하는 일이있다 http://jsfiddle.net/fk6coz8a/

1

각 리소스를 반복하고, 다른 모든 리소스를 충분한 양으로 사용할 수 있다고 가정 할 때마다 얼마만큼의 제품을 만들지 예측하고 가장 낮은 예상 금액으로 생산을 제한합니다. 기본적으로 배의이며 이는 reducemethod으로 지원됩니다.

+0

고마워요. 좋은 생각입니다. 나는 당신이 필요로하는 것을 계산하고, 그것을 소비하는 것으로 물건을 나누는 것을 좋아한다. – Dirk

관련 문제