霍纳法则——高维聚合,高效查询,应用场景分析(提供python算法可复现)


 

给自己定的小目标一个月至少写两篇博客

霍纳法则(Horner Rule)博客上之前有介绍原理,点击此处,本篇会给出更为详细讲解以及实现过程,并给出python代码复现

1霍纳法则介绍

对于多项式:

2e82974bc1e24a2f93a0040c7d1243e5.png

计算计算开销为:平方(乘法计算)1+2+3+........+n需要eq?%5Cfrac%7Bn*%28n-1%29%7D%7B2%7D次。加法: n次。

提取公因数x得:

d31f28dcf5d74315ab5bee0fd63eb94a.png
点击此处乘法和加法开销都为n次
 

2多维向量打包解包

9a66731673514cba9231d711a6e3c603.jpeg

 

3有限域上的多项式乘法

在一些密码学算法中,如椭圆曲线密码学中,需要在有限域上进行多项式的乘法运算。假设我们有两个多项式:

 

𝑃(𝑥)=3𝑥2+2𝑥+5       𝑄(𝑥)=4𝑥+1    

我们要计算它们的乘积 eq?%28P%28x%29%20%5Ccdot%20Q%28x%29%29在有限域eq?%28GF%287%29%29上的结果。(这里的有限域你可以简单理解成0到6,任何数模7只会得到这些数)

使用霍纳法则进行多项式乘法:

  1. 将 (P(x)) 重写为霍纳形式:eq?%28P%28x%29%20%3D%205%20+%20x%282%20+%20x%283%29%29%29
  2. 将 (Q(x)) 重写为霍纳形式:eq?%28Q%28x%29%20%3D%201%20+%204x%29
  3. 将霍纳形式的 (P(x)) 和 (Q(x)) 相乘,并在有限域 (GF(7)) 上进行运算。

计算结果:

  1. 计算 eq?%28P%28x%29%20%5Ccdot%20Q%28x%29%29的常数项:eq?%285%20%5Ctimes%201%20%3D%205%29
  2. 计算 eq?%28P%28x%29%20%5Ccdot%20Q%28x%29%29的一次项系数:eq?%282%20%5Ctimes%201%20+%203%20%5Ctimes%204%20%3D%202%20+%205%20%3D%207%20%5Cequiv%200%20%5Cpmod%7B7%7D%29
  3. 计算 eq?%28P%28x%29%20%5Ccdot%20Q%28x%29%29的二次项系数:eq?%283%20%5Ctimes%201%20%3D%203%29

因此,eq?P%28x%29%20%5Ccdot%20Q%28x%29%20%3D%203x%5E2 在有限域 (GF(7)) 上的结果为 eq?3x%5E2+5

 

4多维聚合计算,节约存储
 


当需要计算一段数据:eq?%281%2C22%2C33%2C15%2C22%2C1%2C6%2C3%2C5%2C9%29eq?%281%2C27%2C33%2C63%2C22%2C1%2C6%2C37%2C5%2C9%29的内积可以利用霍纳函数打包之后计算,同时计算之后可以以霍纳形式存储

5python演示代码

以x=5举例:


#霍纳法则打包
def vector_pack(vectors):
    # 获取向量的维度
    n = len(vectors)
    # 初始化结果变量
    result = 0
    # 遍历所有向量

    num = 0
    for i in range(n):
        num += vectors[i] * (5 ** (n - i - 1))
    # 使用霍尔法则实现打包操作
    packed_vector = (result + num)
    # result = (result + num) % (2 ** n)
    return packed_vector

def decrypt_pack(decrypted_vector):
    dec_num = decrypted_vector[0]
    binary_list = []
    while dec_num > 0:
        binary_list.append(str(dec_num % 5))
        dec_num //= 5
    bin_str = ''.join(binary_list[::-1])

    binary_list = [int(bit) for bit in bin_str]
    print(binary_list)
    return binary_list

大家可以动手写写
创作不易请给博主点点赞吧

 

6.5分享

有人问我多维聚合打包具体在哪块实现,这边再说一下

 

4大整数加密算法打包

比较好的例子是paillier同态算法,(具体算法可以参考我上一篇博客)算法加密出来的数是大整数,但开销较大。如果要加密向量的每一位,例如(1.1.20)每一位都要加密开销太大了,可以先用霍纳打包完之后,再加密进行同态计算,最后解密解码。具体流程如下

 

  1. 霍纳规则打包:首先,我们需要将多维向量通过霍纳规则转换为一个整数。例如,对于向量 [1, 1, 20][1,1,20],在假设每一位都在0到99的范围内,我们可以将其转换为整数 21102110。

  2. 加密打包后的整数:使用Paillier加密算法对打包后的整数进行加密。

  3. 同态计算:在加密状态下进行计算,例如将加密的向量与一个标量相乘。

  4. 解密和解码:最后,解密计算结果并使用霍纳规则将其转换回原始的向量格式。

 

 

除霍纳外还有如超递增序列等方法优化多维向量的同态算法的实现,感兴趣可以下去了解下这方面知识

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值