8.9 分治 pow, sqrt

to do

分治法在每一層遞歸上都有三個步驟:

step1 分解:將原問題分解為若干個規(guī)模較小糊肠,相互獨立惭笑,與原問題形式相同的子問題鼎兽;

step2 解決:若子問題規(guī)模較小而容易被解決則直接解熊咽,否則遞歸地解各個子問題

step3 合并:將各個子問題的解合并為原問題的解。

它的一般的算法設計模式如下:

Divide-and-Conquer(P)

1. if |P|≤n0
2. then return(ADHOC(P))
3. 將P分解為較小的子問題 P1 ,P2 ,...,Pk
4. for i←1 to k
5.    do yi ← Divide-and-Conquer(Pi) △ 遞歸解決Pi
6. T ← MERGE(y1,y2,...,yk) △ 合并子問題
7. return(T)
  • 其中|P|表示問題P的規(guī)模;n0為一閾值阱高,表示當問題P的規(guī)模不超過n0時赚导,問題已容易直接解出,不必再繼續(xù)分解赤惊。
  • ADHOC(P)是該分治法中的基本子算法吼旧,用于直接解小規(guī)模的問題P。因此未舟,當P的規(guī)模不超過n0時直接用算法ADHOC(P)求解圈暗。
  • 算法MERGE(y1,y2,...,yk)是該分治法中的合并子算法,用于將P的子問題P1 ,P2 ,...,Pk的相應的解y1,y2,...,yk合并為P的解裕膀。

11.1] Pow(x, n)

careful with what the smallest subproblems have to be in order to work. Used myPowR to calculate the power to the 2 but will stuck in loop if didn't add base case if n==1 return x.
Also note to take care of negative n cases.

    double myPowR(double x, int n) {
        if (!n) return 1;
        // if (n==1) return x;
        int n_sub = n/2;
        double inner = myPowR(x, n_sub);
        return n%2 ? x*inner*inner : inner*inner;
    }
    
    double myPow(double x, int n) {
        bool neg = n<0;
        return neg? 1/myPowR(x, abs(n)) : myPowR(x, abs(n));
    }

11.2] Sqrt(x)

take care of special cases. Careful not to overflow: use divide instead of multiple in order to compare.

    int mySqrt(int x) {
        if (x<2) return x;
        int mid;
        // took care of 0 case because can't divide by 0
        for (int l=1, r=x; l<=r; ) {
            mid=(l+r)/2;
            if (mid==x/mid || (mid<x/mid && (mid+1)>x/(mid+1))) break;
            if (mid>x/mid) {
                r=mid-1;
            } else {
                l = mid+1;
                
            }
        }
        
        return mid;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末员串,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昼扛,更是在濱河造成了極大的恐慌寸齐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件野揪,死亡現(xiàn)場離奇詭異访忿,居然都是意外死亡,警方通過查閱死者的電腦和手機斯稳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迹恐,“玉大人挣惰,你說我怎么就攤上這事∨贡撸” “怎么了憎茂?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锤岸。 經(jīng)常有香客問我竖幔,道長,這世上最難降的妖魔是什么是偷? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任拳氢,我火速辦了婚禮,結果婚禮上蛋铆,老公的妹妹穿的比我還像新娘馋评。我一直安慰自己,他們只是感情好刺啦,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布留特。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜕青。 梳的紋絲不亂的頭發(fā)上苟蹈,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音右核,去河邊找鬼慧脱。 笑死,一個胖子當著我的面吹牛蒙兰,可吹牛的內容都是我干的磷瘤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼搜变,長吁一口氣:“原來是場噩夢啊……” “哼采缚!你這毒婦竟也來了?” 一聲冷哼從身側響起挠他,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扳抽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后殖侵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸呢,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年拢军,在試婚紗的時候發(fā)現(xiàn)自己被綠了楞陷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茉唉,死狀恐怖固蛾,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情度陆,我是刑警寧澤艾凯,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站懂傀,受9級特大地震影響趾诗,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蹬蚁,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一恃泪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缚忧,春花似錦悟泵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒙具。三九已至,卻和暖如春朽肥,著一層夾襖步出監(jiān)牢的瞬間禁筏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工衡招, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篱昔,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓始腾,卻偏偏與公主長得像州刽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浪箭,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 一穗椅、基本概念 在計算機科學中,分治法是一種很重要的算法奶栖。字面上的解釋是“分而治之”匹表,就是把一個復雜的問題分成兩個或...
    扎Zn了老Fe閱讀 767評論 0 1
  • http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741...
    RavenX閱讀 455評論 0 1
  • 五大常用算法之一:分治算法 一、基本概念 在計算機科學中宣鄙,分治法是一種很重要的算法袍镀。字面上的解釋是“分而治之”,就...
    鮑陳飛閱讀 1,242評論 0 4
  • 設計思想與策略 分治法的設計思想是:將一個難以直接解決的大問題冻晤,分割成一些規(guī)模較小的相同問題苇羡,以便各個擊破,分而治...
    30fd099ab263閱讀 1,760評論 0 3
  • 沒有太多的想法 只是想把這一件事好好完成 終究還是會有差別 勇敢一點鼻弧、努力一點 每個人的人生都要自己擔
    梔子與貓閱讀 86評論 0 0