亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mod2sparse.c

?? ldpc的11個程序 encode decode extract make-gen make-ldpc make-pchk print-gen print-pchk rand-src transm
?? C
?? 第 1 頁 / 共 2 頁
字號:
      else if (mod2sparse_col(e1)<mod2sparse_col(e2))      { mod2sparse_insert(r,i,mod2sparse_col(e1));        e1 = mod2sparse_next_in_row(e1);      }      else      { mod2sparse_insert(r,i,mod2sparse_col(e2));        e2 = mod2sparse_next_in_row(e2);             }    }    while (!mod2sparse_at_end(e1))    { mod2sparse_insert(r,i,mod2sparse_col(e1));      e1 = mod2sparse_next_in_row(e1);    }    while (!mod2sparse_at_end(e2))    { mod2sparse_insert(r,i,mod2sparse_col(e2));      e2 = mod2sparse_next_in_row(e2);    }  }}/* MULTIPLY TWO SPARSE MOD2 MATRICES. */void mod2sparse_multiply ( mod2sparse *m1, 	/* Left operand of multiply */  mod2sparse *m2,	/* Right operand of multiply */  mod2sparse *r		/* Place to store result of multiply */){  mod2entry *e1, *e2;  int i, j, b;  if (mod2sparse_cols(m1)!=mod2sparse_rows(m2)    || mod2sparse_rows(m1)!=mod2sparse_rows(r)    || mod2sparse_cols(m2)!=mod2sparse_cols(r))  { fprintf (stderr,      "mod2sparse_multiply: Matrices have incompatible dimensions\n");    exit(1);  }  if (r==m1 || r==m2)  { fprintf(stderr,     "mod2sparse_multiply: Result matrix is the same as one of the operands\n");    exit(1);  }  mod2sparse_clear(r);  for (i = 0; i<mod2sparse_rows(m1); i++)  {     if (mod2sparse_at_end(mod2sparse_first_in_row(m1,i)))     { continue;    }    for (j = 0; j<mod2sparse_cols(m2); j++)    {       b = 0;      e1 = mod2sparse_first_in_row(m1,i);      e2 = mod2sparse_first_in_col(m2,j);      while (!mod2sparse_at_end(e1) && !mod2sparse_at_end(e2))      {         if (mod2sparse_col(e1)==mod2sparse_row(e2))        { b ^= 1;          e1 = mod2sparse_next_in_row(e1);          e2 = mod2sparse_next_in_col(e2);         }        else if (mod2sparse_col(e1)<mod2sparse_row(e2))        { e1 = mod2sparse_next_in_row(e1);        }        else        { e2 = mod2sparse_next_in_col(e2);               }      }      if (b)      { mod2sparse_insert(r,i,j);      }    }  }}/* MULTIPLY VECTOR BY SPARSE MATRIX. */void mod2sparse_mulvec( mod2sparse *m,	/* The sparse matrix, with M rows and N columns */  char *u,		/* The input vector, N long */  char *v		/* Place to store the result, M long */){  mod2entry *e;  int M, N;  int i, j;  M = mod2sparse_rows(m);  N = mod2sparse_cols(m);  for (i = 0; i<M; i++) v[i] = 0;  for (j = 0; j<N; j++)  { if (u[j])    { for (e = mod2sparse_first_in_col(m,j);           !mod2sparse_at_end(e);           e = mod2sparse_next_in_col(e))      { v[mod2sparse_row(e)] ^= 1;      }    }  }}/* COUNT ENTRIES IN A ROW. */int mod2sparse_count_row( mod2sparse *m,  int row){  mod2entry *e;  int count;  if (row<0 || row>=mod2sparse_rows(m))  { fprintf(stderr,"mod2sparse_count_row: row index out of bounds\n");    exit(1);  }  count = 0;  for (e = mod2sparse_first_in_row(m,row);       !mod2sparse_at_end(e);       e = mod2sparse_next_in_row(e))  { count += 1;  }  return count;}/* COUNT ENTRIES IN A COLUMN. */int mod2sparse_count_col( mod2sparse *m,  int col){  mod2entry *e;  int count;  if (col<0 || col>=mod2sparse_cols(m))  { fprintf(stderr,"mod2sparse_count_col: column index out of bounds\n");    exit(1);  }  count = 0;  for (e = mod2sparse_first_in_col(m,col);       !mod2sparse_at_end(e);       e = mod2sparse_next_in_col(e))  { count += 1;  }  return count;}/* ADD TO A ROW. */void mod2sparse_add_row( mod2sparse *m1,	/* Matrix containing row to add to */  int row1,		/* Index in this matrix of row to add to */  mod2sparse *m2,	/* Matrix containing row to add from */  int row2		/* Index in this matrix of row to add from */){  mod2entry *f1, *f2, *ft;  if (mod2sparse_cols(m1)<mod2sparse_cols(m2))  { fprintf (stderr,     "mod2sparse_add_row: row added to is shorter than row added from\n");    exit(1);  }  if (row1<0 || row1>=mod2sparse_rows(m1)    || row2<0 || row2>=mod2sparse_rows(m2))  { fprintf (stderr,"mod2sparse_add_row: row index out of range\n");    exit(1);  }  f1 = mod2sparse_first_in_row(m1,row1);  f2 = mod2sparse_first_in_row(m2,row2);  while (!mod2sparse_at_end(f1) && !mod2sparse_at_end(f2))  { if (mod2sparse_col(f1)>mod2sparse_col(f2))    { mod2sparse_insert(m1,row1,mod2sparse_col(f2));      f2 = mod2sparse_next_in_row(f2);    }    else    { ft = mod2sparse_next_in_row(f1);        if (mod2sparse_col(f1)==mod2sparse_col(f2))      { mod2sparse_delete(m1,f1);        f2 = mod2sparse_next_in_row(f2);      }      f1 = ft;    }  }  while (!mod2sparse_at_end(f2))  { mod2sparse_insert(m1,row1,mod2sparse_col(f2));    f2 = mod2sparse_next_in_row(f2);  }}/* ADD TO A COLUMN. */void mod2sparse_add_col( mod2sparse *m1,	/* Matrix containing column to add to */  int col1,		/* Index in this matrix of column to add to */  mod2sparse *m2,	/* Matrix containing column to add from */  int col2		/* Index in this matrix of column to add from */){  mod2entry *f1, *f2, *ft;  if (mod2sparse_rows(m1)<mod2sparse_rows(m2))  { fprintf (stderr,     "mod2sparse_add_col: Column added to is shorter than column added from\n");    exit(1);  }  if (col1<0 || col1>=mod2sparse_cols(m1)    || col2<0 || col2>=mod2sparse_cols(m2))  { fprintf (stderr,"mod2sparse_add_col: Column index out of range\n");    exit(1);  }  f1 = mod2sparse_first_in_col(m1,col1);  f2 = mod2sparse_first_in_col(m2,col2);  while (!mod2sparse_at_end(f1) && !mod2sparse_at_end(f2))  { if (mod2sparse_row(f1)>mod2sparse_row(f2))    { mod2sparse_insert(m1,mod2sparse_row(f2),col1);      f2 = mod2sparse_next_in_col(f2);    }    else    { ft = mod2sparse_next_in_col(f1);      if (mod2sparse_row(f1)==mod2sparse_row(f2))      { mod2sparse_delete(m1,f1);        f2 = mod2sparse_next_in_col(f2);      }      f1 = ft;    }  }  while (!mod2sparse_at_end(f2))  { mod2sparse_insert(m1,mod2sparse_row(f2),col1);    f2 = mod2sparse_next_in_col(f2);  }}/* FIND AN LU DECOMPOSITION OF A SPARSE MATRIX. */int mod2sparse_decomp( mod2sparse *A,	/* Input matrix, M by N */  int K,		/* Size of sub-matrix to find LU decomposition of */  mod2sparse *L,	/* Matrix in which L is stored, M by K */  mod2sparse *U,	/* Matrix in which U is stored, K by N */  int *rows,		/* Array where row indexes are stored, M long */  int *cols,		/* Array where column indexes are stored, N long */  mod2sparse_strategy strategy, /* Strategy to follow in picking rows/columns */  int abandon_number,	/* Number of columns to abandon at some point */  int abandon_when	/* When to abandon these columns */){    int *rinv, *cinv, *acnt, *rcnt;  mod2sparse *B;  int M, N;  mod2entry *e, *f, *fn, *e2;  int i, j, k, cc, cc2, cc3, cr2, pr;  int found, nnf;  M = mod2sparse_rows(A);  N = mod2sparse_cols(A);  if (mod2sparse_cols(L)!=K || mod2sparse_rows(L)!=M   || mod2sparse_cols(U)!=N || mod2sparse_rows(U)!=K)  { fprintf (stderr,      "mod2sparse_decomp: Matrices have incompatible dimensions\n");    exit(1);  }  if (abandon_number>N-K)  { fprintf(stderr,"Trying to abandon more columns than allowed\n");    exit(1);  }  rinv = chk_alloc (M, sizeof *rinv);  cinv = chk_alloc (N, sizeof *cinv);  if (abandon_number>0)  { acnt = chk_alloc (M+1, sizeof *acnt);  }  if (strategy==Mod2sparse_minprod)  { rcnt = chk_alloc (M, sizeof *rcnt);  }  mod2sparse_clear(L);  mod2sparse_clear(U);  /* Copy A to B.  B will be modified, then discarded. */  B = mod2sparse_allocate(M,N);  mod2sparse_copy(A,B);  /* Count 1s in rows of B, if using minprod strategy. */  if (strategy==Mod2sparse_minprod)  { for (i = 0; i<M; i++)     { rcnt[i] = mod2sparse_count_row(B,i);    }  }  /* Set up initial row and column choices. */  for (i = 0; i<M; i++) rows[i] = rinv[i] = i;  for (j = 0; j<N; j++) cols[j] = cinv[j] = j;   /* Find L and U one column at a time. */  nnf = 0;  for (i = 0; i<K; i++)  {     /* Choose the next row and column of B. */    switch (strategy)    {      case Mod2sparse_first:       {         found = 0;        for (k = i; k<N; k++)        { e = mod2sparse_first_in_col(B,cols[k]);          while (!mod2sparse_at_end(e))          { if (rinv[mod2sparse_row(e)]>=i)            { found = 1;              goto out_first;            }            e = mod2sparse_next_in_col(e);          }        }      out_first:        break;      }      case Mod2sparse_mincol:      {         found = 0;        for (j = i; j<N; j++)        { cc2 = mod2sparse_count_col(B,cols[j]);          if (!found || cc2<cc)          { e2 = mod2sparse_first_in_col(B,cols[j]);            while (!mod2sparse_at_end(e2))            { if (rinv[mod2sparse_row(e2)]>=i)              { found = 1;                cc = cc2;                e = e2;                k = j;                break;              }              e2 = mod2sparse_next_in_col(e2);            }          }        }        break;      }      case Mod2sparse_minprod:      {         found = 0;        for (j = i; j<N; j++)        { cc2 = mod2sparse_count_col(B,cols[j]);          e2 = mod2sparse_first_in_col(B,cols[j]);          while (!mod2sparse_at_end(e2))          { if (rinv[mod2sparse_row(e2)]>=i)            { cr2 = rcnt[mod2sparse_row(e2)];              if (!found || cc2==1 || (cc2-1)*(cr2-1)<pr)              { found = 1;                pr = cc2==1 ? 0 : (cc2-1)*(cr2-1);                e = e2;                k = j;              }            }            e2 = mod2sparse_next_in_col(e2);          }        }        break;      }      default:      { fprintf(stderr,"mod2sparse_decomp: Unknown stategy\n");        exit(1);      }    }    if (!found)     { nnf += 1;    }    /* Update 'rows' and 'cols'.  Looks at 'k' and 'e' found above. */    if (found)    {       if (cinv[mod2sparse_col(e)]!=k) abort();      cols[k] = cols[i];      cols[i] = mod2sparse_col(e);      cinv[cols[k]] = k;      cinv[cols[i]] = i;      k = rinv[mod2sparse_row(e)];      if (k<i) abort();      rows[k] = rows[i];      rows[i] = mod2sparse_row(e);      rinv[rows[k]] = k;      rinv[rows[i]] = i;    }    /* Update L, U, and B. */    f = mod2sparse_first_in_col(B,cols[i]);     while (!mod2sparse_at_end(f))    {       fn = mod2sparse_next_in_col(f);      k = mod2sparse_row(f);      if (rinv[k]>i)      { mod2sparse_add_row(B,k,B,mod2sparse_row(e));        if (strategy==Mod2sparse_minprod)         { rcnt[k] = mod2sparse_count_row(B,k);        }        mod2sparse_insert(L,k,i);      }      else if (rinv[k]<i)      { mod2sparse_insert(U,rinv[k],cols[i]);      }      else      { mod2sparse_insert(L,k,i);        mod2sparse_insert(U,i,cols[i]);      }      f = fn;    }    /* Get rid of all entries in the current column of B, just to save space. */    for (;;)    { f = mod2sparse_first_in_col(B,cols[i]);      if (mod2sparse_at_end(f)) break;      mod2sparse_delete(B,f);    }    /* Abandon columns of B with lots of entries if it's time for that. */    if (abandon_number>0 && i==abandon_when)    {       for (k = 0; k<M+1; k++)       { acnt[k] = 0;      }      for (j = 0; j<N; j++)       { k = mod2sparse_count_col(B,j);        acnt[k] += 1;      }      cc = abandon_number;      k = M;      while (acnt[k]<cc)      { cc -= acnt[k];        k -= 1;        if (k<0) abort();      }      cc2 = 0;      for (j = 0; j<N; j++)      { cc3 = mod2sparse_count_col(B,j);        if (cc3>k || cc3==k && cc>0)        { if (cc3==k) cc -= 1;          for (;;)          { f = mod2sparse_first_in_col(B,j);            if (mod2sparse_at_end(f)) break;            mod2sparse_delete(B,f);          }          cc2 += 1;        }      }      if (cc2!=abandon_number) abort();      if (strategy==Mod2sparse_minprod)      { for (j = 0; j<M; j++)         { rcnt[j] = mod2sparse_count_row(B,j);        }      }    }  }  /* Get rid of all entries in the rows of L past row K, after reordering. */  for (i = K; i<M; i++)  { for (;;)    { f = mod2sparse_first_in_row(L,rows[i]);      if (mod2sparse_at_end(f)) break;      mod2sparse_delete(L,f);    }  }  mod2sparse_free(B);  free(rinv);  free(cinv);  if (strategy==Mod2sparse_minprod) free(rcnt);  if (abandon_number>0) free(acnt);  return nnf;}/* SOLVE A LOWER-TRIANGULAR SYSTEM BY FORWARD SUBSTITUTION. */int mod2sparse_forward_sub( mod2sparse *L,	/* Matrix that is lower triangular after reordering */  int *rows,		/* Array of indexes (from 0) of rows for new order */  char *x,		/* Vector on right of equation, also reordered */  char *y		/* Place to store solution */){  int K, i, j, ii, b, d;  mod2entry *e;  K = mod2sparse_cols(L);  /* Make sure that L is lower-triangular, after row re-ordering. */  for (i = 0; i<K; i++)  { ii = rows ? rows[i] : i;    e = mod2sparse_last_in_row(L,ii);    if (!mod2sparse_at_end(e) && mod2sparse_col(e)>i)    { fprintf(stderr,        "mod2sparse_forward_sub: Matrix is not lower-triangular\n");      exit(1);    }  }  /* Solve system by forward substitution. */  for (i = 0; i<K; i++)  {     ii = rows ? rows[i] : i;    /* Look at bits in this row, forming inner product with partial        solution, and seeing if the diagonal is 1. */    d = 0;    b = 0;    for (e = mod2sparse_first_in_row(L,ii);          !mod2sparse_at_end(e);         e = mod2sparse_next_in_row(e))    {       j = mod2sparse_col(e);      if (j==i)      { d = 1;      }      else      { b ^= y[j];      }    }    /* Check for no solution if the diagonal isn't 1. */    if (!d && b!=x[ii])     { return 0;    }    /* Set bit of solution, zero if arbitrary. */    y[i] = b^x[ii];  }  return 1;}/* SOLVE AN UPPER-TRIANGULAR SYSTEM BY BACKWARD SUBSTITUTION. */int mod2sparse_backward_sub( mod2sparse *U,	/* Matrix that is upper triangular after reordering */  int *cols,		/* Array of indexes (from 0) of columns for new order */  char *y,		/* Vector on right of equation */  char *z		/* Place to store solution, also reordered */){  int K, i, j, ii, b, d;  mod2entry *e;  K = mod2sparse_rows(U);  /* Make sure that U is upper-triangular, after column re-ordering. */  for (i = 0; i<K; i++)  { ii = cols ? cols[i] : i;    e = mod2sparse_last_in_col(U,ii);    if (!mod2sparse_at_end(e) && mod2sparse_row(e)>i)    { fprintf(stderr,        "mod2sparse_backward_sub: Matrix is not upper-triangular\n");      exit(1);    }  }  /* Solve system by backward substitution. */  for (i = K-1; i>=0; i--)  {     ii = cols ? cols[i] : i;    /* Look at bits in this row, forming inner product with partial        solution, and seeing if the diagonal is 1. */    d = 0;    b = 0;    for (e = mod2sparse_first_in_row(U,i);          !mod2sparse_at_end(e);         e = mod2sparse_next_in_row(e))    {       j = mod2sparse_col(e);      if (j==ii)      { d = 1;      }      else      { b ^= z[j];      }    }    /* Check for no solution if the diagonal isn't 1. */    if (!d && b!=y[i])     { return 0;    }    /* Set bit of solution, zero if arbitrary. */    z[ii] = b^y[i];  }  return 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成精品久久久久久| 国产一区二区精品久久99| 美国十次了思思久久精品导航| 国产一区二三区| 欧美日韩国产a| 亚洲九九爱视频| 国产精品88888| 欧美sm美女调教| 午夜久久久久久| 在线观看一区日韩| 亚洲天堂精品在线观看| 国产精品亚洲午夜一区二区三区| 欧美精品123区| 亚洲成人一区二区| 不卡的电影网站| 国产日韩欧美精品综合| 极品美女销魂一区二区三区免费| 欧美色手机在线观看| 一个色妞综合视频在线观看| 成人丝袜高跟foot| 国产欧美日韩视频一区二区| 久久99精品久久久久久动态图 | 日韩一区二区影院| 亚洲夂夂婷婷色拍ww47| 97超碰欧美中文字幕| 久久久91精品国产一区二区三区| 蜜臀久久99精品久久久久久9| 在线电影欧美成精品| 日韩精品91亚洲二区在线观看| 在线观看国产精品网站| 亚洲国产精品天堂| 欧美精品成人一区二区三区四区| 亚洲高清在线精品| 制服丝袜亚洲网站| 蜜桃av噜噜一区二区三区小说| 在线综合亚洲欧美在线视频| 日韩国产成人精品| 精品欧美久久久| 国产精品中文有码| 最新成人av在线| 91成人看片片| 首页国产欧美久久| 欧美一区二区三区系列电影| 裸体在线国模精品偷拍| 精品少妇一区二区| 成人黄色一级视频| 亚洲一区影音先锋| 日韩欧美色电影| 成人精品高清在线| 亚洲激情图片小说视频| 欧美日韩精品一区视频| 男人的天堂久久精品| 久久久天堂av| 色天使色偷偷av一区二区| 视频一区欧美日韩| 久久久国产午夜精品| 91免费视频网| 免费成人在线网站| 国产精品网站在线| 欧美日韩亚洲综合| 国产精品一区二区免费不卡 | 成人激情校园春色| 亚洲精品成人a在线观看| 欧美日韩国产区一| 成人免费va视频| 日韩高清在线电影| 亚洲特黄一级片| 日韩精品一区二区三区四区视频| av在线播放不卡| 麻豆国产精品777777在线| 国产精品久久久99| 91精品国产一区二区三区蜜臀 | 国产精品久久夜| 欧美色图在线观看| 国产高清一区日本| 日本va欧美va精品| 亚洲精品乱码久久久久久| 久久综合狠狠综合久久综合88| 色婷婷精品大在线视频| 国产精品自拍在线| 日av在线不卡| 亚洲国产精品久久人人爱| 久久久精品国产免大香伊| 欧美日韩电影在线播放| 成人av在线资源网站| 麻豆精品视频在线观看免费| 一区二区三区免费观看| 久久久精品免费免费| 3atv在线一区二区三区| 色偷偷久久一区二区三区| 国产高清精品网站| 男女男精品视频网| 无码av免费一区二区三区试看 | 久久精品夜色噜噜亚洲aⅴ| 欧美日韩1区2区| 欧美亚洲精品一区| 91美女蜜桃在线| 成人av中文字幕| 大白屁股一区二区视频| 国产精品主播直播| 国产一区二区三区蝌蚪| 奇米精品一区二区三区在线观看| 亚洲在线视频免费观看| 亚洲视频在线观看三级| 国产精品国产成人国产三级| 国产偷v国产偷v亚洲高清| 精品国精品国产| 精品国产乱码91久久久久久网站| 51精品国自产在线| 在线播放日韩导航| 欧美精品 国产精品| 欧美精品自拍偷拍动漫精品| 欧美日韩三级一区| 欧美日韩另类国产亚洲欧美一级| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美日韩精品一区二区三区四区| 色综合天天性综合| 91久久线看在观草草青青| 91丨porny丨蝌蚪视频| 91在线视频网址| 99re热这里只有精品免费视频| 99久久久无码国产精品| 91亚洲精品久久久蜜桃| 色94色欧美sute亚洲线路一ni | 日本欧美一区二区三区乱码| 免费久久精品视频| 精品无码三级在线观看视频| 韩国一区二区视频| 国产成人99久久亚洲综合精品| av电影在线不卡| 欧美天堂亚洲电影院在线播放| 欧美日韩国产电影| 亚洲精品在线网站| 中文成人av在线| 一区二区三区欧美日韩| 亚洲成人精品一区二区| 韩国v欧美v日本v亚洲v| 成人动漫视频在线| 欧美午夜宅男影院| 欧美一区二区三区免费视频| 久久精品日韩一区二区三区| 亚洲欧美韩国综合色| 日本一不卡视频| 国产成人午夜精品5599| 欧美在线色视频| 久久精品欧美一区二区三区不卡 | 亚洲欧美日本韩国| 日本中文一区二区三区| 国产91丝袜在线观看| 91成人免费在线| 久久综合九色综合欧美就去吻| 国产精品电影一区二区| 五月综合激情网| 99久久久久久| 精品国产凹凸成av人导航| 成人免费在线观看入口| 日本成人中文字幕在线视频| 97se亚洲国产综合自在线不卡| 日韩一级免费一区| 亚洲黄网站在线观看| 激情小说亚洲一区| 欧美日韩国产在线播放网站| 久久久高清一区二区三区| 亚洲国产精品久久久久秋霞影院| 国产一区二区在线影院| 欧美精品久久一区| 国产精品视频免费看| 婷婷国产v国产偷v亚洲高清| 99这里都是精品| 久久精品日产第一区二区三区高清版 | 亚洲成人免费视| caoporen国产精品视频| 精品日韩在线观看| 亚洲午夜电影在线观看| 成+人+亚洲+综合天堂| 精品入口麻豆88视频| 亚洲成人av电影在线| 97久久人人超碰| 国产色综合一区| 美脚の诱脚舐め脚责91| 欧美日本国产一区| 一卡二卡欧美日韩| 一本色道亚洲精品aⅴ| 国产日韩综合av| 国产成人综合亚洲网站| 欧美va日韩va| 精品在线观看免费| 欧美一级理论性理论a| 丝袜美腿一区二区三区| 欧美日韩一级黄| 亚洲成人午夜影院| 欧美视频在线播放| 一级日本不卡的影视| 在线亚洲精品福利网址导航| 亚洲色图在线播放| 99久精品国产| 亚洲一区二区三区视频在线播放| 色先锋aa成人| 亚洲成人激情av| 91麻豆精品国产91久久久资源速度|