⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compact.h

📁 早期freebsd实现
💻 H
字号:
/* This may look like C code, but it is really -*- C++ -*- *//* Compact a sparse 2-D matrix.  Uses the Tarjan and Yao algorithm   taken from the article ``Storing a Sparse Table'' in CACM, 1979.   Copyright (C) 1989 Free Software Foundation, Inc.   written by Douglas C. Schmidt (schmidt@ics.uci.edu)      This file is part of GNU TRIE-GEN.      GNU TRIE-GEN is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 1, or (at your option)   any later version.      GNU TRIE-GEN is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.      You should have received a copy of the GNU General Public License   along with GNU trie-gen; see the file COPYING.  If not, write to   the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. *//* This really should go in the class scope, but alas g++ doesn't like that... */typedef int ITEM_TYPE;class Compact_Matrix{public:              Compact_Matrix (ITEM_TYPE *mat, int rows, int cols);              Compact_Matrix (int default_rows = 0);  ITEM_TYPE   operator () (int i, int j);  void        operator () (int i, int j, ITEM_TYPE value);  void        output (void);private:  void init(int rows);  struct Column_Node    {      int            index; /* Actual column index in the current row. */      ITEM_TYPE      value; /* Value at this index location. */      Column_Node   *next;  /* Pointer to next column in the row. */      Column_Node (Column_Node *p, int i, ITEM_TYPE v)	  : index (i), value (v), next (p) { }    };  struct Row_Node    {      Column_Node   *col_list; // List of column index values for this row.      int            count;    // Count of total number of columns in the list.      Row_Node() { col_list = 0; count = 0; }    };  const int     MAX_INT            = ~unsigned (0) >> 1;  const int     MAX_SIGNED_CHAR    = 127;  const int     MAX_ASCII_RANGE    = 128;  const int     MAX_SIGNED_SHORT   = 32767;  const int     MAX_UNSIGNED_CHAR  = 255;  const int     MAX_UNSIGNED_SHORT = 65535;  int           max_col_count;   /* Total number of columns in largest row. */  int           total_cols;      /* Total number of columns in the matrix (if applicable). */  int           total_entries;   /* Total number of non-null entries in the matrix. */  int           compressed_len;  /* Size of the compacted matrix buffer. */  int          *row_offsets;     /* Dynamic buffer used for double-offset indexing. */  int          *checks;          /* Dynamic buffer used for double-offset indexing. */  int           current_rows;    /* Current items in ROW_VEC, at this point. */  int           max_rows;        /* Maximum size of ROW_VEC, at this point. */  Row_Node     *row_vec;         /* Dynamic buffer indexed by row number. */  Column_Node **bucket_vec;      /* Dynamic buffer used to sort by column count. */  ITEM_TYPE    *values;          /* Dynamic buffer containing non-null matrix values. */  ITEM_TYPE    *matrix;          /* Pointer to 2-D matrix (if appropriate). */    void          resize (int new_size);  void          first_fit_decreasing (void);  void          bucket_sort (void);  void          output_lookup (void);  void          output_arrays (void);  void          dump_entries (void);  void          dump_bucket (void);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -