2009-12-02 3 views
4

좋아요, 제목이 그렇게 효과적인지 모르겠지만 최선을 다해 생각할 수는 없습니다.PHP 균형 배열 계산

기본적으로 여기에 시나리오가 있습니다.

나는 11 개의 범주가 있습니다. 각 카테고리에는 항목이 있지만 한 카테고리에는 1 개의 항목이 있고 1 개의 항목에는 20이 있습니다.

이제 11 개의 카테고리를 5 개의 스택 또는 열로 구분하고 싶습니다.

각 스택에 동일한 양 또는 거의 같은 양의 항목을 포함하고 카테고리 항목이 스택 오버플로를 생성하지 못하게하고 싶습니다.

그래서 다음 데이터를 주어진 :

Category | Items 
------------------------- 
Cat 1 | 10 
Cat 2 | 3 
Cat 3 | 7 
Cat 4 | 11 
Cat 5 | 5 
Cat 6 | 13 
Cat 7 | 19 
Cat 8 | 5 
Cat 9 | 3 
Cat 10 | 9 
Cat 10 | 15 

Total = 100 Items 

그래서 내가 항목이 스택 사이에 균일하게 확산되고 싶어요.

동일한 5 개의 스택이 있으므로 스택 당 20 개의 항목이 있어야합니다. 하지만 거기에 문제가 1 스택에서 항목을 오버플로 할 수 없습니다. 그래서 내가 어떻게이 같은 출력 뭔가에 데이터를 계산할 수 있습니다

Stack 1|Stack 2|Stack 3|Stack 4|Stack 5 
-------|-------|-------|-------|------- 
Cat 10 |Cat 1 |Cat 11 |Cat 6 |Cat 7 
Cat 4 |Cat 3 |Cat 8 |Cat 9 | 
     |Cat 2 |  |Cat 5 | 

20  20  20  21  19 

그것은 중요하지 않습니다 어떤 카테고리 것이있는 한 항목이 스택 중에서 가장 균일하게 분산되어 같은 스택입니다.

이제는 매우 자주 계산할 필요가 없으므로이 스택 계산의 결과가 캐시 될 것입니다. 따라서 솔루션의 CPU가 너무 무거울 경우 여전히 게시하십시오.

감사 :

답변

1

이것은 배낭 문제입니다. http://en.wikipedia.org/wiki/Knapsack_problem 많은 리소스가 Google 배낭 문제입니까

간단한 방법 중 하나는 모든 가능한 조합을 시도하는 것입니다. 계산 한 각 조합은 표준 편차를 계산합니다. 최상의 피팅 조합을 저장하려면 표준 편차를 사용하십시오.

+0

내가 무슨 뜻인지는 알지만 어떻게해야합니까? 위키 페이지의 포럼은 저를 넘어서는 길입니다. 내 수학 이해 수준은 기본 대수학입니다. S – Ozzy