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

            熱轉印www.yxheatpress.com

            公司網站模板http://qiyemoban.software8.co/

            常用鏈接

            統計

            友情鏈接

            最新評論

            Gray Code實現按序產生集合的所有子集

            簡介

            Gray Code,是幾十年前貝爾實驗室的科學家Frank Gray提出的一種編碼方案,當時主要用于傳輸信號以防止出錯。Gray Code 除了在通信,硬件設計領域中應用以外,在計算機相關科學的其他方面也有廣泛的應用,例如按序產生集合的所有子集。


            Gray Code實現按序產生集合的所有子集

            子集的按序產生,這個概念很簡單,舉個例子,假設我們的集合為{a,b,c},那么按序產生的子集應該是:

            空集 (000)   ——   0(編號 從0開始按順序排序)

            a (100)        ——   1

            ab  (110)     ——   2

            abc   (111)  ——   3

            ac

            b

            bc

            c


            那么Gray Code是如何產生這樣的序列的呢? 

            Gray Code的思想非常的巧妙,我們可以將所產生的子集編號(范圍為0~2^n-1),第一個子集為空集(編號為0,是偶數)。在其后的每個子集由前一個子集來決定,如果前一個子集編號為偶數,那么則改變前一個子集的第一位(從左邊數)的二進制值(0變成1或者1變成0)作為新的子集。如果前一個子集的編號為奇數,那么就將前一個子集二進制左邊數第一個1后面的那位改變其值(0變成1或者1變成0)作為新的子集。

            根據上面的Gray Code的思想,還是以集合{a,b,c}為例,第一個子集(000)的編號為0(偶數),推算出第二個子集是第一個子集改變左邊數的第一位的數值所產生,為100,也就是a(只取為1的字符,a為最左邊的字符對應100中的1)。那么根據第二個子集的編號1(奇數),推算出第三個子集是由第二個子集改變從左數第一個1后面那一位的值所產生(100->110),那么110對應的是ab。后面的子集都以此類推即可全部按順序產生。


            Gray Code非遞歸的C語言實現

            以下代碼在VS2008下調試通過


            1. int sum(int n)  
            2. {  
            3.     if(1<=n) return n+sum(n-1);  
            4.     else return 0;  
            5. }  
            6.   
            7. void gray(char *ptr)  
            8. {  
            9.     int len=strlen(ptr);  
            10.     int num=(1<<len);  
            11. //    printf("num=%d  \n",num);  
            12.     int i,j,k;  
            13.     int mod,tmp,mask,tmp1,tmp2;  
            14.     mask=1<<len-1;  
            15.  //   printf("mask=%d  \n",mask);  
            16.     mod=0;//(1<<len)-1;  
            17.     for(i=0;i<num-1;i++)  
            18.     {  
            19.         if(i%2==0)  
            20.         {  
            21.             tmp=mod&mask;  
            22.  //           printf("tmp=%d  ",tmp);  
            23.             if(0!=tmp) {mod=mod&(~mask);}  
            24.             else {mod=mod|(mask);}  
            25.         }  
            26.         else  
            27.         {  
            28.             tmp1=1<<(len-1);  
            29.             for(j=0;j<len;j++)  
            30.             {  
            31. //                printf(" in else");  
            32.                 if(mod&tmp1) break;  
            33.                 tmp1=tmp1>>1;  
            34.  //               printf("tmp1=%d  ",tmp1);  
            35.             }  
            36.             tmp1=tmp1>>1;  
            37.  //           printf(">>1  tmp1=%d  ",tmp1);  
            38.             if(tmp1!=0)   
            39.             {  
            40.                 tmp=mod&tmp1;  
            41.                 if(0!=tmp) {mod=mod&(~tmp1);}  
            42.                 else {mod=mod|(tmp1);}  
            43.             }  
            44.         }  
            45.         tmp2=1<<len-1;  
            46.         for(k=0;k<len;k++)  
            47.         {  
            48.             if(mod&tmp2) printf("%c",ptr[k]);  
            49.             tmp2=tmp2>>1;  
            50.         }  
            51.         printf("\n");  
            52.     }  
            53. }  
            54.   
            55. int main()  
            56. {  
            57. //    printf("  result=%d ",sum(4));  
            58.     char *p="abcd";  
            59.     gray(p);  
            60.     system("pause");  
            61. }  

            posted on 2012-10-29 17:08 不聽話的 閱讀(1089) 評論(0)  編輯 收藏 引用

            婷婷综合久久中文字幕蜜桃三电影| 亚洲AV成人无码久久精品老人 | 94久久国产乱子伦精品免费| 久久免费线看线看| 色综合久久夜色精品国产| 97精品依人久久久大香线蕉97 | 久久精品水蜜桃av综合天堂| 久久精品国产亚洲麻豆| 日本久久中文字幕| 国产精品久久久久国产A级| 久久乐国产精品亚洲综合| 久久精品国产99久久无毒不卡| 久久99精品国产麻豆蜜芽| 亚洲va久久久噜噜噜久久天堂| 国产99久久久国产精免费| 性高湖久久久久久久久| 国产精品久久久久久久午夜片| 中文字幕乱码久久午夜| 欧美日韩中文字幕久久久不卡| 久久久久亚洲av无码专区喷水 | 久久综合九色综合精品| 性做久久久久久久| 国产精品久久久久久久久软件 | 免费精品国产日韩热久久| 99久久精品费精品国产| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 国产成人精品免费久久久久| 久久亚洲国产精品成人AV秋霞| 色综合久久综精品| 国产精品99久久精品| 久久丫精品国产亚洲av| 亚洲欧美日韩久久精品第一区| 久久精品视屏| 欧美久久一级内射wwwwww.| 精品久久综合1区2区3区激情| 91久久精品国产成人久久| 麻豆精品久久精品色综合| 久久国产精品国语对白| 久久久精品人妻无码专区不卡 | 久久中文字幕无码专区| 日本久久久久久久久久|