青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
數(shù)據(jù)加載中……

POJ 1147 Binary codes 壓縮算法:Burrows Wheeler transform

題目大意:
給出一個(gè)01字符串。將其循環(huán)移位,將所有移位后的串列舉出來,并按字典序排序。
比如“abcd”,可以移位成“bcda”,“cdab”,“dabc”。排序以后,為
“abcd”
“bcda”
“cdab”
“dabc”
將最后一列的字母抽取出來,即“dabc”。
然后,讓你還原出第一行的字符。

這是一個(gè)看上去很蛋疼的問題,沒事研究這個(gè)干啥呢。
想了半天,做不出來。看到discuss里面有人給了一個(gè)鏈接:
http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform

發(fā)現(xiàn)居然是一個(gè)壓縮算法!
據(jù)說,將最后一列抽取出來,較原字符串相比,能夠
“easy to compress a string that has runs of repeated characters by techniques such as move-to-front transform and run-length encoding.”
這個(gè)就不理解了。。

這題簡化了一下條件,字符串只包含01。

看了它的還原方法。如果直接這樣寫:
def ibwt(r):
"""Apply inverse Burrow-Wheeler transform."""
table = [""] * len(r)  # Make empty table
for i in range(len(r)):
table = [r[i] + table[i] for i in range(len(r))]  # Add a column of r
table.sort()
s = [row for row in table if row.endswith("\0")][0]  # Find the correct row (ending in "\0")
return s.strip("\0")  # Get rid of trailing null character
還是復(fù)雜度很高,為 O(N*N*lgN)。

那disscus里面說的O(N)的方法和那么多0ms是咋來的呢?

想了一下。發(fā)現(xiàn)每一次添加列然后再排序的操作,都是做一樣的置換。
因?yàn)槊看翁砑拥牧卸家粯樱判虻慕Y(jié)果當(dāng)然也是一樣(比如是穩(wěn)定排序)。
所以,第i列的結(jié)果就是置換i次的結(jié)果。我們只需要第一行的數(shù)據(jù)。
經(jīng)過一次排序之后,就知道每一個(gè)行置到了哪個(gè)地方,如果第三行到了第一行,第五行到了第三行。
那么:
第一列第一行的就是未排序數(shù)據(jù)的第三行
第二列第一行的就是未排序數(shù)據(jù)的第五行

由于數(shù)據(jù)中只有01,完全可以在O(N)內(nèi)完成排序操作,之后得出第一行的操作也是 O(N) 完成的。
可惜代碼實(shí)現(xiàn)出來,也沒有到 0ms ,好像是 79ms 。代碼寫得爛!高手改改也是0ms了。
代碼里也包括了一個(gè)求普通字符串的BWT操作。

#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>

int cmp(const void *a, const void *b)
{
    
return strcmp(*(char **)a, *(char **)b);
}


