问题来自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
c1
到ck
的{{1}} 相应地是k
候选人的投票数。 和以前一样,这个解决方案需要搜索可能的 组合,但当然预先计算(更多 可能)组合可以提高速度。
基本上给定v的总和,如何找到c,使得这个等式成立:
其中k是候选者的数量,m是最小的整数,使得2 ^ m> 2。最多票数。
在限制搜索空间方面可能有用的一些事情:
答案 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();
}
});
});
的系统中的数字,并且每个数字只是相应候选人的投票数。