다음 제한 조건에 부합하는 음수가 아닌 모든 m- 튜플 (a [1], ..., a [m])을 열거하려면 어떻게합니까? 각각에 함축적 인 내용의 m- 튜플을 열거 함
는
의 {1, ..., m}, 수 인 N I [I]> = 0 예 [I] < = N [즉.{1, ..., m}의 i, j를 갖는 각각의 순서쌍 (i, j)에 대해 번호 c [i] [j], d [i] [j] [i]> c [i] [j] 인 경우
인 경우 [a] [j] < = d [i] [j] 일 수 있습니다.
c [i] [j] = c [j] [i].
지금까지 다음 해결책을 제시했습니다. 이 작업을 수행하는보다 효율적인 방법이 있습니까? 나는 C 또는 C++로 프로그래밍하고있다.
for a[1]=0,...,n[1] do
{
for j=2,...,m do
{
if a[1] > c[1][j] then n[j]:=min{n[j],d[1][j]}
else n[j]:=n[j]
}
for a[2]=0,...,n[2] do
{
for j=3,...,m do
{
if a[2] > c[2][j] then n[j]:=min{n[j],d[2][j]}
else n[j]:=n[j]
}
for a[3]=0,...,n[3] do
{
.
.
.
for a[m]=0,...,n[m] do
{
print (a[1],...,a[m])
}
}...}}
이 알고리즘에서 하나의 큰 비효율을 보았습니다. 그것을보기 위해 m = 2를 취한다. 모든 i, j에 대해 n [1] = n [2] = 2이고 c [i] [j] = d [i] [j] = 0이라고합시다. 이제 알고리즘을 살펴 보겠습니다.
[1] = 0 : n [2]는 [1] < = 0이므로 변경되지 않습니다. (0,0), (0,1), (0,2)를 출력합니다.
다음은 a [1]> c [1] [2], n [2]가 루프에서 min {n [2], d [1] [j ]} = 0. 우리는 (1,0)을 인쇄합니다. [1] = c [1] [2], n [2]가 루프에서 min {n [2], d [1] [j]로 변경되기 때문에, } = 0. (우리는 이전과 똑같은 일을했습니다. 비효율적입니다.) 인쇄합니다 (2,0).
참고 : 내 응용 프로그램의 경우 c [i] [j] = d [i] [j]로 가정 할 수 있습니다.
달성하려는 목표는 무엇입니까? 숙제? –
a [i]는 알 수없는 이상의 가능한 주요 요인의 지수입니다. 이상적인 것을 결정하기 위해 각각의 튜플은 하나의 사례로 취급되며 각각의 경우마다 더 많은 계산이 수행됩니다. 숙제가 아닙니다. – HDK
이 작업의 목적에 대해 좀 더 자세히 설명하는 것이 도움이 될 것이라고 생각합니다. 동기 부여 고려 사항이 없을 경우 유용한 구현 전략을 제안하는 것은 어렵습니다. – Gian