void bwt(char *inchar *out)
{
    
static char arr[32][32], *sorted[32];
    
int len, i, j;

    len 
= strlen(in);
    
for (i = 0; i < len; i++{
        sorted[i] 
= arr[i];
        
for (j = 0; j < len; j++)
            sorted[i][j] 
= in[(i + j) % len];
        sorted[i][len] 
= 0;
    }


    qsort(sorted, len, 
sizeof(sorted[0]), cmp);
    
for (i = 0; i < len; i++
        printf(
"%s\n", sorted[i]);

    
for (i = 0; i < len; i++)
        
out[i] = sorted[i][len - 1];
    
out[i] = 0;
}


int cmp2(const void *a, const void *b)
{
    
if (*(int *)a == *(int *)b)
        
return *((int *)a + 1- *((int *)b + 1);
    
else
        
return *(int *)a - *(int *)b;
}


void ibwt(char *inchar *out)
{
    
struct {
        
int ch, idx;
    }
 arr[32];
    
int i, len, j;

    len 
= strlen(in);
    
for (i = 0; i < len; i++{
        arr[i].ch 
= in[i];
        arr[i].idx 
= i;
    }

    qsort(arr, len, 
sizeof(arr[0]), cmp2);
    
for (i = 0; i < len; i++)
        printf(
"%c %d\n", arr[i].ch, arr[i].idx);
    j 
= arr[0].idx;
    
for (i = 0; i < len - 1; i++{
        
out[i] = in[j];
        j 
= arr[j].idx;
    }

    
out[len - 1= in[0];
    
out[len] = 0;
    printf(
"%s\n"out);
}


void test()
{
    
char in[32], out[32], res[32];

    strcpy(
in"banana");
    bwt(
inout);
    printf(
"out:\n%s\n"out);
    ibwt(
out, res);
}


int main()
{
    
static int map[3032], arr[3032], n, val, one[3032], one_cnt, zero_cnt, i;
    
    freopen(
"e:\\test\\in.txt""r", stdin);

    scanf(
"%d"&n);
    
for (i = 0; i < n; i++{
        scanf(
"%d"&val);
        arr[i] 
= val;
        
if (val)
            one[one_cnt
++= i;
        
else
            map[zero_cnt
++= i;
    }

    
for (i = 0; i < one_cnt; i++
        map[zero_cnt 
+ i] = one[i];

    val 
= map[0];
    
for (i = 0; i < n - 1; i++{
        printf(
"%d ", arr[val]);
        val 
= map[val];
    }

    printf(
"%d\n", arr[0]);
    
    
return 0;
}

posted on 2010-02-28 19:02 糯米 閱讀(1272) 評論(1)  編輯 收藏 引用 所屬分類: POJ

評論

# re: POJ 1147 Binary codes 壓縮算法:Burrows Wheeler transform  回復(fù)  更多評論   

what a pity. 還是沒看明白。
可以發(fā)一份這個(gè)壓縮算法的原理給我嗎?謝謝~~
2011-10-20 11:33 | Nicole Yi
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲成人原创| 久久国产精品久久精品国产| 国产精品久久久久久久久久妞妞| 免费欧美在线视频| 亚洲欧美日韩另类| 亚洲图片欧洲图片av| 亚洲国产精品va在线看黑人动漫| 亚洲国产欧美一区| 国产婷婷色一区二区三区| 国产伦精品一区二区三区| 国产精品私房写真福利视频| 欧美午夜在线视频| 精品999日本| 99re在线精品| 欧美一区二区三区免费观看| 久久se精品一区二区| 欧美成人中文字幕| 亚洲激情黄色| 久久久www| 欧美国产日本| 国产精品网红福利| 亚洲乱码久久| 另类激情亚洲| 在线视频欧美一区| 欧美电影免费观看| 久久婷婷国产综合精品青草 | av成人免费在线观看| 一本综合久久| 久久躁狠狠躁夜夜爽| 亚洲精品在线免费| 久久美女性网| 国产一区二区三区在线观看免费视频| 91久久极品少妇xxxxⅹ软件| 亚洲综合精品| 亚洲精品在线观看视频| 蜜桃av噜噜一区二区三区| 国产精品一二三四| 亚洲婷婷在线| 夜夜嗨av一区二区三区四区| 另类av导航| 亚洲激情网站| 欧美激情一二三区| 欧美精品一区二区三区蜜桃 | 久久国产精品99国产精| 亚洲一区二区三区高清不卡| 欧美日韩精品免费| 亚洲一区中文| 欧美诱惑福利视频| 在线播放豆国产99亚洲| 欧美高清视频在线播放| 免费毛片一区二区三区久久久| 亚洲片国产一区一级在线观看| 免费不卡在线观看| 老司机精品视频网站| 亚洲天堂免费观看| 亚洲国产欧美在线人成| 91久久综合亚洲鲁鲁五月天| 国产精品久久久久久久一区探花| 欧美一区不卡| 欧美激情精品久久久久久免费印度 | 亚洲视频在线一区| 国产日韩精品在线观看| 亚洲国产成人精品女人久久久 | 国产亚洲成av人片在线观看桃| 美国成人毛片| 国产精品一区在线观看你懂的| 久久亚裔精品欧美| 国产精品萝li| 在线视频日本亚洲性| 亚洲看片网站| 免费日韩视频| 免费在线观看精品| 久久精品国产99国产精品| 亚洲国产精品久久久久久女王| 新67194成人永久网站| 亚洲欧美日韩综合一区| 欧美精品v日韩精品v韩国精品v | 久久九九热免费视频| 欧美性视频网站| 在线一区视频| 亚洲性人人天天夜夜摸| 欧美精品免费在线| 亚洲激情国产| 亚洲一区二区成人| 国产精品五月天| 欧美一二三视频| 老司机午夜免费精品视频| 国产亚洲欧美激情| 久久国产精品一区二区| 久久综合伊人77777| 亚洲国产成人精品久久| 欧美激情精品久久久| 日韩一区二区精品葵司在线| 亚洲欧美一区二区精品久久久| 国产精品久久久久一区二区三区| 亚洲综合成人婷婷小说| 久久精品国产69国产精品亚洲| 在线精品福利| 国产精品xvideos88| 久久亚洲一区| 久久久www| 亚洲综合首页| 日韩午夜视频在线观看| 欧美国产免费| 久久精品毛片| 亚洲一区免费网站| 亚洲激情二区| 黄色精品网站| 韩国av一区二区| 国产欧美大片| 国产一区二区三区久久| 国产欧美一区二区三区久久| 国产精品大片wwwwww| 欧美日韩成人免费| 欧美激情综合在线| 欧美激情一区二区三区全黄| 久久久蜜桃一区二区人| 欧美在线观看视频一区二区| 亚洲四色影视在线观看| 狠狠色综合网| 在线播放日韩专区| 亚洲第一页中文字幕| 亚洲电影一级黄| 亚洲乱码日产精品bd| 在线综合亚洲| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美影音先锋| 久久在线免费观看| 亚洲三级电影全部在线观看高清| 亚洲精品极品| 香蕉av777xxx色综合一区| 开元免费观看欧美电视剧网站| 欧美成人免费网| 国产精品视频自拍| 亚洲精品三级| 久久婷婷影院| 一区二区三区日韩欧美| 欧美在线视频a| 国产精品久久久久久久久久尿| 国产一区二区三区在线观看视频| 亚洲精品免费在线| 久久精品国产亚洲一区二区| 亚洲韩日在线| 久久亚洲精品视频| 国产亚洲精品福利| 欧美一区二区三区成人| 亚洲看片网站| 欧美极品一区| 亚洲美女av在线播放| 欧美xxx成人| 久久夜色精品国产欧美乱极品| 国产欧美日韩激情| 欧美在线免费视频| 亚洲网站在线| 国产精品视频免费观看www| 亚洲人成在线播放| 亚洲国产精品成人综合| 久久一区二区三区超碰国产精品| 国产视频欧美| 乱码第一页成人| 欧美 日韩 国产在线| 亚洲高清免费在线| 亚洲精品久久嫩草网站秘色 | 国产一区二区三区久久| 国产一区二区三区四区三区四| 久久亚洲综合色| 欧美激情精品久久久六区热门| 亚洲精品免费看| 一本久久青青| 国内精品视频一区| 欧美v国产在线一区二区三区| 欧美成人综合一区| 亚洲欧美精品伊人久久| 久久gogo国模裸体人体| 亚洲国产婷婷香蕉久久久久久99| 欧美激情综合色| 国产精品一区二区久久精品| 六十路精品视频| 国产精品久久77777| 欧美成人精品福利| 国产伦精品一区二区三区高清版| 欧美韩国日本一区| 国产精品嫩草久久久久| 欧美国产日韩亚洲一区| 欧美四级剧情无删版影片| 美女精品视频一区| 狠狠色丁香婷婷综合久久片| 亚洲看片免费| 99热这里只有成人精品国产| 久久午夜羞羞影院免费观看| 久久九九久精品国产免费直播| 欧美日韩国产成人| 欧美好骚综合网| 亚洲福利av| 久久久久久久性| 狂野欧美激情性xxxx欧美| 国产视频精品免费播放| 午夜激情亚洲| 久久精品国产免费观看| 国产一区二区三区自拍|