博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性基
阅读量:4709 次
发布时间:2019-06-10

本文共 1737 字,大约阅读时间需要 5 分钟。

template 
class LnBase {public: int sz, szc; T *x; int *y; LnBase() { x = 0, sz = sizeof(T) << 3; szc = -1, resize(sz); } void resize(int size) { sz = size; if (!x) delete (x); x = new T[sz + 2]; y = new int[sz + 2]; memset(x, 0, sz * sizeof(T)); memset(y, 0, sz << 2); } T operator[](int h) { return x[h]; } //增加一个向量,若该向量能被已有向量线性表示,返回-1;否则返回该向量增加的是哪一个维度 int add(T v) { for (int i = sz - 1; i >= 0; i--) if (v & (T)1 << i) { if (!x[i]) { x[i] = v; szc = -1; return i; } v ^= x[i]; } return -1; } //若该向量能被已有向量线性表示,返回1;否则返回0 int find(T v) { for (int i = sz - 1; i >= 0; i--) { if (v & (T)1 << i && x[i]) v ^= x[i]; if (!v) return 1; } return 0; } //线性基能表示出的最大向量 T max() { T s = 0; for (int i = sz - 1; i >= 0; i--) { if ((s ^ x[i]) > s) s ^= x[i]; } return s; } //线性基能表示出的最小向量,为空返回-1 T min() { for (int i = 0; i < sz; i++) if (x[i]) return x[i]; return -1; } //矩阵标准化 void canonicity() { for (int i = sz - 1; i > 0; i--) for (int j = i - 1; j >= 0; j--) if (x[i] & (T)1 << j) x[i] ^= x[j]; for (szc = i = 0; i < sz; i++) if (x[i]) y[szc++] = i; } //线性基能表示出的第k大的向量 T kth(long long K) { if (szc < 0) canonicity(); if (K >= 1ll << szc) return -1; T s = 0; for (int i = szc - 1; i >= 0; i--) if (K & 1ll << i) s ^= x[y[i]]; return s; }};

 

转载于:https://www.cnblogs.com/dramstadt/p/9107081.html

你可能感兴趣的文章
源码分析之AsyncTask
查看>>
C#查询XML解决“需要命名空间管理器”问题
查看>>
C语言-一个fopen函数中未使用二进制模式(b)引发的血案
查看>>
CGI FastCGI PHP-CGI PHP-FRM
查看>>
记录一个glibc 导致的段错误以及gdb 移植
查看>>
pthread_create用法(转)
查看>>
ffmpeg源码分析二:main函数和transcode函数 (转2)
查看>>
How to load helpers in model class
查看>>
Zabbix-2.4-安装-2
查看>>
spotlight工具监控oracle
查看>>
数据集成工具:Teiid实践
查看>>
寒假集训【1.28】
查看>>
Tengine编译安装config项目清单
查看>>
产品经理聊产品--mac book pro 2018 初体验
查看>>
可以进行SHA-1,SHA-224,SHA-256,SHA-384,SHA-512五种算法签名的工具类,以及简单说明
查看>>
c#进程间通讯方案之IPC通道
查看>>
CSS3分享按钮动画特效
查看>>
[BT5]信息收集1-1 Dnsenum
查看>>
tf.reduce_mean
查看>>
IDA相关下载
查看>>