亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产成人av电影在线观看| 视频一区二区国产| 成人黄色小视频在线观看| 国产欧美一区视频| 99精品久久免费看蜜臀剧情介绍| 国产精品久久久久久久久免费丝袜 | 99综合电影在线视频| 国产精品美女久久福利网站| 色菇凉天天综合网| 天天做天天摸天天爽国产一区| 7878成人国产在线观看| 国产一区二区三区四区五区入口 | 精油按摩中文字幕久久| 国产日韩精品一区二区三区 | 成人av中文字幕| 亚洲一区二区成人在线观看| 日韩免费性生活视频播放| 国产成人精品aa毛片| 一区二区三区四区视频精品免费| 欧美一区二区在线免费观看| 国产成人亚洲综合色影视| 亚洲一区二区欧美日韩| 精品国偷自产国产一区| 91小宝寻花一区二区三区| 免费观看一级特黄欧美大片| 日本一区二区视频在线观看| 欧美日韩mp4| 成人av在线影院| 久久精品国产一区二区三 | 狠狠色综合日日| 中文字幕佐山爱一区二区免费| 欧美一区二区三区视频免费| 99久久精品国产毛片| 久久se这里有精品| 亚洲午夜精品一区二区三区他趣| 久久久三级国产网站| 欧美日韩一二区| 9i在线看片成人免费| 美国十次综合导航| 亚洲一区二区三区四区的| 国产无一区二区| 日韩欧美高清dvd碟片| 91成人免费网站| 成人性生交大片免费看在线播放| 天堂精品中文字幕在线| 亚洲男人天堂av网| 久久久精品日韩欧美| 欧美一区二区三区在线电影| 一本大道av一区二区在线播放| 精品一区二区免费| 亚洲成av人片在www色猫咪| 国产精品国产三级国产a| 久久一区二区三区国产精品| 欧美狂野另类xxxxoooo| 在线免费不卡电影| 99视频有精品| 岛国一区二区在线观看| 激情六月婷婷久久| 男男gaygay亚洲| 天天综合日日夜夜精品| 亚洲午夜三级在线| 亚洲主播在线播放| 一区二区久久久久久| 亚洲欧美日韩系列| 亚洲欧美一区二区三区久本道91 | 欧洲一区二区三区免费视频| 成人丝袜高跟foot| 成人av小说网| 成人精品国产一区二区4080| 韩国av一区二区| 狠狠久久亚洲欧美| 国产乱码精品一品二品| 国产尤物一区二区在线| 加勒比av一区二区| 国产一区 二区| 国产乱码字幕精品高清av| 国内精品写真在线观看| 国产麻豆精品theporn| 极品尤物av久久免费看| 国内外精品视频| 粉嫩在线一区二区三区视频| 成人一级片在线观看| 91小视频在线观看| 欧美日韩在线播| 91精品国产丝袜白色高跟鞋| 欧美va亚洲va| 久久精品男人天堂av| 国产精品免费网站在线观看| 1024精品合集| 香蕉久久夜色精品国产使用方法| 日韩av电影一区| 国产一区在线不卡| www.av精品| 在线免费观看一区| 91精品国产综合久久久久久| 日韩精品在线网站| 欧美激情中文字幕一区二区| 中文字幕一区二区三区四区 | 国产精品视频一二三| 一区二区三区欧美久久| 久久精品国产秦先生| 国产成人8x视频一区二区| 色哟哟国产精品免费观看| 欧美日韩视频一区二区| 日韩欧美国产系列| 亚洲欧洲一区二区在线播放| 亚洲成av人片| 国产成人免费av在线| 在线免费不卡电影| 久久综合国产精品| 亚洲美女偷拍久久| 久久er精品视频| 91老司机福利 在线| 日韩免费观看高清完整版在线观看| 日本一区二区三区久久久久久久久不| 亚洲精品五月天| 国产一区在线精品| 欧美午夜精品久久久久久孕妇| 欧美www视频| 亚洲一区二区精品久久av| 国产精品一二三四五| 欧美三级日韩三级国产三级| 国产日韩欧美高清在线| 亚洲国产精品久久一线不卡| 国产一区亚洲一区| 9191成人精品久久| 亚洲柠檬福利资源导航| 国产精品亚洲午夜一区二区三区| 一本一道久久a久久精品| 久久久久9999亚洲精品| 三级不卡在线观看| 色婷婷综合久久久久中文一区二区| 精品国产91乱码一区二区三区| 亚洲综合一区二区| 91丝袜高跟美女视频| 国产丝袜在线精品| 麻豆视频一区二区| 欧美日韩国产精选| 亚洲精品中文在线影院| 国产精品一级黄| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲五月六月丁香激情| 91影院在线观看| 国产精品久久福利| 国产福利视频一区二区三区| 日韩精品一区二区三区中文精品| 午夜精品福利视频网站| 色狠狠色噜噜噜综合网| 日韩理论片中文av| 成人激情免费视频| 日本一区二区成人| 国产福利不卡视频| 精品处破学生在线二十三| 奇米精品一区二区三区在线观看| 欧美日韩二区三区| 亚洲综合视频在线| 在线观看91精品国产入口| 亚洲欧美日韩中文播放| 91麻豆视频网站| 亚洲精品国久久99热| 色综合天天综合网天天狠天天| 自拍偷拍欧美激情| 色av成人天堂桃色av| 亚洲欧美日本韩国| 91麻豆免费观看| 亚洲同性同志一二三专区| av欧美精品.com| 亚洲欧洲综合另类| 在线看国产一区二区| 亚洲不卡av一区二区三区| 欧美精品黑人性xxxx| 免费观看91视频大全| 精品美女在线观看| 国产成人精品网址| 最新成人av在线| 欧美午夜精品久久久久久孕妇| 香蕉影视欧美成人| 日韩免费在线观看| 国产精品亚洲第一区在线暖暖韩国| 久久―日本道色综合久久| 国产69精品一区二区亚洲孕妇| 国产精品久久夜| 欧美在线一二三四区| 青青草国产成人av片免费| 日韩欧美中文字幕公布| 国产精品911| 亚洲视频一区在线观看| 欧美日韩一级黄| 国内精品久久久久影院一蜜桃| 国产清纯白嫩初高生在线观看91 | 日韩一区二区三| 国产精品一卡二卡| 亚洲欧美福利一区二区| 69堂成人精品免费视频| 国产乱对白刺激视频不卡| 国产精品久久久久久久久久免费看| 91丨porny丨蝌蚪视频| 日韩综合小视频| 国产精品入口麻豆原神| 欧美日韩在线三区|