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

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

?? mod2sparse.cpp

?? 模擬cmmb系統(tǒng)中l(wèi)dpc譯碼的部分
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* MOD2SPARSE.C - Procedures for handling sparse mod2 matrices. *//* Copyright (c) 2000, 2001 by Radford M. Neal  * * Permission is granted for anyone to copy, use, modify, or distribute this * program and accompanying programs and documents for any purpose, provided  * this copyright notice is retained and prominently displayed, along with * a note saying that the original programs are available from Radford Neal's * web page, and note is made of any changes made to the programs.  The * programs and documents are distributed without any warranty, express or * implied.  As the programs were written for research purposes only, they have * not been tested to the degree that would be advisable in any important * application.  All use of these programs 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 = (mod2block*)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 = (mod2sparse *)chk_alloc (1, sizeof *m);  m->n_rows = n_rows;  m->n_cols = n_cols;  m->rows = (mod2entry *)chk_alloc (n_rows, sizeof *m->rows);  m->cols = (mod2entry *)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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产色综合久久不卡蜜臀| 欧美精品一区二区三区蜜臀 | 日韩欧美成人激情| 国产成人精品免费在线| 日韩av电影免费观看高清完整版| 国产精品麻豆99久久久久久| 日韩欧美一区在线| 日本韩国精品一区二区在线观看| 国产精品一区二区三区网站| 日韩一区精品字幕| 一级日本不卡的影视| 国产精品视频一二| 久久蜜桃一区二区| 日韩区在线观看| 69堂国产成人免费视频| 91麻豆国产自产在线观看| 国产精品主播直播| 蜜臀av性久久久久蜜臀aⅴ | 亚洲精品伦理在线| 中文字幕一区二区三区色视频| 久久综合网色—综合色88| 日韩一卡二卡三卡| 欧美一二三在线| 欧美一区二区三区视频在线观看 | 2023国产精品| 日韩一区二区三区四区| 欧美日本一区二区在线观看| 在线免费一区三区| 欧洲精品中文字幕| 日本久久精品电影| 在线欧美一区二区| 欧美在线影院一区二区| 色94色欧美sute亚洲线路一ni | 欧美哺乳videos| 91精品国产丝袜白色高跟鞋| 欧美精品第1页| 在线成人小视频| 欧美一区二区三区白人| 7777精品伊人久久久大香线蕉完整版| 欧美视频中文字幕| 在线播放欧美女士性生活| 制服丝袜成人动漫| 欧美电影免费观看高清完整版| 日韩一级完整毛片| 久久综合久久综合九色| 国产亚洲欧美激情| 国产精品电影一区二区三区| 一区二区中文字幕在线| 亚洲激情第一区| 亚洲电影视频在线| 日本va欧美va精品发布| 美国毛片一区二区| 国产成人午夜99999| 欧美大片日本大片免费观看| 日韩三级视频中文字幕| 欧美成人女星排行榜| 国产丝袜欧美中文另类| 国产精品日韩成人| 亚洲久草在线视频| 日韩专区欧美专区| 国产乱子伦一区二区三区国色天香| 国产成人综合在线播放| 91精品1区2区| 日韩欧美在线一区二区三区| 欧美激情在线一区二区三区| 亚洲精品乱码久久久久久日本蜜臀 | 9191成人精品久久| 26uuu亚洲综合色| 国产精品久久久久久久久快鸭 | 欧美亚洲另类激情小说| 欧美一区二区三区视频免费 | 国产在线观看一区二区| 成人妖精视频yjsp地址| 欧美优质美女网站| 欧美本精品男人aⅴ天堂| 国产精品久久久爽爽爽麻豆色哟哟| 夜夜操天天操亚洲| 精品一区精品二区高清| 96av麻豆蜜桃一区二区| 日韩色在线观看| 亚洲图片欧美激情| 美女网站一区二区| 97久久久精品综合88久久| 欧美一级日韩免费不卡| 日韩美女视频19| 奇米影视在线99精品| 93久久精品日日躁夜夜躁欧美| 91精品麻豆日日躁夜夜躁| 国产精品久久久久久福利一牛影视| 视频一区二区不卡| 成年人国产精品| 欧美一二三四区在线| 亚洲码国产岛国毛片在线| 国产伦精品一区二区三区视频青涩 | 国产精品久久福利| 美女视频黄a大片欧美| 国产三级一区二区三区| 亚洲成人高清在线| 99精品国产一区二区三区不卡| 精品国产免费视频| 亚洲成a人v欧美综合天堂| 99视频国产精品| 久久精品亚洲精品国产欧美| 五月婷婷另类国产| 色综合天天天天做夜夜夜夜做| 久久一日本道色综合| 午夜电影网亚洲视频| 91极品美女在线| 国产精品盗摄一区二区三区| 国产综合成人久久大片91| 在线播放/欧美激情| 亚洲线精品一区二区三区| 99久久99久久综合| 国产午夜精品美女毛片视频| 久久精品国产亚洲高清剧情介绍 | 中文字幕欧美激情一区| 黑人精品欧美一区二区蜜桃 | 久久久国产午夜精品| 美女任你摸久久| 欧美电影免费观看高清完整版在 | 色妞www精品视频| 国产精品二三区| av在线不卡免费看| 中日韩av电影| 国产成人激情av| 国产无一区二区| 风流少妇一区二区| 国产精品视频看| 波多野结衣91| 亚洲欧美综合网| 色狠狠综合天天综合综合| 亚洲欧美aⅴ...| 欧美性色综合网| 亚洲国产欧美日韩另类综合| 欧美亚洲一区二区在线| 亚洲国产一区二区在线播放| 精品视频在线视频| 肉色丝袜一区二区| 91精品国产色综合久久不卡蜜臀 | 秋霞成人午夜伦在线观看| 91精品国产综合久久久久久久| 丝袜美腿高跟呻吟高潮一区| 欧美一区三区二区| 紧缚奴在线一区二区三区| 欧美精品一区男女天堂| 国产电影一区二区三区| 亚洲国产精品黑人久久久| 91女人视频在线观看| 亚洲一二三级电影| 欧美一区二区观看视频| 狠狠色丁香婷综合久久| 国产亚洲欧美一级| 成人aaaa免费全部观看| 一区二区三区国产豹纹内裤在线 | 国产精品嫩草影院com| 91色婷婷久久久久合中文| 亚洲图片有声小说| 日韩视频一区二区在线观看| 国产成人免费视频精品含羞草妖精| 国产精品久久一级| 欧美四级电影网| 国内精品视频一区二区三区八戒| 中文字幕av免费专区久久| 欧美亚洲高清一区| 欧美三级电影网站| 精彩视频一区二区三区| 国产精品久久久久久妇女6080| 欧美在线视频你懂得| 激情六月婷婷综合| 亚洲狠狠丁香婷婷综合久久久| 7777精品伊人久久久大香线蕉| 国产一区二区三区最好精华液| 亚洲欧洲成人精品av97| 91精品国产综合久久福利| 高清av一区二区| 五月激情综合色| 亚洲国产精品传媒在线观看| 欧美日韩不卡一区| 国产成人精品影视| 午夜伦欧美伦电影理论片| 久久久久久久久伊人| 欧美在线视频全部完| 国产精品69毛片高清亚洲| 亚洲成人动漫av| 国产精品三级久久久久三级| 欧美一区二区三区人| 99re在线视频这里只有精品| 久久99精品久久久| 亚洲综合在线免费观看| 国产欧美日韩一区二区三区在线观看 | 伊人婷婷欧美激情| 久久久久久97三级| 欧美日韩亚州综合| 99国产精品久久久久久久久久久| 麻豆精品在线看| 一区二区在线观看免费 | 亚洲精品乱码久久久久久久久| 久久一区二区三区四区| 69av一区二区三区| 在线免费观看日本欧美|