[演算法][HW3] @Morris' Blog|PChome Online 人新台
2013-10-05 16:50:53| 人44,883| 回0 | 上一篇 | 下一篇

[演算法][HW3]

0 收藏 0 0 站台

期修演算法,道一下同的作。

[演算法B] Homework3: (你必至少完成二目,若完成二以上的目可以取得外加分)

(A) 展示(料及程序)明如何利用 presorting改善分而治之 2D rank finding演算法



根以前的思路看,好了 BIT 和 ST,於是使用了排序->描->查找,然料不可能是堂上教的。回到一,其上根本看不懂目需求 orz。

step1. 先所有按照 x 由小排到大,也就是 presorting,是了後面中取有。
step2. D&C(left, right) {// array index
            if(left >= right)    return;
            mid = (left+right)/2;
            D&C(left, mid);//切 x = point[mid].x 垂直
            D&C(mid+1, right);
            merge(left, mid, right);
       }
       merge(left, mid, right) {//sort by y-axis
            idx1 = left, idx2 = mid+1;
            idx3 = 0;
            count = 0;
            while(idx1 <= mid && idx2 <= right) {
                if(point[idx1].y < point[idx2].y)
                    TEMP_BUF[idx3++] = point[idx1++]
                    count++;
                else
                    TEMP_BUF[idx3].rank = point[idx2].rank + count
                    TEMP_BUF[idx3++] = point[idx2++];
            }
            while(idx1 <= mid)    
                TEMP_BUF[idx3++] = point[idx1++]
                count++;
            while(idx2 <= right)    
                TEMP_BUF[idx3].rank = point[idx1].rank + count
                TEMP_BUF[idx3++] = point[idx2++];
            move TEMP_BUF to point[].
       }
做法跟求逆序有像,思考一下由於已保合的候,其中一 x 座肯定比大,
因此再依序出的候,只需考 y 座的大小,因此合的候 y 座由小到大排序。
多一 count 得到左的出,等到右元素出,count 恰好是元素增加的 rank。

(B) 一分而治之演算法解一 定的值集合的求秩(rank finding)



看了一子才看懂目,原是 2D 降至 1D,不是只要算比它 x 小的!
也就是相於 sort 後,索引值即的 rank。
--> 既然是 D&C,照 merge sort 的法, int arr[] 排序。

(C) 一演算法找出一群在X上的中的最近(closest pair of points on X-axis)



只在 x 上的,很明地可以察到根本 greedy,排序後相位置算即可。

ret ← oo
sort(A, A+n) // 小到大
for i = 1 to n-1
    ret ← min(ret, abs(A[i]-A[i-1]))

(D) 出一分而治之演算法解最相同 元素 子序列(the longest identical consecutive element subsequence) ,分析演算法的度


根本就是最平台!突然加一 D&C 有恍神,用 D&C 也是可解的。
一根 D&C 的精神下去分治, [left, right] 分成 [left, mid] 和 [mid+1, right]
把每一 [left, right] 作是一 parent
,因此它有孩子 lson, rson。

每,
1. 左起最,即 [left, left+lmax-1] 都是相同元素。
2. 右起最,即 [right-rmax-1, right] 都是相同元素。
3. 中最,midmax 相解

合的候,
parent [left, right]
1. parent.midmax = lson.rmax + rson.lmax
2. parent.lmax = lson.lmax == lson.length && A[mid] == A[mid+1] ? lson.lmax+rson.lmax : lson.lmax
2. parent.rmax = rson.rmax == lson.length && A[mid] == A[mid+1] ? lson.rmax+rson.rmax : lson.rmax


(E) 出一分而治之演算法解最增 元素 子序列(the longest monotonically increasing consecutive element subsequence) ,分析演算法的度

一我已崩了,什需要分治 ...


一根 D&C 的精神下去分治, [left, right] 分成 [left, mid] 和 [mid+1, right]
把每一 [left, right] 作是一 parent
,因此它有孩子 lson, rson。

每,
1. 左起最,即 [left, left+lmax-1] 都是相同元素。
2. 右起最,即 [right-rmax-1, right] 都是相同元素。
3. 中最,midmax 相解

合的候,
parent [left, right]
1. parent.midmax = lson.rmax + rson.lmax
2. parent.lmax = lson.lmax == lson.length && A[mid] <= A[mid+1] ? lson.lmax+rson.lmax : lson.lmax
2. parent.rmax = rson.rmax == lson.length && A[mid] <= A[mid+1] ? lson.rmax+rson.rmax : lson.rax


(Bonus Programming Homework)
(P1) 一程式作改良式分而治之二求秩演算法
(P2) 一程式作分而治之二求最大(2D maxima finding)演算法
(P3) 一程式作分而治之最近二(closest pair of 2D points)演算法

台: Morris
人(44,883) | 回(0)| 推 (0)| 收藏 (0)|
全站分: 教育(修、留、研究、教育概) | 人分: 糟糟 |
此分下一篇:[文化中的] 期末告
此分上一篇:[C/C++] union&bit field 回

是 (若未登入"人新台"看不到回覆唷!)
* 入:
入片中算式的果(可能0) 
(有*必填)
TOP
全文
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86