提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

文章仅供参考

今天单位要求计票,近100个人,几千张选票,每张选票上有1~12人不等,选票内容有两大类,一类分为同意和不同意,一类分为优秀、称职、比较称职和不称职这几个选项,要求分别算出这些人两大类的选票数。

杯具的是,原始的选票,木有计算机啊,再NB的程序也派不上用场了,只有手工计票了,和同事讨论的几种计票方法,同事给出的意见是:先选择选票上第一个人,然后分别筛出得票最多的选项,比如说,这一堆选票,每张有张三、李四和王五三个人,首先选择张三,大概看了一下,发现张三得同意和优秀的票最多,我们把这些票筛选出来,然后统计不是这两个选项的票,这里只能采用笨方法,依次遍历两大类的各选项。这样发现计票确实容易了一些,因为大多数票已经被筛出了,然后数一下筛出的票数,再合计就得出了张三的所有选项的票数。

下午,同事有事外出,我单独找了一间大的会议室,然后准备计票,突然想到计算机上典型的以空间换时间的算法,也就是说时间快效率高,多数是以牺牲空间为代价的,典型的就是缓存,我们将经常会访问的数据存放在缓存里,这样可以避免多次查询数据库所带来的性能开销,访问的速度就会变快,而这个速度是要牺牲内存或者硬盘空间的;相反,如果空间小,更多地是要消耗性能,导致速度瓶颈的。

那么我又研究了一下刚才同事提出的思路,然后实际计了一组选票,得出以下结论:

1. 全部选择同意和优秀的比较多排第一,这类人多数对投票不感兴趣、不敢得罪人或者是不认识被选举人。

2. 全部选择同意和称职的人数排第二,这类人多数具备有第一条所述的特点,同时思想略有保守,对优秀比较感冒,或者本人要求比较严格,无论看什么都是有缺点的。

3. 全部选择不同意和称职的人数居第三,这类人多数原则上不想被选举人当选,既然不想被选举人当选,那么“优秀”就无从谈起,接下来就是“称职”、“比较称职”和“不称职”三种说法,既然选择不同意,可能觉得被选举人缺乏职务升迁的某种能力,但是对于其工作还是认可的,所以选择称职。

现在根据以上结论进行计票,第一种选票是所有人都是第一条结论,单独筛选出来,依次筛出第二、三条结论说明的选票,记住,这里是 所有人

现在面前已经有三堆选票了,分别数出这三堆票的数目,然后给每个人加上应有的数字,接下来可以把这三堆释放掉,当然如果空间大,可以先放在那儿,可以不用管它们了。

下面手上的票每个人得票的情况可能比较乱,总体上比原来少了很多,我们继续筛出第一位被选举人的选票,分上述1、2、3结论,还有就是其他(排除1、2、3种情况的)。当然这里的操作和上面的筛选同时进行。

由于是同时进行的,所以只筛选了一遍我们已经排除了大多数选票,并得出第一个被选举人的多数票数,只要再把手上少数的关于第一个被选举人的其他票计算一下,第一位被选举人最终票数就有了。

删除第一位被选举人,再重复上面的方法,筛出第2、3位选举人,实际操作中会发现,越统计到后面需要统计的票数越少,很大程度上减少了重复计票。

虽然占满了很大一部分桌子(空间),但是提升了效率,还是很值得的。

部分个人观点,如有不当,还望指教。