• <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>
            我要啦免费统计
            O(n)時(shí)間O(1)輔助空間,循環(huán)移位


            這一道,google的筆試題,網(wǎng)易也用過,學(xué)校的數(shù)據(jù)結(jié)構(gòu)題目系統(tǒng)也有,之前我都是卡著機(jī)器出的

            現(xiàn)在整理一下

            一 3次翻轉(zhuǎn)做法
            /*about 循環(huán)移位
            實(shí)例:abcdefgh 向左循環(huán)移位3位
                 結(jié)果 defghabc

                  1.abc做翻轉(zhuǎn)  cba defgh

                  2 defgh做翻轉(zhuǎn)  cba  hgfed
               
                  3.第二結(jié)果全部在做翻轉(zhuǎn)    成為  defghabc   
            */

            template<class T>
            void reverse(T a[],int i,int j)
            {
                 
            while(i < j)
                 
            {
                         swap(a[i],a[j]);
                         
            ++i;
                         
            --j;
                 }

            }



            template
            <class T>
            void exch1(T a[],int n,int k)
            {
                 reverse(a,
            0,k-1);
                 reverse(a,k,n
            -1);
                 reverse(a,
            0,n-1);
            }

                 reverse(a,0,k-1); //  k/2
                 reverse(a,k,n-1); // (n-k)/2
                 reverse(a,0,n-1); //  n/2
             為 k/2+(n-k)/2+k/2=n/2 + n/2  = n


            二 ...


            posted on 2009-11-26 12:40 閱讀(1273) 評(píng)論(3)  編輯 收藏 引用 所屬分類: algorithm

            評(píng)論:
            # re: O(n)時(shí)間O(1)輔助空間,循環(huán)移位 2009-11-28 11:29 | AutumWinter
            reverse(a,0,k-1); // k/2
            reverse(a,k,n-1); // (n-k)/2
            reverse(a,0,n-1); // n/2
            你的復(fù)雜度計(jì)算有點(diǎn)問題問題,上面每個(gè)復(fù)雜度都應(yīng)該乘2,因?yàn)閟wap函數(shù)里面有兩次移動(dòng)操作
            結(jié)果是k + (n - k) + n = 2n = O(n),與移動(dòng)長(zhǎng)度K無關(guān),每個(gè)元素都移動(dòng)兩次。
            如果直接移動(dòng)的話相當(dāng)于每個(gè)元素都移動(dòng)了K次,復(fù)雜度是O(K*n)  回復(fù)  更多評(píng)論
              
            # re: O(n)時(shí)間O(1)輔助空間,循環(huán)移位 2009-11-30 17:28 | cdy20
            swap ,可以swap一次過,不同編譯器吧
            可以直接位運(yùn)算 交換地址,

            這個(gè)我把它認(rèn)為是一次的,因?yàn)槲覀兛梢詫懗蓷l表達(dá)式,至于編譯器是否分析成幾條,還是一條,我就不清楚的。這一次我明白你兩次的說法

            ((1/2)*swap次數(shù))

            我在分析的時(shí)候只不過把一個(gè)過程寫出來,暈。k都化掉了,肯定沒關(guān)。
            我只是想把問題簡(jiǎn)單化地分析

              回復(fù)  更多評(píng)論
              
            # re: O(n)時(shí)間O(1)輔助空間,循環(huán)移位 2009-11-30 18:06 | cdy20
            void reverse(T a[],int i,int j)
            {
            while(i < j)
            {
            swap(a[i],a[j]);
            ++i;
            --j;
            }
            }
            這個(gè)看成 是 (j-i)/2 次向下去整
            再細(xì)化下去,也是帶個(gè)常系數(shù) x*((j-i)/2)
            x=swap(你可以通常寫法,三次) + i,j操作寫法兩次+最多加上函數(shù)調(diào)用開銷



            即使是k*n次,k這個(gè)屬于一個(gè)小常數(shù)

            我非常倒,估計(jì)不知不到,O()這個(gè)概念,
            即使常數(shù)倍N 也是屬于O(N)

            翻轉(zhuǎn)最壞情況,最壞n==k,這個(gè)算法3*N

            這都是屬于O(N)  回復(fù)  更多評(píng)論
              
            久久精品国产精品亚洲精品 | 久久精品无码一区二区app| 久久精品国产亚洲AV久| 久久99精品久久久大学生| 久久66热人妻偷产精品9| 伊人久久大香线蕉影院95| 久久影视综合亚洲| 国产精品一区二区久久| 亚洲精品WWW久久久久久| 一本色道久久99一综合| 精品水蜜桃久久久久久久| 久久久久国产精品熟女影院| 精品国产综合区久久久久久| 99久久香蕉国产线看观香| 99久久成人18免费网站| 伊人久久亚洲综合影院| 久久精品国产亚洲AV高清热| 一级做a爰片久久毛片免费陪| 久久精品夜夜夜夜夜久久| 一本久久精品一区二区| 93精91精品国产综合久久香蕉| 亚洲色大成网站WWW久久九九| 久久久久国产成人精品亚洲午夜| 久久久久久久久无码精品亚洲日韩 | 久久亚洲国产成人精品性色| 亚洲AⅤ优女AV综合久久久| 亚洲国产精品一区二区久久| 亚洲国产美女精品久久久久∴| 欧美日韩精品久久久免费观看| 精品久久久久久久无码| 一本一本久久a久久综合精品蜜桃| 国内精品久久久久久久久| 青青草国产成人久久91网| 久久综合九色综合欧美狠狠| 无码专区久久综合久中文字幕| 久久这里都是精品| 人人狠狠综合88综合久久| 狠狠人妻久久久久久综合蜜桃| 久久香蕉综合色一综合色88| 亚洲国产精品久久久久| 精品永久久福利一区二区|