2020年3月23日阿里笔试题

2020年3月23日阿里笔试题


  这是阿里的第二场笔试,本来觉得没啥好写的,一道排列组合,一道迷宫。没有什么发挥的空间。但是后来在和大家讨论的过程中,把这道题的公司给敲出来了,但是这公式也不能白敲,干脆写一篇文章总结一下。

题目描述

一共n个人,从中选出任意个人组成一队,我们不妨记为k,再从k个人选出一人做队长。

题目分析

  这是一个典型的排列组合问题,从n个人选出k个,可能是CnkC_n^k,从k个人选出一个队长,种类数是kk,但是k可以是11~nn,所以这个题的结果就是k=1nkCnk\sum_{k=1}^nkC_n^k,这样写代码是可以过一些例子的。
  但是不会全过,因为复杂度过大。当然可以在求CnkC_n^k的时候利用Cnk=Cnk1n+1kkC_n^k=C_n^{k-1}*\frac{n+1-k}{k}这个公式,因为Cnk1C_n^{k-1}我们也是要计算的,这样就会减少一定的复杂度,然后又能多过一些例子。
  我们还会想到CnkC_n^k=CnnkC_n^{n-k},这样又可以少一些计算。我们这时候就需要把kCnk(nk)Cnnkk*C_n^k和(n-k)*C_n^{n-k}一起计算,发现正好等于nCnkn*C_n^k或者nCnnkn*C_n^{n-k}
  到这里如果熟悉排列组合的同学,可能会想到了如果把数列反着再加一次。
在这里插入图片描述

  如果说这个题有什么需要总结的,就是一旦确定一个题目是排列组合的问题之后,可以去考虑使用公式优化计算量,当然时间紧迫,没有时间的话,就很难去优化了,还是需要注意平时多积累。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章