USING INDUCTION TO DESIGN 使用歸納法設計演算法 [3/14]

來源:互聯網
上載者:User

接上文:http://blog.csdn.net/jj12345jj198999/article/details/6602500

 

改進:第一個改進之處在於我們注意到在求解過程中存在很多冗餘計算:x的指數是從頭開始計算的。當我們計算x^n時通過使用x^(n-1)的值能夠幫我們節省很多乘法運算。這些都是在歸納法假設中通過對x^n計算的歸納得以實現的:

更強的歸納假設:我們已經知道了如何去計算多項式Pn-1(x),同時我們也知道如何計算x^(n-1)的值。

這個歸納假設更強一些,因為它要求計算出x^(n-1),但是它拓展起來更容易。我們在計算x^n時僅僅需要進行一步乘法操作,然後在進行一步乘法操作得到an*x^n,然後進行一步加法操作完成整個計算。(其實這個假設並不是太強,因為我們還是需要計算x^(n-1)的值)。總而言之,這裡需要進行2n次乘法和n次加法。儘管這個歸納假設需要更多的計算,但總的說來它減少了工作量。我們在後面再來討論這一點。在各種層面上看來這個演算法很好,它高效,簡單也容易實現。然而存在一個更好的演算法,它是通過用一種不同的方式使用歸納法得以實現的。

我們通過移去最後一個係數an來簡化問題。(這是一個很直截了當的做法)但是我們也可以移去第一個係數a0。這個規模更小的問題變成了計算由an,an-1...a1這些係數組成的多項式,如下所示:
P'n-1(x)=an*x^(n-1)+an-1*x^(n-2)...+a1
(注意到an現在是n-1次的係數,後面依次改變)

新的歸納假設(倒序):我們知道如何去計算由係數an,an-1...a1構成的x多項式(即上面列出來的P'n-1(x))

由於這個假設更容易拓展,故其更符合我們的目的。很明顯Pn(x)=x*P'n-1(x)+a0。因此這裡僅僅只要一次乘法和一次加法就可以通過P'n-1(x)計算得出Pn(x)。完整的演算法可以通過下面這個運算式加以描述:
an*x^n+an-1*x^(n-1)+...+a1*x+a0=((...((an*x+an-1)x+an-2)...)x+a1)x+a0

這個演算法被稱為霍納歸納以W.G.Horner命名。(這也是牛頓提出來的)。下面給出了計算多項式的演算法。

計算運算式演算法
(a0,a1,a2...an,x:real); //輸入a0至an,x,全為實數
begin
  P:=an;
  for i:=1 to n do
    P:=x*P+an-i;
end;

 

複雜度分析:這個演算法僅僅需要n次乘法,n次加法以及一個額外的記憶體空間。儘管原先的解決方案看上去簡單並且高效,但追求一個更好的演算法是值得的。這個演算法不僅僅是速度更快,同時相應的程式也更簡單。

結論:上面給出的簡單例子闡明了歸納法使用過程中的靈活性。霍納規則的技巧僅在於考慮到輸入是從左向右的,而不是直觀上看到的從右向左。

當然這裡有使用歸納法的許多其他潛在性,我們將在更多的例子中看到這一點。

 

找到一一映射關係【Q2】

f是一個把有限集合A映射到其自身的函數。(例如A中的每一個元素都映射到A中的另一個元素)為了簡化起見,我們把A中的元素表示為從1到n的數字。我們假定函數f以一個數組f[1..n]的形式出現,這樣f[i]存放的是f(i)的值。(該值是一個位於1到n之間的整數)當A中的每一個元素都僅僅只有一個元素對應它時我們把函數f稱為一一映射。函數f可以用圖1中的圖加以展示,在圖中,兩端資料都對應同一個集合,圖中的邊表示映射關係。(這種映射關係是從左至右的)

 

問題:找到一個包含最多元素的子集S(ScA),使得函數f能夠把S中的任何元素映射到S中的其他元素。(即f讓S映射到自身),同時S中的每一個元素僅僅只有唯一的一個S中的元素映射到自身。(即限制S讓f成為一個一一映射)

如果f本來就是一個一一映射,那麼全集A就滿足了問題的條件,顯然它也是最大的集合。在另一個方面來說,如果f(i)=f(j)存在且i≠j,那麼集合S就不能同時包含i和j。例如在圖1中S就不能同時包含2和3。不可能任意從兩者中選擇一個從集合中剔除出去。例如,假設我們決定刪去3,由於1被映射到3,所以我們也必須刪去1。(因為任意映射必須映射到S中而此時3已經不在S中了)。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.