幾個精妙的小問題(By Divide and Conquer)
阿新 • • 發佈:2019-02-05
所謂分治法就是分而治之的意思,即將一個不易解決的大問題分解為幾個易於解決的小問題,然後再將各個小問題的解合併起來就是大問題的解。這種方法雖然簡單,但是對於很多問題都很有效,下面試舉幾例:
問題一:有效字串個數問題能在通道上傳遞的字串滿足如下兩條性質:該字串中只包含'a'、'b'、'c'三種字元;如果"aa"存在該字串中,則該字串無法傳遞,視為無效。例如:長度為2的有效字串有8個:"ab"、"ac"、"ba"、"bb"、"bc"、"ca"、"cc"、"cb"。現在要你求出長度為n的有效字串有多少個?
提示:f(n)=2f(n-1)+2f(n-2), n>2; f(1)=3;f(2)=8
先來介紹一下倒置的概念:對一個序列a1,a2,a3,...,an來說,倒置為:i<j,ai>aj。現在要求在儘量短的時間下求出一個n個元素的序列中有多少倒置?
提示:可以在O(nlgn)時間複雜度下實現。
問題三:找兩個數A和B是兩個分別含有n個正整數的序列。對一個給定的正整數x,設計一個複雜度儘量低的演算法找出是否存在x=a+b,其中a∈A,b∈B?
提示:可以在O(nlgn)時間複雜度下實現。