演算法導論隨筆1-3 三分法

分治是一個很關鍵的思想。我們瞭解了二分答案和二分查詢之後,可能會會考慮:是不是隻能二分?三分四分可不可以?

我們能推測出二分的時間複雜度是O(log2N),那麼如果是三分呢?很明顯是O(2*log3N),仔細計算一下,三分會不會導致時間複雜度降低?

我們用二分是因為二分操作起來簡單,而且也能達到我們所滿意的複雜度級數了。當然有時候二分答案可能很難解決我們的問題:洛谷P3382

題目描述

如題,給出一個 N 次函式,保證在範圍 [l, r] 記憶體在一點 x,使得 [l, x] 上單調增,[x, r] 上單調減。試求出 x 的值。

輸入格式

第一行一次包含一個正整數 N 和兩個實數 l, r,含義如題目描述所示。

第二行包含 N + 1 個實數,從高到低依次表示該 N 次函式各項的係數。

輸出格式

輸出為一行,包含一個實數,即為 x 的值。若你的答案與標準答案的相對或絕對誤差不超過 10^{-5}則算正確。

輸入輸出樣例

輸入 #1

3 -0。9981 0。5

1 -3 -3 1

輸出 #1

-0。41421

說明/提示

對於 100% 的資料, 6≤N≤13,函式係數均在 [-100,100] 內且至多 15 位小數,∣l∣,∣r∣≤10 且至多 15 位小數。l≤r。

題目大意其實就是讓我們求一個N次函式中的極點。

我們以題目中二次函式為例:l=-1。75 r=1。75

演算法導論隨筆1-3 三分法

演算法導論隨筆1-3 三分法

演算法導論隨筆1-3 三分法

演算法導論隨筆1-3 三分法

大家看到了沒有?在有單峰的情況下,我們不用二分法,而改用三分法。依舊能很高效率地得到我們想要的答案。

那麼篇幅有限,這裡對於分治演算法我就只擴充套件二分查詢、二分答案和三分的方法。這並不意味著分治只孕育了這三個演算法,但這三個肯定是最基礎的演算法,當你理解了二分和三分的本質後,相信能對分治有進一步新的理解。也能更好地理解《演算法導論》中第二章和第七章的內容了。

有問題發評論~謝謝大家支援!