2017-12-20 6 views
0

이 코드를 이해하려고하는데 다음과 같이 할 수 없습니다. nx n 행렬이 열에 저장됩니다. 풀 (F), 위 (U) 및 하위 (L) 매트릭스를 구별합니다. , n은 내가 특히이 라인을 이해 해달라고행렬을 C++로 열 단위로 저장

int sum(int k){ 
int s = 0; 
for (int i = 1; i<=k; i++) 
    s += i; 
return s;} 


double getentry(int j, int k){ 
    j--;k--; 

    assert(typ == 'F' || typ == 'U' || typ == 'L'); 
    assert(k<n && j<n); 

    if(typ == 'F') return mat[k*n+j]; 
    if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]); 
    if(typ == 'U') return (j>k)?(0.0):(mat[k*n+j-sum(n-1)+sum(n-(k+1))]); 
} 

행렬의 차원이다 :

if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]); 
    if(typ == 'U') return (j>k)?(0.0):(mat[k*n+j-sum(n-1)+sum(n-(k+1))]); 

을하지만 여러분이이 라인을 설명 할 수 있다면 나는 그것을 감사하겠습니다 :

if(typ == 'F') return mat[k*n+j]; 
+0

으로 sum(k)을 계산할 필요는 예를 들어, 매우 낮은 없다 IMHO * 나는 특히이 줄을 이해하지 못한다 : * - 너무 광범위하다. 너 이해 하지마? 구문은 무엇입니까? 그 공식? 'return' 문은? '삼항 연산자'? – PaulMcKenzie

+1

종이 조각을 가져 와서 U, L 및 F 행렬을 그리고 1에서 N까지 요소를 열거하면 그 코드가하는 일을 이해할 수 있습니다 – user463035818

+0

수식을 이해하지 못합니다 ([...] 사이의 용어) – alex403

답변

2

라인

if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]); 
     if(typ == 'U') return (j>k)?(0.0):(mat[k*n+j-sum(n-1)+sum(n-(k+1))]); 

행렬을 저장하려면 packed storage schem을 사인하십시오.

또한 참고로 전체 코드 품질은 가 루프 그 명시적인 표현이다 (K + 1) * 등 K/2