2016-07-06 5 views
2

Turn while loop into math equation?과 유사하게, 코드처럼 보이지 않는 형식으로이 코드를 작성해야하므로 수학 공식으로 변환하려고하는 다음 중첩 루프가 있습니다. 저는 어떤 유형의 합계 방정식이 필요하다고 생각합니다. 나는 합산이 하한에서 시작하여 높은 바운드를 계속 알고인덱싱을 감소시키는 방정식을 합계를 사용하여 수학 방정식으로 변환하는 방법은 무엇입니까?

int num = 0; 
for (int i = nr - 1; i >= 0; i--) { 
    for (int j = nc - 1; j >= 0; j--) { 
     ela[i][j] = num; 
     eha[i][j] = num + ea[i][j] - 1; 
     num += ea[i][j];      
    } 
} 

, 그래서 나는에서 시작하기 때문에 여기에 요약을 적용하는 방법을 아주 확실하지 않다 : 여기

코드입니다 높은 지수를 유지하고 더 낮은 지수로 계속합니다.

내가 왜 downvoted을 얻었는지 모르겠다. 내가 언급 한 질문이 내 것과 매우 유사하고, 동일한 태그를 가지고 있으며 14 번 upvoted이다. 제 질문을 어떻게 든 개선 할 수 있다면 아래에 의견을 남기십시오.

업데이트 :

다음과 같이 I 수식을 업데이트 할 수 있었다 : 문제는 당신이 다른 방향으로 반복하고 합을 표현하는 방법을 함께

nr = 50; 
nc = 10; 

num = sum[ea[i,j],i=0,nr-1,j=0,nc-1]; // correct based upon nr, nc and ea 
for (int i = 0; i < nr; i) { 
    for (int j = 0; j < nc; j++) { 
     num = num - ea[i,j]; 
     ela[i][j] = num; 
     eha[i][j] = num + ea[i,j] - 1;        
    } 
} 
+0

여기에 'ELA'와'EHA'가 중요한 이유는 무엇입니까? 'ea '란 무엇입니까? – LogicStuff

+1

@LogicStuff 나는 이것이 그가 기능으로 표현하고자하는 것이라고 생각합니다. – SirGuy

+0

@LogicStuff, ela 및 eha는이 루프에 의해 설정된 변수입니다. – Veridian

답변

1

, 당신은 당신이 모든 요소의 합에 대한 매트릭스 ea2D 접미사 합 (인 매트릭스 ela로 이것을 설명 할 수

enter image description here

같은 효과를 쓰다 수 있습니다 lexicographical ordering에 따르는 요소)이고, eha은 행렬 elaea을 제외한 모든 행의 합입니다.

1

경우, 나는 당신이 당신의 코드를 변경해야 말하고 있지 않다, 그러나 여기에서 얼마나 더 분명해야

int num = 0; 
for (int i = 0; i < nr; i++) { 
    for (int j = 0; j < nc; j++) { 
     ela[nr - i][nc - j] = num; 
     eha[nr - i][nc - i] = num + ea[nr - i][nc - j] - 1; 
     num += ea[nr - i][nc - j];      
    } 
} 

: 당신의 코드를 변경할 수 있습니다 이를 합계 표기법을 사용하도록 변경하십시오.

-1

컨텍스트 없이는 알기가 어렵지만, 배열을 역순으로 행 메이저로 요소를 열거하는 벡터로 생각하면 문제의 코드는 더욱 명확 해집니다. 아래의 코드는 게시 된 원래 기능과 기능적으로 동일하지만 틀림없이 쉽게 따라 할 수 있습니다. 일반 영어

// n.b. ela[nr - 1 - i][nc - 1 - j] == rela(nc * i + j); 
int &rela(int k) { return ela[nr - 1 - k/nc][nc - 1 - k % nc]; } 
int &reha(int k) { return elh[nr - 1 - k/nc][nc - 1 - k % nc]; } 
int &rea(int k) { return ea[nr - 1 - k/nc][nc - 1 - k % nc]; } 

for (int k = 0, sum = 0; k < nr * nc - 1; k++) { 
    rela(k) = sum; 
    sum += rea(k); 
    reha(k) = sum - 1; 
} 

rela(k)rea 요소의 부분 합 및 0 ... k-1reha(k) (또한, k > 0위한 rela(k) == reha(k - 1) + 1) rea0 ... k 요소의 부분 합보다 하나 적다.

기술적으로이 설명은 2 차원 어레이의 측면에서 다시 번역 될 수 있지만 다소 지저분 해집니다. 내가 맞다 경우