求解等于编码总和的变量

时间:2018-05-18 12:31:05

标签: algorithm math

问题来自here

  

处理多个候选人的首选方法是使用   因为Baudron等人的方法。 [16]:假设我们有   n选民,选择m使得m是这样的最小整数   2 ^ m> ñ。现在,对候选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 c1ck的{​​{1}}   相应地是k候选人的投票数。   和以前一样,这个解决方案需要搜索可能的   组合,但当然预先计算(更多   可能)组合可以提高速度。

基本上给定v的总和,如何找到c,使得这个等式成立:

equation

其中k是候选者的数量,m是最小的整数,使得2 ^ m> 2。最多票数。

在限制搜索空间方面可能有用的一些事情:

  • max(c)=记录的投票数
  • 有一组独特的c,等于某些和,v
  • c的总和< =记录的投票数

1 个答案:

答案 0 :(得分:1)

条件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
}

这应该有效,因为条件2^m > n确保ci <= n因为ci < 2^m这么过分2^m因此无法溢出&#34;。基本上,这里的想法是将投票计数表示为具有大量function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode != 46 && (charCode < 48 || charCode > 57))) return false; return true; } $(document).ready(function() { $(document).on("keyup", ".Qty", calculateTot); $("button").click(function() { addrow('tb') }); }); function calculateTot() { var sum = 0; var price = document.getElementById('itemPrice').value; var qtyPur = parseFloat(this.value); $(".Qty").each(function() { if (!isNaN(this.value) && this.value.length != 0) { linePR = price * qtyPur; } }); $("#linePrice").val(linePR.toFixed(2)); calculateSum(); } function calculateSum() { var sum = 0; $(".linePrice").each(function() { if (!isNaN(this.value) && this.value.length != 0) { sum += parseFloat(this.value); } }); $("#priceTotal").val(sum.toFixed(2)); } $(document).ready(function() { var i = 1, j = 1; $("#add_row").click(function() { if (i < 10) { $('#addr' + i).html("<td>" + (i + 1) + "</td><td><b>Select Item</b></td><td colspan='1'><select name='Sub_Name" + i + "' class='form-control'><option value=''>Select Item</option><option value='1000001'>Item A</option><option value='1000002'>Item B</option><option value='1000003'>Item C</option><option value='1000004'>Item D</option></select></td><td><input type='text' name='itemPrice" + i + "' id='itemPrice" + j + "' class='itemPrice form-control' placeholder='Unit Price'></td><td><input type='number' name='Qty" + i + "' id='Qty" + j + "' class='Qty form-control' onkeypress='return isNumberKey(event)' placeholder='Quantity'></td><td><input type='text' name='linePrice" + i + "' id='linePrice" + j + "' class='linePrice form-control' onkeypress='return isNumberKey(event)' placeholder='Line Price' readonly></td>"); $('#tab_add').append('<tr id="addr' + (i + 1) + '"></tr>'); i++; j++; $('#delete_row').show(); } else { alert("You can only add upto a maximum of 10 items") $('#add_row').hide(); } }); $("#delete_row").click(function() { if (i > 1) { var r = confirm('Do you want to delete this item?'); if (r == true) { $("#addr" + (i - 1)).html(''); i--; $('#add_row').show(); } } else { alert("Entry cannot be deleted") $('#delete_row').hide(); } }); });的系统中的数字,并且每个数字只是相应候选人的投票数。