📜  拼图|邮件传播

📅  最后修改于: 2021-05-05 03:20:21             🧑  作者: Mango

班上有n个学生,每个学生都有不同的有趣故事。当学生在课堂上变得无聊时,他们决定制作一个游戏,以便度过自己的时间。他们希望通过发送电子消息来彼此分享有趣的故事。假定发件人包括他或她在发送消息时所知道的所有有趣的故事,并且消息中可能只有一个收件人。他们需要发送的最少消息数量是多少,以确保每个人都能收到所有有趣的故事?

解决方案:消息的最小数量等于2n –2。有几种方法可以执行此操作。

方法1:学生可以指定一个学生,例如,学生1,其他人向他们发送带有他们所知道的有趣故事的消息。收到所有这些消息后,学生1将所有有趣的故事与他或她的有趣的故事组合在一起,然后将此组合的消息发送给其他n-1个学生。通过下图可以理解。将n个学生分别表示为S1,S2,S3,…………..,Sn。学生指定S1,其他所有学生都向他们发送带有他们知道的有趣故事的消息。

收到所有这些消息后,学生1将所有有趣的故事与他或她的有趣的故事组合在一起,然后将此组合的消息发送给其他n-1个学生。因此,消息的最小数量等于2n – 2。

方法2(贪婪算法):将1到n的学生编号为S1,S2,S3,……………,Sn,并发送第一个n-1消息,如下所示:从S1到S2,从S2到S3,以及以此类推,直到消息结合了学生S1,S2,…最初知道的有趣故事。 。 。 ,Sn – 1发送给人n。然后将合并了来自学生n(即Sn)的所有n个有趣故事的消息发送给学生S1,S2,…。 。 。 ,锡– 1。

因此,消息的最小数量等于2n – 2。

注意: 2n – 2条消息是解决难题所需的最少数量的事实,这是由于一个事实,即学生人数增加一倍,至少需要两条额外的消息,即,与该额外学生之间的来往信息,恰恰是以上方法提供。

参考:算法难题– Anany Levitin,Maria Levitin