Algorithm 求解等于编码和的变量

Algorithm 求解等于编码和的变量,algorithm,math,Algorithm,Math,问题出在 处理多个候选人的首选方法是使用 方法,因为Baudron等人[16]:假设我们 n选民,选择m,使m是最小的整数 2^m>n。现在,候选人1的投票编码为2^0 对于 候选2为2^m,候选3为2^(2*m),依此类推。在里面 换句话说,将(1)重新定义为 制表法和以前一样:π(g^xi*yi)*g^vi=g^∑vi。这个 选票总数和超增长性质 编码确保可以明确地确定总数 解析为候选人的总数。因此,, ∑vi=2^0*c1+2^m*c2+…+2^(k-1)m*ck其中c1至ck 是相应的k

问题出在

处理多个候选人的首选方法是使用 方法,因为Baudron等人[16]:假设我们 n选民,选择m,使m是最小的整数 2^m>n。现在,候选人1的投票编码为2^0 对于 候选2为2^m,候选3为2^(2*m),依此类推。在里面 换句话说,将(1)重新定义为

制表法和以前一样:
π(g^xi*yi)*g^vi=g^∑vi
。这个 选票总数和超增长性质 编码确保可以明确地确定总数 解析为候选人的总数。因此,,
∑vi=2^0*c1+2^m*c2+…+2^(k-1)m*ck
其中
c1
ck
是相应的
k
候选人的票数。 与以前一样,这一解决方案需要对可能的问题进行搜索 组合,但当然预计算超过(更多 很可能)组合会加快这一速度

基本上给定v的和,如何找到c,使这个方程成立:

其中k是候选人的数量,m是最小的整数,即2^m>最大投票数

一些可能有助于限制搜索空间的内容:

  • 最高(c)=记录的投票数
  • 有一组唯一的c等于某个和,v

  • c的和条件
    2^m>n
    对于公式的建立至关重要

    Σvi = 2^0 * c1 + 2^m * c2 + ... + 2^(k-1)m * ck
    
    从总和到
    ci
    是可逆的。您没有指定您的环境,所以我将使用一些C风格的伪代码

    tmp = sum;
    p = power(2,m);
    for(i = 0; i< k; i++) {
        c[i] = tmp % p; // i.e. calculate reminder, often also called mod
        tmp = tmp / p;  // whole division on (big) integers
    }
    
    tmp=sum;
    p=功率(2,m);
    对于(i=0;i

    这应该是可行的,因为条件
    2^m>n
    确保了
    ci即使在非常小的投票中,您也将获得超过64位的整数(例如英国补选,可能是<2^16选民,但可能是10名候选人,因此您需要160位)。我认为最好使用一些大整数库。