Tag: 空间复杂度

C中的二元向量和矩阵操作

我试图在C中实现一个数据结构,这将允许我有效地操作**二进制**矩阵(仅包含1或0)。 我将解释我必须对此矩阵应用哪些操作,并想知道使用哪种最佳数据结构? 操作在字段F_2中完成(这意味着1 + 1 = 0,其他操作保持不变)。 我有一个叫做H k * n矩阵( k < n )。 最多, k = 2325, n = 3009。 我必须对此矩阵执行的操作是: 我将仅使用行交换和行添加来部分对角化它。 一旦完成,我将不再使用行操作,并将在此矩阵上运行大量(!)列添加 (我的意思是“很多”是关于((nk)/ 2)³列添加) 我正在考虑矩阵的数据结构: 对于矩阵系数,我考虑在一个单个unsigned int中一次存储多个位的序列。 例如,我可以将序列(11001011)存储到uint8_t 203 (从二进制转换为十进制) 这是个好主意吗 ? 如果我这样做,我有两个选择: 我可以使用uint16_t或uint64_t系数在许多4 * 4或8 * 8子矩阵中分割我的矩阵H. 这是一个很好的选择(在时间效率方面),如果是,是否更好地使用uint16_t或uint64_t ? 另外我在考虑将每一行存储在多个uint32_t或uint64_t ,然后操作我的部分对角化。 接下来切换到将矩阵编码为n列向量以处理剩余操作的结构。 你认为这更有效吗? 无论我使用什么方法,我都必须有效地访问unsigned int的第n位( uint16或64 )。 我怎么做 ?