• <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)論
              
            777午夜精品久久av蜜臀| 久久99精品国产麻豆蜜芽| 久久久久亚洲AV无码专区桃色| 99久久久久| 国产精品女同一区二区久久| 久久国产视屏| 亚洲中文字幕无码久久精品1| 国产精品禁18久久久夂久| 亚洲精品高清国产一久久| 午夜精品久久久久久| 亚洲AV日韩精品久久久久久| 国产美女久久久| 久久久久18| 久久亚洲精品成人AV| 国产精品狼人久久久久影院| 国产精品一区二区久久精品涩爱 | 久久免费精品视频| 久久久亚洲精品蜜桃臀| 久久亚洲精品成人av无码网站| 99久久久久| 国产精品久久成人影院| 久久亚洲国产成人影院| 国内精品久久久久久久亚洲| 久久久久亚洲AV无码网站| 免费一级欧美大片久久网| 99久久精品影院老鸭窝| 亚洲人成无码网站久久99热国产| 久久亚洲国产欧洲精品一| 亚洲精品乱码久久久久66| 久久精品国产WWW456C0M| 国产精品99久久久久久人| 亚洲第一极品精品无码久久 | 久久久久亚洲AV无码观看| 99久久精品国产一区二区| 精品国产乱码久久久久久1区2区| 香港aa三级久久三级老师2021国产三级精品三级在 | 精品久久久久久中文字幕大豆网| 久久亚洲中文字幕精品一区四 | 久久久久久久亚洲精品| 精品久久综合1区2区3区激情 | 精品久久8x国产免费观看|