• <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 不聽話的 閱讀(1097) 評論(0)  編輯 收藏 引用

            精品久久香蕉国产线看观看亚洲| 国产午夜精品理论片久久 | 国产精品久久久久aaaa| 久久精品国产精品青草| 久久久久久久国产免费看| 欧美日韩中文字幕久久久不卡| 精品熟女少妇AV免费久久 | 久久影视综合亚洲| 中文精品久久久久人妻不卡| AA级片免费看视频久久| 精品久久久无码21p发布| 久久精品国产黑森林| 久久99国产综合精品免费| 麻豆av久久av盛宴av| 伊人丁香狠狠色综合久久| 久久久久亚洲av无码专区| 欧美精品丝袜久久久中文字幕 | 一97日本道伊人久久综合影院| 久久久av波多野一区二区| 婷婷久久综合九色综合九七| 精品午夜久久福利大片| 久久久久无码精品国产| 久久99精品国产麻豆宅宅| 久久婷婷五月综合色99啪ak| 亚洲午夜久久影院| 久久91精品国产91久久麻豆| 国内精品久久人妻互换| 久久婷婷五月综合色奶水99啪| 午夜精品久久久久9999高清| 精品久久久久一区二区三区| 精品久久一区二区三区| 久久精品免费观看| 久久亚洲欧美日本精品| 久久香蕉国产线看观看99| 久久电影网2021| 91精品国产高清久久久久久国产嫩草| 久久精品aⅴ无码中文字字幕不卡| 无码人妻少妇久久中文字幕蜜桃 | 77777亚洲午夜久久多喷| 国产免费久久精品99re丫y| 久久久久国产精品人妻|