• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            三分法——求解凸性函數的極值問題(轉)

            二分法作為分治中最常見的方法,適用于單調函數,逼近求解某點的值。但當函數是凸性函數時,二分法就無法適用,這時三分法就可以“大顯身手”~~


                   如圖,類似二分的定義Left和Right,mid = (Left + Right) / 2,midmid = (mid + Right) / 2; 如果mid靠近極值點,則Right = midmid;否則(即midmid靠近極值點),則Left = mid;

            程序模版如下:

            double Calc(Type a)
            {
                /* 根據題目的意思計算 */
            }

            void Solve(void)
            {
                double Left, Right;
                double mid, midmid;
                double mid_value, midmid_value;
                Left = MIN; Right = MAX;
                while (Left + EPS < Right)
                {
                    mid = (Left + Right) / 2;
                    midmid = (mid + Right) / 2;
                    mid_area = Calc(mid);
                    midmid_area = Calc(midmid);
                    // 假設求解最大極值.
                    if (mid_area >= midmid_area) Right = midmid;
                    else Left = mid;
                }
            }

            現根據幾道的OJ題目來分析三分法的具體實現。

            buaa 1033 Easy Problem
            http://acm.buaa.edu.cn/oj/problem_show.php?c=0&p=1033

            題意為在一條線段上找到一點,與給定的P點距離最小。很明顯的凸性函數,用三分法來解決。
            Calc函數即為求某點到P點的距離。

            ZOJ 3203 Light Bulb
            http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3203


            如圖,人左右走動,求影子L的最長長度。
            根據圖,很容易發現當燈,人的頭部和墻角成一條直線時(假設此時人站在A點),此時的長度是影子全在地上的最長長度。當人再向右走時,影子開始投影到墻上,當人貼著墻,影子長度即為人的高度。所以當人從A點走到墻,函數是先遞增再遞減,為凸性函數,所以我們可以用三分法來求解。

            下面只給出Calc函數,其他直接套模版即可。
            double Calc(double x)
            {
                return (h * D - H * x) / (D - x) + x;
            }

            heru 5081 Turn the corner 08年哈爾濱regional網絡賽
            http://acm.hrbeu.edu.cn/index.php?act=problem&id=1280


            汽車拐彎問題,給定X, Y, l, d判斷是否能夠拐彎。首先當X或者Y小于d,那么一定不能。
            其次我們發現隨著角度θ的增大,最大高度h先增長后減小,即為凸性函數,可以用三分法來求解。

            這里的Calc函數需要比較繁瑣的推倒公式:
            s = l * cos(θ) + w * sin(θ) - x;
            h = s * tan(θ) + w * cos(θ);
            其中s為汽車最右邊的點離拐角的水平距離, h為里拐點最高的距離, θ范圍從0到90。

            POJ 3301 Texas Trip
            http://acm.pku.edu.cn/JudgeOnline/problem?id=3301

            題意為給定n(n <= 30)個點,求出飽含這些點的面積最小的正方形。

            有兩種解法,一種為逼近法,就是每次m分角度,求出最符合的角度,再繼續m分,如此進行times次,即可求出較為精確的解。(m 大概取10, times取30即可)

            第二種解法即為三分法,首先旋轉的角度只要在0到180度即可,超過180度跟前面的相同的。坐標軸旋轉后,坐標變換為:
            X’ = x * cosa - y * sina;
            y’ = y * cosa + x * sina;

            至于這題的函數是否是凸性的,為什么是凸性的,我也無法給出準確的證明,希望哪位路過的大牛指點一下~~

            例題更新(2010.5.5)
            hdu 3400 Line belt

            http://acm.hdu.edu.cn/showproblem.php?pid=3400
            典型的三分法,先三分第一條線段,找到一個點,然后根據這個點再三分第二條線段即可,想出三分的思路基本就可以過了。

            對于求解一些實際問題,當公式難以推導出來時,二分、三分法可以較為精確地求解出一些臨界值,且效率也是令人滿意的。

            /* czyuan原創,轉載請注明出處。*/

            轉自:http://hi.baidu.com/czyuan_acm/blog/item/8cc45b1f30cefefde1fe0b7e.html

            posted on 2010-11-07 16:00 abilitytao 閱讀(1401) 評論(0)  編輯 收藏 引用

            观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 一本色综合久久| 日韩精品无码久久一区二区三| 精品久久久久久久久久久久久久久| 99国内精品久久久久久久| 亚洲欧美国产日韩综合久久| 久久久久高潮毛片免费全部播放| 99热热久久这里只有精品68| 久久精品中文字幕大胸| 91久久精品91久久性色| 久久久这里有精品| 精品无码久久久久久久动漫| 久久久久久夜精品精品免费啦| 亚洲狠狠综合久久| 人妻少妇久久中文字幕一区二区 | 无码任你躁久久久久久老妇App| 精品久久8x国产免费观看| 久久这里有精品视频| 国内精品伊人久久久久av一坑| 久久婷婷人人澡人人爽人人爱| 久久99精品久久久久久野外| 久久久久亚洲av无码专区喷水| 性高朝久久久久久久久久| 久久青青国产| 久久国产精品波多野结衣AV| 蜜桃麻豆www久久| AV无码久久久久不卡蜜桃| 色8久久人人97超碰香蕉987| 2020久久精品亚洲热综合一本| 欧美午夜A∨大片久久| 久久久久无码中| 久久久久亚洲av毛片大| 91麻豆精品国产91久久久久久| 精品蜜臀久久久久99网站| 老色鬼久久亚洲AV综合| 无码人妻久久一区二区三区| 久久精品国产精品亚洲精品| 久久久久久综合网天天| 人妻无码αv中文字幕久久琪琪布| 无码国产69精品久久久久网站| 午夜精品久久久久久99热|