模拟实时投票的算法

时间:2016-02-12 15:42:50

标签: algorithm d3.js

我想编写一个算法来模拟实时投票。

观众有4种不同的投票方式。我想象了每个选项a,b,c,d的百分比。

所以我提出了一个算法,它会给我一个包含4个随机数的数组,总计为100。

dataset = [];
a = randombetween(0, max);
b = randombetween(0, max - a);
c = randombetween(0, max - a - b);
d = max - a - b - c;
dataset.push(a, b, c, d);
shuffle(dataset);

此代码每2秒执行一次,以更新投票结果。

为了使我的算法更逼真,我希望更改更加渐进。 我想创建一个inicial随机结果,然后逐渐增加/减少民意调查结果。让我们说一个民意调查结果不应该每次更新增加/减少超过5%。

这是一个玩弄它的小提琴:Live Poll

1 个答案:

答案 0 :(得分:1)

为什么不模拟提交的固定投票率?这样,当您计算百分比时,当更多人投票时,更改将会更小。这似乎比改变百分比更好。我把它扔在一起就像一个示范(https://jsfiddle.net/ovkfw577/1/

var votes = [0,0,0,0];
var dataset = [0,0,0,0];
var dataSize = 4;
var voteRate = 10;

// Algorithm to simulate the further voting process
var updateData = function() {

    var total = 0;
    dataset = [0,0,0,0];

    // add random amount of votes
    for(i=0; i < dataSize; i++) {
        var randomVotes = randombetween(0,voteRate);
        votes[i] += randomVotes;
      total += votes[i];
    }

    // calculate percentages
    for(i=0; i < dataSize; i++) {
        dataset[i] = votes[i] / total * 100;
    }

    // so poll bars don't completely stall later on.
    // not entirely necessary, but helps polling
    // appear more active.
    voteRate *= 1.2;

    drawVis();
    $("svg").fadeIn("slow");
};