M4RI 1.0.1
|
00001 00014 #ifndef BRILLIANTRUSSIAN_H 00015 #define BRILLIANTRUSSIAN_H 00016 /******************************************************************* 00017 * 00018 * M4RI: Linear Algebra over GF(2) 00019 * 00020 * Copyright (C) 2007, 2008 Gregory Bard <bard@fordham.edu> 00021 * Copyright (C) 2008-2010 Martin Albrecht <martinralbrecht@googlemail.com> 00022 * 00023 * Distributed under the terms of the GNU General Public License (GPL) 00024 * version 2 or higher. 00025 * 00026 * This code is distributed in the hope that it will be useful, 00027 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00028 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00029 * General Public License for more details. 00030 * 00031 * The full text of the GPL is available at: 00032 * 00033 * http://www.gnu.org/licenses/ 00034 * 00035 ********************************************************************/ 00036 00037 #include <math.h> 00038 #include <string.h> 00039 #include <stdlib.h> 00040 00041 #include "misc.h" 00042 #include "packedmatrix.h" 00043 #include "permutation.h" 00044 00059 void mzd_make_table( mzd_t *M, size_t r, size_t c, int k, mzd_t *T, size_t *L); 00060 00079 void mzd_process_rows(mzd_t *M, size_t startrow, size_t endrow, size_t startcol, int k, mzd_t *T, size_t *L); 00080 00098 void mzd_process_rows2(mzd_t *M, size_t startrow, size_t endrow, size_t startcol, int k, mzd_t *T0, size_t *L0, mzd_t *T1, size_t *L1); 00099 00119 void mzd_process_rows3(mzd_t *M, size_t startrow, size_t endrow, size_t startcol, int k, 00120 mzd_t *T0, size_t *L0, mzd_t *T1, size_t *L1, 00121 mzd_t *T2, size_t *L2); 00122 00144 void mzd_process_rows4(mzd_t *M, size_t startrow, size_t endrow, size_t startcol, int k, 00145 mzd_t *T0, size_t *L0, mzd_t *T1, size_t *L1, 00146 mzd_t *T2, size_t *L2, mzd_t *T3, size_t *L3); 00147 00148 00172 void mzd_process_rows5(mzd_t *M, size_t startrow, size_t endrow, size_t startcol, int k, 00173 mzd_t *T0, size_t *L0, mzd_t *T1, size_t *L1, 00174 mzd_t *T2, size_t *L2, mzd_t *T3, size_t *L3, 00175 mzd_t* T4, size_t *L4); 00176 00202 void mzd_process_rows6(mzd_t *M, size_t startrow, size_t endrow, size_t startcol, int k, 00203 mzd_t *T0, size_t *L0, mzd_t *T1, size_t *L1, 00204 mzd_t *T2, size_t *L2, mzd_t *T3, size_t *L3, 00205 mzd_t* T4, size_t *L4, mzd_t *T5, size_t *L5); 00206 00231 size_t _mzd_echelonize_m4ri(mzd_t *A, const int full, int k, int heuristic, const double threshold); 00232 00244 void mzd_top_echelonize_m4ri(mzd_t *M, int k); 00245 00261 size_t _mzd_top_echelonize_m4ri(mzd_t *A, int k, size_t r, size_t c, size_t max_r); 00262 00281 mzd_t *mzd_invert_m4ri(mzd_t *M, mzd_t *I, int k); 00282 00300 mzd_t *mzd_mul_m4rm(mzd_t *C, mzd_t *A, mzd_t *B, int k); 00301 00302 00319 mzd_t *mzd_addmul_m4rm(mzd_t *C, mzd_t *A, mzd_t *B, int k); 00320 00346 mzd_t *_mzd_mul_m4rm(mzd_t *C, mzd_t *A, mzd_t *B, int k, int clear); 00347 00352 #define M4RM_GRAY8 00353 00354 #endif //BRILLIANTRUSSIAN_H