• <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)  編輯 收藏 引用

            国产精品久久免费| 色综合久久无码五十路人妻| 狠狠狠色丁香婷婷综合久久五月 | 亚洲国产一成久久精品国产成人综合| 久久综合丁香激情久久| 国产精品亚洲综合专区片高清久久久 | 久久久噜噜噜久久中文字幕色伊伊| 欧美午夜精品久久久久久浪潮| 国产—久久香蕉国产线看观看| 少妇无套内谢久久久久| 色狠狠久久综合网| 久久精品成人免费看| 久久只这里是精品66| 久久电影网一区| 国产偷久久久精品专区| 久久久久人妻一区精品| 久久99精品国产麻豆宅宅| 国产精自产拍久久久久久蜜| 国产高潮国产高潮久久久| 伊人久久综合成人网| 国产高清国内精品福利99久久| 久久综合给合久久国产免费| 国产69精品久久久久观看软件| 亚洲国产精品久久久久| 精品熟女少妇a∨免费久久| 精品国产乱码久久久久软件| 欧美粉嫩小泬久久久久久久| 91久久国产视频| 婷婷久久综合九色综合98| 亚洲av伊人久久综合密臀性色| 国产69精品久久久久观看软件| 欧美精品一区二区久久| 日本三级久久网| 中文字幕亚洲综合久久2| 国产精品久久久久久福利漫画 | 99久久久久| 国产精品成人99久久久久 | avtt天堂网久久精品| 久久国产乱子伦精品免费强| WWW婷婷AV久久久影片| 无码专区久久综合久中文字幕 |