GF(2^8)下查表实现多项式乘法
文章目录
- 前言
- 一、代码实现
- 1.引入库
- 定义各类型的数组
- 函数的声明与定义
- 函数主体
- 总结
前言
`有限域的出现,使得多项式的乘法可以通过查表得到加速。本文就介绍了基于有限域GF(2^8)的查表乘法功能,包括RS码的信息位矩阵与范德蒙德矩阵的相乘。
一、代码实现
1.引入库
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS //关闭安全检查
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define max 255
定义各类型的数组
代码如下(示例):
int table[256]; //正表数组,下标就是生成元g的指数,取值范围为 [0, 254]。下标对应元素就是g^k得到的多项式值。取值范围为[1, 255]。
int arc_table[256]; //反表数组 下标就是g^k得到的多项式值,取值范围为 [1, 255]。下标对应的元素就是生成元g 的指数,取值范围为 [0, 254]。
int a[max][max]; //范德蒙德矩阵
int b[1][max]; //信息位矩阵
int c[1][max]; //冗余位矩阵
函数的声明与定义
void juzhen1(int n);
void juzhen2(int m);
void juzhencheng(int k);
int mul(int x, int y);void juzhen1(int n)
{int m;for (int i = 0; i < n; i++){scanf("%d", &m);b[0][i] = m;}
}void juzhen2(int m) //以三列范德蒙德矩阵为例
{int i, j;int d[3];d[0] = 1; d[1] = 2; d[2] = 4;for (i = 0; i < m; i++){for (j = 0; j < 3; j++){a[i][j] = pow(d[j], i);}}
}void juzhencheng(int k)
{for (int i = 0; i < k; i++){int sum = 0;for (int j = 0; j < k; j++){sum += mul(b[0][j], a[j][i]);}c[0][i] = sum;}
}int mul(int x, int y)
{if (!x || !y)return 0;return table[(arc_table[x] + arc_table[y]) % 255];
}
函数主体
void main()
{int i;table[0] = 1;//g^0for (i = 1; i < 255; ++i)//生成元为x,对应本原多项式x^8 + x^4 + x^3 + x^2 + 1。{//下面是table[i] = table[i-1] * xtable[i] = table[i - 1] << 1; //相等于乘2,这里可以提高运算速度if (table[i] & 0x100) //如果数大于256,需要进行模运算{table[i] ^= 0x11D;//x11D就是 2^8 + 2^4 + 2^3 + 2^2 + 1 }}for (i = 0; i < 255; ++i)arc_table[table[i]] = i;/*printf(" ***");for (int j = 1; j < 255; j++){printf(" %4d", arc_table[j]);if (j%15==0)printf("\n");}*/for (i = 1; i < 256; ++i)//0没有逆元,所以从1开始{int k = arc_table[i];k = 255 - k;k %= 255;//使取值范围限定在[0,254]之间inverse_table[i] = table[k];}juzhen1(3);juzhen2(3);juzhencheng(3);printf("%d %d %d", c[0][0], c[0][1], c[0][2]);}
总结
以上就是今天要讲的内容,本文仅仅简单介绍基于有限域的多项式查表乘法,以及简单RS编码中的信息位矩阵与范德蒙德矩阵相乘得到冗余矩阵的操作。
但由于一个数据块还要涉及里面单个符号的问题,且unsigned char类型数据的范围为0-255,正好可以用在GF(2^8)下多项式值的表示。所以限制数据类型为unsigned char更为合适,具体操作留待读者自行实现。
GF(2^8)下查表实现多项式乘法相关推荐
- 线性表实现多项式相加c语言,用线性表实现多个多项式相加
今天开始想复习一下数据结构,就从线性表开始吧. 今天是用线性表实现多个多项式相加这个题目,自变量是x. 题目描述如下: 在数学上,一个一元多项式Pn(x)可按降幂写成:Pn(x) = pn x^n + ...
- 行逻辑连接的顺序表实现稀疏矩阵乘法
行逻辑连接顺序表 采用一位三元结构体组记录的每一个元素在矩阵中的具体位置,采用一维数组记录每行第一个非元素的位置,具有记录行数,列数和非元素总个数的结构体成员变量. 算法思想 逐行求积,每次处理一行, ...
- 顺序表讲解和顺序表实现增删查改
前言 顺序表是一种参见的数据结构 特点:类似数组的储存,需要预先开辟空间已备数据插入.(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了 ...
- 邻接表实现的有向带权图 及 图算法(C++)
邻接表实现的有向带权图 相关概念 声明和定义 实现 1. 构造函数 2. 析构函数 3. 深度优先遍历 4. 广度优先遍历 5. 获取顶点在邻接表中对应的下标 6. 添加顶点 7. 移除顶点 8. 添 ...
- 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc
图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题*/ //算法实现: #include #include #define MAX 2 ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...
图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...
- 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言)
图的邻接表实现迪杰斯特拉算法(C语言). 迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题. 图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是 ...
- c语言哈希表电子辞典_C语言实现的哈希表实现程序
下面我们一起来看一个C语言实现的哈希表实现程序了,这个程序没有过多的说明只是一个例子,大家有兴趣可以进入看看或测试一下. 为了巩固一下链表知识,自己实现的一个哈希表,在GCC 4.4.7下编译通过: ...
- WPS技巧之保护工作表实现允许部分单元格输入内容
WPS技巧之保护工作表实现允许部分单元格输入内容 WPS表格中保护工作表的作用是设定密码,其它人员可以查看工作表的数据,但对工作表单元格里面内容默认没有办法修改,但是如果想对工作表中某些单元格进行修改 ...
最新文章
- Mysql-cobar集群安装部署手册
- Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序
- 一点通路由器模拟软件最新版_驾校宝典通最新版2020下载-驾校宝典通手机版 v1.0.2免费版...
- CNN目标检测(一):Faster RCNN详解
- java中的左值右值_利用左值右值实现树状结构
- 00003-回文数的判定-leetcode-解法不唯一,1.reverse最简单,2.数学方法很有意思
- 今天的西红柿就跑了的P8U8源码
- CodeIgniter中引用某一个表情(smiley)
- SqlHelper操纵数据库工具类
- java 高德地图 车型比价计算_高德地图的高速公路过路费计算功能是如何实现的?有相应开放的API吗?...
- 求数组子序列和最大值
- 全网最完整金融时间序列模型+动态模型
- 企业邮箱账号,如何在foxmail上创建
- 连接数据库出现错误代码为18456
- Chrome 火焰图
- Flutter 开发错误集合二
- 手把手教你搭建SpringBoot+MySQL+Mybatis项目(采坑日记)
- 军犬舆情每日热点:LIGO发现最大黑洞;智能锁广告侮辱拆弹战士
- 搜狗拼音皮肤 php文件,手把手教你制作搜狗输入法皮肤
- 服务器环境(插件)搭建