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}
  到這裏如果熟悉排列組合的同學,可能會想到了如果把數列反着再加一次。
在這裏插入圖片描述

  如果說這個題有什麼需要總結的,就是一旦確定一個題目是排列組合的問題之後,可以去考慮使用公式優化計算量,當然時間緊迫,沒有時間的話,就很難去優化了,還是需要注意平時多積累。

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