Algorithm 求解等于编码和的变量
问题出在 处理多个候选人的首选方法是使用 方法,因为Baudron等人[16]:假设我们 n选民,选择m,使m是最小的整数 2^m>n。现在,候选人1的投票编码为2^0 对于 候选2为2^m,候选3为2^(2*m),依此类推。在里面 换句话说,将(1)重新定义为 制表法和以前一样: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
π(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
是可逆的。您没有指定您的环境,所以我将使用一些C风格的伪代码ci
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位)。我认为最好使用一些大整数库。