• <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>

            Why so serious? --[NKU]schindlerlee

            Majority Problem:給出n個物品,判斷是否有超過一半的物品是相同的。


            給出n個物品,判斷是否有超過一半的物品是相同的。
            前提是,兩個物品只有放到一個特殊的裝置中才能判斷是否相同。

            Θ(n^2):brute force
                對每一個物體遍歷
            Θ(nlogn):分治,下面的代碼純屬表達思想用,沒有測試!!!
                int divide(int *a,int n)
                {
                    if(n == 2) {
                        if(a[0] == a[1]) {
                            return a[0];
                        }
                        return EMPTY;
                    }
                    int ca = divide(a,n/2);
                    int cb = divide(a + n/2.n - n/2);
                    if(ca != EMPTY) {
                        if(ca is majority in a[n/2 ... n-n/2]) {
                            return ca;
                        }
                    }
                    if(cb != EMPTY) {
                        if(cb is majority in a[0...n/2]) {
                            return cb;
                        }
                    }
                    return EMPTY;
                }

            Θ(n):規模下降
            Lemma:如果兩個物品不同那么在去掉這兩個物品的剩余物品中,如果存在Majority
                元素,那么這個元素也是去掉之前的解.
            設考慮要去掉的兩個物品是A,B
                如果A,B都不是Majority元素,那么在去掉A,B之后Majority元素一定不變
                如果A是Majority元素,那么去掉兩個元素之后,在n-2個物品中原來的Majority物品個數
                    由n/2 + 1變為 n/2,依然在n-2個物品中占大多數

            貼<<Algorithms Design Techniques and Analysis>>上的代碼,哥親自輸入的,
            我的技術博客http://www.shnenglu.com/schindlerlee

            Algorithm 5.9 MAJORITY
            Input:An array A[1...n] of n elements.
            Output:The majority element if it exists:otherwise non.

             1. c ← candidate(1)
             2. cout ← 0;
             3. for j ← 1 to n
             4.        if A[j] == c then count ← count + 1
             5. end for
             6. if count > ⌊n/2⌋ then return c
             7. else return none
             8.
             9. Procedure candidate(m)
            10. j ← m;c ← A[m];count ← 1
            11. while j < n and count > 0
            12.     j ← j + 1
            13.     if A[j] == c then count ← count + 1
            14.     else count ← count - 1
            15. end while
            16. if j == n then return c
            17. else return candidate(j + 1)        


            posted on 2009-12-18 18:04 schindlerlee 閱讀(1106) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告

            久久精品成人| 久久中文字幕视频、最近更新| 久久精品极品盛宴观看| 久久久久久精品免费看SSS| 婷婷久久久亚洲欧洲日产国码AV| 久久久青草久久久青草| 女同久久| 日本精品久久久中文字幕| 欧美久久综合九色综合| 久久91亚洲人成电影网站| 久久99国产精品成人欧美| 久久永久免费人妻精品下载| 国产激情久久久久影院| 久久久久亚洲av无码专区导航| 久久人人爽人人爽人人片AV东京热 | 久久久久亚洲AV无码去区首| 久久精品国产亚洲AV忘忧草18| 久久综合综合久久狠狠狠97色88| 久久精品中文字幕大胸| 久久久久亚洲AV成人网人人软件| 亚洲av伊人久久综合密臀性色| 国产精品99久久久久久董美香| 99久久精品日本一区二区免费| 久久久国产亚洲精品| 久久久WWW免费人成精品| 97久久超碰国产精品旧版 | 久久国产精品77777| 国产亚洲精品久久久久秋霞| 久久久噜噜噜久久中文字幕色伊伊| 国产69精品久久久久777| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 99久久成人国产精品免费| 精品国产乱码久久久久久人妻| 久久精品中文字幕第23页| 国产午夜精品久久久久九九| 国产精品久久久久久久久| 亚洲狠狠婷婷综合久久蜜芽| 日产精品久久久久久久性色| 亚洲乱码中文字幕久久孕妇黑人| 97精品依人久久久大香线蕉97| 精品久久人人爽天天玩人人妻|