分治是一個很關鍵的思想。我們瞭解了二分答案和二分查詢之後,可能會會考慮:是不是隻能二分?三分四分可不可以?
我們能推測出二分的時間複雜度是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
大家看到了沒有?在有單峰的情況下,我們不用二分法,而改用三分法。依舊能很高效率地得到我們想要的答案。
那麼篇幅有限,這裡對於分治演算法我就只擴充套件二分查詢、二分答案和三分的方法。這並不意味著分治只孕育了這三個演算法,但這三個肯定是最基礎的演算法,當你理解了二分和三分的本質後,相信能對分治有進一步新的理解。也能更好地理解《演算法導論》中第二章和第七章的內容了。
有問題發評論~謝謝大家支援!