作为一名理工科院校的学生,我对我校的男女比例是有充分自信的。
但今早官微的一篇推送把我吓到了…内容大致是建校71周年,有30多位同学分别代表所在的省份给学校送上祝福,附照片的那种。
于是我就发现了:
怎么有那么多小姐姐!这严重不符合我校基本校情啊!
而更奇妙的是,在看小姐姐计算男女比的过程中,我发现原来算法的思想也能用来数数~
你可能会疑惑了,计算男女比不就是先数有多少个女生,再数一共有多少人就可以了嘛?但其实,按照算法的思想,会有几种更优的数法
最直观的数法
请注意,数数的前提是:
- 不能用工具
- 事先不知道一共有多少人
- 本人的脑子很笨,不能同时数两个数。也就是说,不能一边数有多少个女生,一边数有多少个人。
于是,最直观的数法是:先数一遍有多少个女生,再数一遍有多少个人
显然,这种数法遍历了两遍列表。
空间换时间
Ok,我们现在想,能不能数一遍就能把男女比算出来呢?
其实是有的!既然脑子不顶用,那么不妨看看陪伴了自己二十年的手。对!我们可以用手来帮忙。
具体做法是,脑子用来数有多少个人,手用来数有多少个女生。
这样,我们就能在一遍数数之后计算男女比了。这也是一种典型的空间换时间的做法(增加了手的空间)
更优方法
但是我还是不甘心,有没有既能一遍数完,又能节省空间的办法呢?
有!不过,现在我们需要对数本身下手。
既然脑子一次只能数一个数,那不妨让这一个数包含更多的信息
我的思路是这样的: 将数定义为总人数与女生数的结合。
举个例子:
- 第一个人为男生,总人数为1,女生为0。因此记成10
- 第二个人为女生,总人数为2,女生为1。因此记成21
- 第十个人为男生,总人数为10,女生为6。因此继承106
因此,数完之后,左边的数为总人数,右边的数为女生数。这样,时间和空间都达到了较优。
总结
写这篇博客的目的,其实就是记录一下生活中的灵光,供大家一乐。
但我还是相信,计算机是一门让人聪明的学科,我们学到的知识不仅让我们能混一口饭吃,也能在生活中得以运用~