【问题标题】:How to calculate the permutation of a bit vector?如何计算位向量的排列?
【发布时间】:2013-06-20 13:02:56
【问题描述】:

给定一个位向量 V = (101101) 和一个置换函数:F(x) = (a*x + b) mod p。其中a和b是随机数,p是素数。如何计算向量 V 的排列? F(x) 是否将 V 作为一个完整的值,还是应该将 V 中的每个位用作函数的 x?

【问题讨论】:

  • 你的背景是什么?位向量是否表示二进制数?
  • @greyfairer 不,它只是一个位向量
  • 使用该函数对位向量进行排列对我来说没有意义。如果它是置换矩阵乘法之类的,那将是有意义的......
  • 通常标量乘法/向量加法意味着将数字与 / 相乘/加到每个元素,但这在谈论二进制时没有任何意义。如果 ab 也是向量,那么它可能是有意义的。如果我猜的话,我会说你应该将位向量视为位所代表的数字。

标签: algorithm permutation


【解决方案1】:

是的,为了置换位向量,然后取每个位并对其应用置换函数。

【讨论】:

    【解决方案2】:

    在该定义中,置换函数为向量中的每个条目提供新位置。例如。对于 a=2, b=0, p=7,函数给出 {0,1,2,3,4,5,6}->{0,2,4,6,1,3,5}。

    使用此函数,可以置换任何包含 7 个元素的向量,将 {a,b,c,d,e,f,g} 转换为 {a,c,e,g,b,d,f}。

    这仅在向量的大小等于素数 p 时才有效。因此,对于位向量,将位置 n 处的每个元素移动到位置 a*n+b mod p。

    这也适用于非素数 p,只要 a 和 b 与 p 互质。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 2020-01-08
      • 2022-01-13
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      相关资源
      最近更新 更多