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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mod2sparse.c

?? ldpc的11個程序 encode decode extract make-gen make-ldpc make-pchk print-gen print-pchk rand-src transm
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* MOD2SPARSE.C - Procedures for handling sparse mod2 matrices. *//* Copyright (c) 2000, 2001 by Radford M. Neal  * * Permission is granted for anyone to copy, use, or modify this program  * for purposes of research or education, provided this copyright notice  * is retained, and note is made of any changes that have been made.  * * This program is distributed without any warranty, express or implied. * As this program was written for research purposes only, it has not been * tested to the degree that would be advisable in any important application. * All use of this program is entirely at the user's own risk. *//* NOTE:  See mod2sparse.html for documentation on these procedures. */#include <stdlib.h>#include <stdio.h>#include <math.h>#include "alloc.h"#include "intio.h"#include "mod2sparse.h"/* ALLOCATE AN ENTRY WITHIN A MATRIX.  This local procedure is used to   allocate a new entry, representing a non-zero element, within a given   matrix.  Entries in this matrix that were previously allocated and   then freed are re-used.  If there are no such entries, a new block   of entries is allocated. */static mod2entry *alloc_entry( mod2sparse *m){   mod2block *b;  mod2entry *e;  int k;  if (m->next_free==0)  {     b = chk_alloc (1, sizeof *b);    b->next = m->blocks;    m->blocks = b;    for (k = 0; k<Mod2sparse_block; k++)    { b->entry[k].left = m->next_free;      m->next_free = &b->entry[k];    }  }  e = m->next_free;  m->next_free = e->left;  e->pr = 0;  e->lr = 0;  return e;}/* ALLOCATE SPACE FOR A SPARSE MOD2 MATRIX.  */mod2sparse *mod2sparse_allocate( int n_rows, 		/* Number of rows in matrix */  int n_cols		/* Number of columns in matrix */){  mod2sparse *m;  mod2entry *e;  int i, j;  if (n_rows<=0 || n_cols<=0)  { fprintf(stderr,"mod2sparse_allocate: Invalid number of rows or columns\n");    exit(1);  }  m = chk_alloc (1, sizeof *m);  m->n_rows = n_rows;  m->n_cols = n_cols;  m->rows = chk_alloc (n_rows, sizeof *m->rows);  m->cols = chk_alloc (n_cols, sizeof *m->cols);  m->blocks = 0;  m->next_free = 0;  for (i = 0; i<n_rows; i++)  { e = &m->rows[i];    e->left = e->right = e->up = e->down = e;    e->row = e->col = -1;  }  for (j = 0; j<n_cols; j++)  { e = &m->cols[j];    e->left = e->right = e->up = e->down = e;    e->row = e->col = -1;  }  return m;}/* FREE SPACE OCCUPIED BY A SPARSE MOD2 MATRIX. */void mod2sparse_free( mod2sparse *m		/* Matrix to free */){   mod2block *b;  free(m->rows);  free(m->cols);  while (m->blocks!=0)  { b = m->blocks;    m->blocks = b->next;    free(b);  }}/* CLEAR A SPARSE MATRIX TO ALL ZEROS. */void mod2sparse_clear( mod2sparse *r){  mod2block *b;  mod2entry *e;  int i, j;  for (i = 0; i<mod2sparse_rows(r); i++)  { e = &r->rows[i];    e->left = e->right = e->up = e->down = e;  }  for (j = 0; j<mod2sparse_cols(r); j++)  { e = &r->cols[j];    e->left = e->right = e->up = e->down = e;  }  while (r->blocks!=0)  { b = r->blocks;    r->blocks = b->next;    free(b);  }}/* COPY A SPARSE MATRIX. */void mod2sparse_copy( mod2sparse *m,	/* Matrix to copy */  mod2sparse *r		/* Place to store copy of matrix */){  mod2entry *e, *f;  int i;  if (mod2sparse_rows(m)>mod2sparse_rows(r)    || mod2sparse_cols(m)>mod2sparse_cols(r))  { fprintf(stderr,"mod2sparse_copy: Destination matrix is too small\n");    exit(1);  }  mod2sparse_clear(r);  for (i = 0; i<mod2sparse_rows(m); i++)  {    e = mod2sparse_first_in_row(m,i);     while (!mod2sparse_at_end(e))    { f = mod2sparse_insert(r,e->row,e->col);      f->lr = e->lr;      f->pr = e->pr;      e = mod2sparse_next_in_row(e);    }  }}/* COPY ROWS OF A SPARSE MOD2 MATRIX. */void mod2sparse_copyrows( mod2sparse *m,	/* Matrix to copy */  mod2sparse *r,	/* Place to store copy of matrix */  int *rows		/* Indexes of rows to copy, from 0 */){   mod2entry *e;  int i;  if (mod2sparse_cols(m)>mod2sparse_cols(r))  { fprintf(stderr,     "mod2sparse_copyrows: Destination matrix has fewer columns than source\n");    exit(1);  }  mod2sparse_clear(r);  for (i = 0; i<mod2sparse_rows(r); i++)  { if (rows[i]<0 || rows[i]>=mod2sparse_rows(m))    { fprintf(stderr,"mod2sparse_copyrows: Row index out of range\n");      exit(1);    }    e = mod2sparse_first_in_row(m,rows[i]);    while (!mod2sparse_at_end(e))    { mod2sparse_insert(r,i,e->col);      e = mod2sparse_next_in_row(e);    }  }}/* COPY COLUMNS OF A SPARSE MOD2 MATRIX. */void mod2sparse_copycols( mod2sparse *m,	/* Matrix to copy */  mod2sparse *r,	/* Place to store copy of matrix */  int *cols		/* Indexes of columns to copy, from 0 */){   mod2entry *e;  int j;  if (mod2sparse_rows(m)>mod2sparse_rows(r))  { fprintf(stderr,      "mod2sparse_copycols: Destination matrix has fewer rows than source\n");    exit(1);  }  mod2sparse_clear(r);  for (j = 0; j<mod2sparse_cols(r); j++)  { if (cols[j]<0 || cols[j]>=mod2sparse_cols(m))    { fprintf(stderr,"mod2sparse_copycols: Column index out of range\n");      exit(1);    }    e = mod2sparse_first_in_col(m,cols[j]);    while (!mod2sparse_at_end(e))    { mod2sparse_insert(r,e->row,j);      e = mod2sparse_next_in_col(e);    }  }}/* PRINT A SPARSE MOD2 MATRIX IN HUMAN-READABLE FORM. */void mod2sparse_print( FILE *f,  mod2sparse *m){   int rdigits, cdigits;  mod2entry *e;  int i;  rdigits = mod2sparse_rows(m)<=10 ? 1           : mod2sparse_rows(m)<=100 ? 2          : mod2sparse_rows(m)<=1000 ? 3          : mod2sparse_rows(m)<=10000 ? 4          : mod2sparse_rows(m)<=100000 ? 5          : 6;  cdigits = mod2sparse_cols(m)<=10 ? 1           : mod2sparse_cols(m)<=100 ? 2          : mod2sparse_cols(m)<=1000 ? 3          : mod2sparse_cols(m)<=10000 ? 4          : mod2sparse_cols(m)<=100000 ? 5          : 6;  for (i = 0; i<mod2sparse_rows(m); i++)  {     fprintf(f,"%*d:",rdigits,i);    e = mod2sparse_first_in_row(m,i);    while (!mod2sparse_at_end(e))    { fprintf(f," %*d",cdigits,mod2sparse_col(e));      e = mod2sparse_next_in_row(e);    }    fprintf(f,"\n");  }}/* WRITE A SPARSE MOD2 MATRIX TO A FILE IN MACHINE-READABLE FORM. */int mod2sparse_write( FILE *f,  mod2sparse *m){  mod2entry *e;  int i;  intio_write(f,m->n_rows);  if (ferror(f)) return 0;  intio_write(f,m->n_cols);  if (ferror(f)) return 0;  for (i = 0; i<mod2sparse_rows(m); i++)  {     e = mod2sparse_first_in_row(m,i);    if (!mod2sparse_at_end(e))    {      intio_write (f, -(i+1));      if (ferror(f)) return 0;      while (!mod2sparse_at_end(e))      {         intio_write (f, mod2sparse_col(e)+1);        if (ferror(f)) return 0;        e = mod2sparse_next_in_row(e);      }    }  }  intio_write(f,0);  if (ferror(f)) return 0;  return 1;}/* READ A SPARSE MOD2 MATRIX STORED IN MACHINE-READABLE FORM FROM A FILE. */mod2sparse *mod2sparse_read( FILE *f){  int n_rows, n_cols;  mod2sparse *m;  int v, row, col;  n_rows = intio_read(f);  if (feof(f) || ferror(f) || n_rows<=0) return 0;  n_cols = intio_read(f);  if (feof(f) || ferror(f) || n_cols<=0) return 0;  m = mod2sparse_allocate(n_rows,n_cols);  row = -1;  for (;;)  {    v = intio_read(f);    if (feof(f) || ferror(f)) break;    if (v==0)    { return m;    }    else if (v<0)     { row = -v-1;      if (row>=n_rows) break;    }    else     { col = v-1;      if (col>=n_cols) break;      if (row==-1) break;      mod2sparse_insert(m,row,col);    }  }  /* Error if we get here. */  mod2sparse_free(m);  return 0;   }/* LOOK FOR AN ENTRY WITH GIVEN ROW AND COLUMN. */mod2entry *mod2sparse_find( mod2sparse *m,  int row,  int col){   mod2entry *re, *ce;  if (row<0 || row>=mod2sparse_rows(m) || col<0 || col>=mod2sparse_cols(m))  { fprintf(stderr,"mod2sparse_find: row or column index out of bounds\n");    exit(1);  }  /* Check last entries in row and column. */  re = mod2sparse_last_in_row(m,row);  if (mod2sparse_at_end(re) || mod2sparse_col(re)<col)   { return 0;  }  if (mod2sparse_col(re)==col)   { return re;  }  ce = mod2sparse_last_in_col(m,col);  if (mod2sparse_at_end(ce) || mod2sparse_row(ce)<row)  { return 0;  }  if (mod2sparse_row(ce)==row)  { return ce;  }  /* Search row and column in parallel, from the front. */  re = mod2sparse_first_in_row(m,row);  ce = mod2sparse_first_in_col(m,col);  for (;;)  {     if (mod2sparse_at_end(re) || mod2sparse_col(re)>col)    { return 0;    }     if (mod2sparse_col(re)==col)     { return re;    }    if (mod2sparse_at_end(ce) || mod2sparse_row(ce)>row)    { return 0;    }     if (mod2sparse_row(ce)==row)    { return ce;    }    re = mod2sparse_next_in_row(re);    ce = mod2sparse_next_in_col(ce);  }}/* INSERT AN ENTRY WITH GIVEN ROW AND COLUMN. */mod2entry *mod2sparse_insert( mod2sparse *m,  int row,  int col){  mod2entry *re, *ce, *ne;  if (row<0 || row>=mod2sparse_rows(m) || col<0 || col>=mod2sparse_cols(m))  { fprintf(stderr,"mod2sparse_insert: row or column index out of bounds\n");    exit(1);  }  /* Find old entry and return it, or allocate new entry and insert into row. */  re = mod2sparse_last_in_row(m,row);  if (!mod2sparse_at_end(re) && mod2sparse_col(re)==col)   { return re;  }  if (mod2sparse_at_end(re) || mod2sparse_col(re)<col)   { re = re->right;  }  else  {    re = mod2sparse_first_in_row(m,row);    for (;;)    {       if (!mod2sparse_at_end(re) && mod2sparse_col(re)==col)       { return re;      }      if (mod2sparse_at_end(re) || mod2sparse_col(re)>col)      { break;      }       re = mod2sparse_next_in_row(re);    }  }  ne = alloc_entry(m);  ne->row = row;  ne->col = col;  ne->left = re->left;  ne->right = re;  ne->left->right = ne;  ne->right->left = ne;  /* Insert new entry into column.  If we find an existing entry here,     the matrix must be garbled, since we didn't find it in the row. */  ce = mod2sparse_last_in_col(m,col);  if (!mod2sparse_at_end(ce) && mod2sparse_row(ce)==row)   { fprintf(stderr,"mod2sparse_insert: Garbled matrix\n");    exit(1);  }  if (mod2sparse_at_end(ce) || mod2sparse_row(ce)<row)   { ce = ce->down;  }  else  {    ce = mod2sparse_first_in_col(m,col);    for (;;)    {       if (!mod2sparse_at_end(ce) && mod2sparse_row(ce)==row)       { fprintf(stderr,"mod2sparse_insert: Garbled matrix\n");        exit(1);      }      if (mod2sparse_at_end(ce) || mod2sparse_row(ce)>row)      { break;      }       ce = mod2sparse_next_in_col(ce);    }  }      ne->up = ce->up;  ne->down = ce;  ne->up->down = ne;  ne->down->up = ne;  /* Return the new entry. */  return ne;}/* DELETE AN ENTRY FROM A SPARSE MATRIX. */void mod2sparse_delete( mod2sparse *m,  mod2entry *e){   if (e==0)  { fprintf(stderr,"mod2sparse_delete: Trying to delete a null entry\n");    exit(1);  }  if (e->row<0 || e->col<0)  { fprintf(stderr,"mod2sparse_delete: Trying to delete a header entry\n");    exit(1);  }  e->left->right = e->right;  e->right->left = e->left;  e->up->down = e->down;  e->down->up = e->up;   e->left = m->next_free;  m->next_free = e;}/* TEST WHETHER TWO SPARSE MATRICES ARE EQUAL. */int mod2sparse_equal( mod2sparse *m1,  mod2sparse *m2){  mod2entry *e1, *e2;  int i;  if (mod2sparse_rows(m1)!=mod2sparse_rows(m2)    || mod2sparse_cols(m1)!=mod2sparse_cols(m2))  { fprintf(stderr,"mod2sparse_equal: Matrices have different dimensions\n");    exit(1);  }    for (i = 0; i<mod2sparse_rows(m1); i++)  {     e1 = mod2sparse_first_in_row(m1,i);    e2 = mod2sparse_first_in_row(m2,i);    while (!mod2sparse_at_end(e1) && !mod2sparse_at_end(e2))    {        if (mod2sparse_col(e1)!=mod2sparse_col(e2))      { return 0;      }      e1 = mod2sparse_next_in_row(e1);      e2 = mod2sparse_next_in_row(e2);    }    if (!mod2sparse_at_end(e1) || !mod2sparse_at_end(e2))     { return 0;    }  }  return 1;}/* COMPUTE THE TRANSPOSE OF A SPARSE MOD2 MATRIX. */void mod2sparse_transpose( mod2sparse *m,	/* Matrix to compute transpose of (left unchanged) */  mod2sparse *r		/* Result of transpose operation */){  mod2entry *e;  int i;  if (mod2sparse_rows(m)!=mod2sparse_cols(r)    || mod2sparse_cols(m)!=mod2sparse_rows(r))  { fprintf(stderr,     "mod2sparse_transpose: Matrices have incompatible dimensions\n");    exit(1);  }  if (r==m)  { fprintf(stderr,      "mod2sparse_transpose: Result matrix is the same as the operand\n");    exit(1);  }  mod2sparse_clear(r);  for (i = 0; i<mod2sparse_rows(m); i++)  {    e = mod2sparse_first_in_row(m,i);    while (!mod2sparse_at_end(e))    { mod2sparse_insert(r,mod2sparse_col(e),i);      e = mod2sparse_next_in_row(e);    }  }}/* ADD TWO SPARSE MOD2 MATRICES. */void mod2sparse_add( mod2sparse *m1,	/* Left operand of add */  mod2sparse *m2,	/* Right operand of add */  mod2sparse *r		/* Place to store result of add */){  mod2entry *e1, *e2;  int i;  if (mod2sparse_rows(m1)!=mod2sparse_rows(r)    || mod2sparse_cols(m1)!=mod2sparse_cols(r)    || mod2sparse_rows(m2)!=mod2sparse_rows(r)   || mod2sparse_cols(m2)!=mod2sparse_cols(r))   { fprintf(stderr,"mod2sparse_add: Matrices have different dimensions\n");    exit(1);  }  if (r==m1 || r==m2)  { fprintf(stderr,     "mod2sparse_add: Result matrix is the same as one of the operands\n");    exit(1);  }  mod2sparse_clear(r);  for (i = 0; i<mod2sparse_rows(r); i++)  {     e1 = mod2sparse_first_in_row(m1,i);    e2 = mod2sparse_first_in_row(m2,i);    while (!mod2sparse_at_end(e1) && !mod2sparse_at_end(e2))    {       if (mod2sparse_col(e1)==mod2sparse_col(e2))      { e1 = mod2sparse_next_in_row(e1);        e2 = mod2sparse_next_in_row(e2);       }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区中文字幕| 亚洲一区二区在线免费观看视频| av福利精品导航| 午夜精品久久久久久久99水蜜桃| 国产欧美精品一区二区三区四区| 精品视频1区2区| 从欧美一区二区三区| 天天色 色综合| 中文字幕亚洲综合久久菠萝蜜| 日韩一区二区三区高清免费看看| 97精品国产露脸对白| 国产又黄又大久久| 天天操天天色综合| 一区二区三区美女视频| 国产三级一区二区| 欧美xxxxx裸体时装秀| 欧美日韩免费视频| 91污在线观看| 国产成人在线看| 黄色小说综合网站| 日本不卡一区二区三区高清视频| 亚洲日本在线视频观看| 国产欧美日韩在线看| 精品国精品国产尤物美女| 欧美一区二区性放荡片| 欧美日韩精品久久久| 91国偷自产一区二区开放时间| 成人国产精品免费观看视频| 国产一区二区三区在线观看免费视频 | 国产精品18久久久久久vr| 亚洲成人av一区二区| 亚洲色图在线看| 国产精品伦理一区二区| 国产偷国产偷亚洲高清人白洁| 2022国产精品视频| ww亚洲ww在线观看国产| 精品动漫一区二区三区在线观看| 欧美一区二区三区啪啪| 欧美一卡二卡三卡四卡| 91精品国产综合久久精品app | 国产在线精品视频| 久久不见久久见免费视频7| 久久国内精品自在自线400部| 热久久国产精品| 美女在线观看视频一区二区| 日韩高清不卡一区二区三区| 天天免费综合色| 久久国产精品99精品国产 | 一级女性全黄久久生活片免费| 亚洲天堂福利av| 亚洲综合在线电影| 五月综合激情日本mⅴ| 婷婷六月综合网| 免费观看在线综合| 国产一区91精品张津瑜| 成人午夜在线播放| 色综合久久中文综合久久97| 在线观看一区二区视频| 欧美精品99久久久**| 日韩精品专区在线影院观看| 国产三级精品在线| 亚洲乱码国产乱码精品精的特点| 一区二区高清免费观看影视大全| 午夜国产精品一区| 国产美女av一区二区三区| 成人app在线| 欧美日韩久久久| 日韩欧美高清在线| 中文字幕一区二区日韩精品绯色| 亚洲影院久久精品| 蜜臀久久久99精品久久久久久| 国产很黄免费观看久久| 色婷婷激情综合| 欧美成人一级视频| 亚洲天堂成人网| 蜜桃av一区二区| 97se狠狠狠综合亚洲狠狠| 欧美一区二区三区视频在线观看| 精品国产一区二区亚洲人成毛片 | 亚洲欧洲一区二区三区| 亚洲一区二区三区四区不卡| 奇米色777欧美一区二区| 成人黄动漫网站免费app| 色8久久人人97超碰香蕉987| 欧美一区二区在线免费播放| 国产欧美日韩中文久久| 午夜精品成人在线视频| 成人免费视频caoporn| 555夜色666亚洲国产免| 国产精品美女久久久久aⅴ| 亚洲国产精品一区二区www| 国产伦精品一区二区三区视频青涩| av成人免费在线| 日韩免费电影一区| 亚洲国产综合91精品麻豆| 国产成人在线观看免费网站| 欧美精品一级二级| 自拍偷拍亚洲欧美日韩| 精品一区二区三区香蕉蜜桃| 色94色欧美sute亚洲线路一ni| 久久综合久久鬼色中文字| 亚洲成人一二三| 91女人视频在线观看| 久久综合狠狠综合久久综合88| 亚洲福利一区二区| 99国产精品国产精品毛片| 久久新电视剧免费观看| 亚洲图片一区二区| 91视视频在线观看入口直接观看www | 国产酒店精品激情| 7777精品伊人久久久大香线蕉超级流畅 | 久久人人超碰精品| 美女视频一区二区| 欧美三片在线视频观看| 亚洲天堂中文字幕| 成人午夜视频福利| 久久久久久亚洲综合| 免费的成人av| 在线播放91灌醉迷j高跟美女 | 国产福利精品导航| 日韩精品在线看片z| 日韩经典中文字幕一区| 欧美艳星brazzers| 亚洲欧美乱综合| 97精品国产97久久久久久久久久久久| 国产网站一区二区三区| 韩日欧美一区二区三区| 日韩美一区二区三区| 蜜臀99久久精品久久久久久软件| 欧美日韩综合在线| 亚洲成人激情自拍| 欧美亚洲精品一区| 亚洲成人动漫精品| 欧美日韩国产高清一区二区| 亚洲在线成人精品| 欧美午夜片在线看| 午夜不卡在线视频| 91精品在线一区二区| 蜜臀精品一区二区三区在线观看 | gogogo免费视频观看亚洲一| 亚洲国产精品成人综合| 国产成人高清在线| 国产精品区一区二区三区| 国产成人综合视频| 亚洲欧美自拍偷拍色图| av不卡在线播放| 亚洲另类春色校园小说| 欧美性受xxxx黑人xyx性爽| 亚洲午夜电影在线观看| 7777精品伊人久久久大香线蕉经典版下载| 视频一区二区三区在线| 日韩欧美国产一区二区在线播放| 久久精品久久精品| 久久免费美女视频| 波多野结衣的一区二区三区| 亚洲欧美另类图片小说| 欧美三级韩国三级日本三斤| 男人的天堂亚洲一区| 久久综合五月天婷婷伊人| 岛国av在线一区| 一区二区在线观看视频在线观看| 欧美日韩日日骚| 国产一区二区三区不卡在线观看| 国产精品女主播av| 欧美日韩精品欧美日韩精品一 | 成人三级在线视频| 69堂精品视频| 国产黄人亚洲片| 亚洲日本韩国一区| 欧美精品一卡两卡| 国产一区二区电影| 亚洲精品日韩综合观看成人91| 欧美日韩黄色影视| 精品一区二区久久久| 亚洲欧美在线视频| 日韩限制级电影在线观看| 国产麻豆日韩欧美久久| 中文字幕在线一区| 69精品人人人人| 成人亚洲一区二区一| 亚洲欧美另类在线| 欧美精品一区二区久久久| av电影在线观看一区| 免费在线观看精品| 亚洲欧洲日韩综合一区二区| 欧美日本韩国一区二区三区视频| 国产精品一级二级三级| 亚洲午夜电影在线观看| 国产亚洲欧美色| 欧美图区在线视频| 成人avav影音| 激情欧美日韩一区二区| 亚洲高清三级视频| 国产精品免费丝袜| 日韩欧美中文字幕一区| 色综合天天在线| 韩日av一区二区| 视频一区二区三区在线| 亚洲欧美日韩中文播放| 国产人成亚洲第一网站在线播放 |