打电话-一个很神奇结构

打电话

​ 一个合唱队共有15人,暑假期间有一个紧急演出,老师需要尽快通知到每一个同学,如果用打电话的方式,每分钟通知1人,请帮老师设计一个打电话的方案。

1. 老师依次给每个学生打电话

老师依次给所有学生拨打电话。耗时15分钟

2. 老师让同学帮忙

老师依次给同学们拨打电话太耗时了。改变策略。

老师拨打3个学生电话

  1. 10:00 老师拨打第一通
    1. 10:01 学生1拨打第一通
    2. 10:02 学生1拨打第二通
    3. 10:03 学生1拨打第二通
    4. 10:04 学生1拨打第二通
  2. 10:01 老师拨打第二通
    1. 10:02 学生2拨打第一通
    2. 10:03 学生2拨打第二通
    3. 10:04 学生2拨打第三通
    4. 10:05 学生2拨打第四通
  3. 10:02 老师拨打第三通
    1. 10:03 学生3拨打第一通
    2. 10:04 学生3拨打第二通
    3. 10:05 学生3拨打第三通
    4. 10:06 学生3拨打第四通

老师多拨打一个电话会节约时间吗?

老师拨打4个学生电话

  1. 10:00 老师拨打第一通
    1. 10:01 学生1拨打第一通
    2. 10:02 学生1拨打第二通
    3. 10:03 学生1拨打第二通
  2. 10:01 老师拨打第二通
    1. 10:02 学生2拨打第一通
    2. 10:03 学生2拨打第二通
    3. 10:04 学生2拨打第三通
  3. 10:02 老师拨打第三通
    1. 10:03 学生3拨打第一通
    2. 10:04 学生3拨打第二通
    3. 10:05 学生3拨打第三通
  4. 10:03 老师拨打第四通
    1. 10:04 学生4拨打第一通
    2. 10:05 学生4拨打第二通
    3. 10:06 学生4拨打第三通

类似老师拨打5个学生电话然后每个学生在转发2个同学耗时也是一样的。还有办法继续加速吗?

3. 老师和同学们讨论出了新的模式

老师和同学只要有空闲就通知其他同学

总结

其实第二种和第三种确实能减少通知时间,但是却隐藏了一个问题就是到底哪些同学是没有接到通知的。

这个问题如果是软件项目中,那么在接完电话的同学(处理完任务)在通知其他同学之前要先确认哪些同学没有收到通知(去中间件查询一下没有接收到通知的同学)

原文地址: https://github.com/malin1994515/my-learn/blob/master/0.Java-Learn/00/打电话.md

原文地址:https://www.cnblogs.com/linma/p/13290164.html