正难则反思想:解群友提问有趣一题
以上就是群友提问的一道题,看着这道题上边一题末尾的集合形式,这题可能是在高中(正常高中学集合,但是也不排除提前学的可能!),但是我认为其实这是一道思维题,放在小学,初中也是可以的。重点是思考这题的过程。
第一眼看到这题我也没啥思路,就像群友总结的:任意四个服务器数据的并集是全集。完全想不到思路。于是我将此题发到了其他研讨群中,其他群里有群友回答,可以将数据分为12分(用1-12表示每份数据),然后依次按照123,234,345,567……10 11 12,12 1 2, 1 2 3 (刚好又是十二大份,每大份三小份,每个服务器存两大份,即一号服务器存123,,789)这样的顺序每个服务器去存。
这样行不行我倒是没式,但是我想到的是这样其实就是每个服务器里存了二分之一的数据,那不如简单点,就分成两份1,2,然后每个服务器存一份,节省程度是一致的!这样满不满足题目要求呢?还真满足:
剩下四个服务器其实就相当于是去掉两个服务器,试着去掉两个服务器,这也是正难则反的体现。
这么去:
这么去:
以上都是可以 的,就是根据这个解答我才对此题有了深入的认知,其实就是利用正难则反的思想,不要考虑四个并集是全集这回事,换一个思路。在上边的图中,为什么去掉两个之后依然剩下的能组成全部数据,其实就是每份数据备份了几份的问题,任意去掉两个,那就是要每份数据至少备份三份就可以了,如图中111,222,各自备了三份,所以满足要求。也就是按照最少但是满足要求的去备份就是最节省空间的方案,去掉n个就备n+1份。
通过以上解答也可以知道,数据分几份并不重要,而是一个服务器存几分之几能够满足备份的要求。原题分4份,6份,8份其实都可以,只要每份备三个就行了,这样下来都是存二分之一。
那么再想想一般情况,如果把原题中的去掉两个改成去掉一个,答案是什么?去掉一个也就是备两份即可。6除以2,得3,分成3份,每份备两份,2×3=6共6份,放在6个服务其,一个放一份即可:
再想想如果是去掉3个服务器呢?那就是备4份,设分a份,共4a份,4a除以6,每个放2a/3份,也就是总数据的三分之二。那a就可以是3的倍数,3,6,9都可以:
最后总结出一般公式,在m个服务器中去掉n 个,若要满足剩下的数据全,则分a份,每份备(n+1)份,共需存放a(n+1)份,除以m,除以a,得每个服务器至少放总数据的(n+1)/m.
可以自己独立思考一下本题中 去掉4个,去掉5个服务器的情况!
设置星标,精彩内容不错过!