`
ihuashao
  • 浏览: 4546394 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

生活中关于清点人数之设计

阅读更多

一提到数据结构,大家想起的都是计算机程序中的。到现实生活中,人们却往往容易忽视设计好的数据结构的重要性。

这次CSDN英雄会过程活动组织中,遇到一个需求。由于各路英雄众多,所以CSDN在组织的时候,经常需要清点人数。而CSDN的做法是这样的,由领队拿着一张名单,依此报出名字,在场的人喊声“到”。

我相信这是中国特色的清点方式。事实上,我们喊“到”的经验一定不少,以至于很多人都不愿意被迫喊这个字,有些人改成“来了”,有些人说“在”,有些人干脆举个手。不管怎么样,每个人基本用一句话来完成自己在清点过程中的任务,虽然感觉有点傻。

后来,在爬长城的时候,我又想起这个清单问题。因为这个时候情况比较混杂,不是什么时候都在一个车子上清点,清点的难度非常大。如果噪音大的话,这样的清点就更难了。于是我就想到了改进我们的清点方式。

我们先来看看传统的清点方式的特点:

  1. 有一位清点者
  2. 有一份名单列表
  3. 一般是顺序清点

这种方式的缺点,基本可以找到一些:

  1. 如果没有人清点,没有人知道是否来全了
  2. 由于顺序清点,效率很低。找人的效率也很低
  3. 如果找不到人,那么补救的方式比较被动

如果我们要改进,从哪里入手呢?分析一下这个系统,如果一个人相当于一台计算机的话,传统的清点方式,只是充分使用了“清点者”这台计算机。基本上所有的计算都集中到了它的身上。而每一个被清点的,只是完成了一个简单的报到工作。这显然是一个巨大的浪费。

而我们的数据结构的设计,正可以从此下手。整个思路,就是增加并行运算。我提出一个基本可行的方案:

  1. 取消清点者
  2. 每一个人记住两个人,保证一个群体中,每一个人被人记住
  3. 不存在任何一个子集,其中任何一个人不被子集外的人记住
  4. 清点的时候,每一个人都清点其记住的两个人

显然,这个方案的执行的时候,是非常迅速的。与之对应的,在队伍组织的初期,必须安排好每一个人应该记住的人。这也说明了,并行是需要统筹的。

观察这个方案,每一个人(计算机),已经不再只是承担“报到”的功能,每一个人都有自己的记忆,并且有各自的判断。他们只是在发生异常的时候,向整个系统报告,否则无需“报到”!

总结以下,其实,计算机中的计算方式就是从生活抽象而来的。但我们也应该关注到,计算机的思想,也可以借用到我们现实生活中来。一句话,只要是好的,我们都可以用。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics