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

            2021国内精品久久久久久影院| 国产精品久久久久影院嫩草| 亚洲精品国精品久久99热| 久久久中文字幕日本| 久久综合鬼色88久久精品综合自在自线噜噜| 精品伊人久久大线蕉色首页| 亚洲AV无码1区2区久久| 久久久久久a亚洲欧洲aⅴ| 亚洲国产成人精品91久久久 | 久久国产精品99久久久久久老狼 | 欧美亚洲国产精品久久| 久久午夜伦鲁片免费无码| 国产精品久久久久久福利漫画| 久久综合九色综合欧美就去吻| 91久久精品91久久性色| 中文字幕精品久久| 国产精品99久久久久久董美香| 久久精品免费一区二区| 久久久青草青青亚洲国产免观| 国产精品久久久久久久久久影院| 国产精品对白刺激久久久| 麻豆久久久9性大片| 久久成人精品视频| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 亚洲国产成人久久综合一区77| 99久久精品国产高清一区二区| 久久精品中文字幕大胸| 久久精品无码一区二区app| 国产精品一久久香蕉国产线看观看| 人妻无码久久精品| 久久99精品久久久久久不卡| 91精品国产高清91久久久久久| 久久国产精品成人影院| 亚洲精品乱码久久久久久按摩 | 亚洲中文字幕无码一久久区| 中文成人无码精品久久久不卡| 免费一级做a爰片久久毛片潮| 66精品综合久久久久久久| 久久99精品久久久久子伦| 久久久久免费看成人影片| 三上悠亚久久精品|