title: Mapping elements in 2D upper triangle and lower triangle to linear structure
body: <p>I have a matrix M which is of NxN dimensions, where M(i,j) = M(j,i) </p>
  
  <p>I would like to represent this structure as a (N²+N)/2 linear array K, to save space. My problem is coming up with the formula that will map a M(min(i,j),min(i,j)) into a range [0,(N^2)/2)</p>
  
  <p>Below is a mapping of a 3x3 matrix with indexes for K linear array, the X means those cells don't exist and instead their transpose is to be used:</p>
  
  <pre><code>0123
  X456
  XX78
  XXX9
  </code></pre>
  
  <p>Here is a 7x7 matrix with indexes for the K linear array</p>
  
  <pre><code>     0  1  2  3  4  5  6
   0  00 01 02 03 04 05 06
   1     07 08 09 10 11 12
   2        13 14 15 16 17
   3           18 19 20 21
   4              22 23 24
   5                 25 26
   6                    27
  </code></pre>
  
  <p>at the moment I have the following</p>
  
  <pre><code>int main()
  {
     const unsigned int N = 10;
     int M[N][N];
  
     int* M_ = &amp;(M[0][0]);
  
     assert(M[i][j] = M_[N * min(i,j) + max(i,j)]);
  
     //int* K = .....
     //assert(M[i][j] = K[.....]);
  
     return 0;
  }
  </code></pre>