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

糯米

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

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

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

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

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

這題簡化了一下條件,字符串只包含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
還是復雜度很高,為 O(N*N*lgN)。

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

想了一下。發現每一次添加列然后再排序的操作,都是做一樣的置換。
因為每次添加的列都一樣,排序的結果當然也是一樣(比如是穩定排序)。
所以,第i列的結果就是置換i次的結果。我們只需要第一行的數據。
經過一次排序之后,就知道每一個行置到了哪個地方,如果第三行到了第一行,第五行到了第三行。
那么:
第一列第一行的就是未排序數據的第三行
第二列第一行的就是未排序數據的第五行

由于數據中只有01,完全可以在O(N)內完成排序操作,之后得出第一行的操作也是 O(N) 完成的。
可惜代碼實現出來,也沒有到 0ms ,好像是 79ms 。代碼寫得爛!高手改改也是0ms了。
代碼里也包括了一個求普通字符串的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 糯米 閱讀(1271) 評論(1)  編輯 收藏 引用 所屬分類: POJ

評論

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

what a pity. 還是沒看明白。
可以發一份這個壓縮算法的原理給我嗎?謝謝~~
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>
            亚洲精品欧美在线| 亚洲国产精品久久久久| 亚洲一级片在线观看| 亚洲麻豆国产自偷在线| 亚洲精品美女在线观看| 亚洲国内在线| 91久久国产综合久久| 亚洲最新在线| 欧美伊人久久久久久午夜久久久久| 欧美在线观看你懂的| 麻豆成人av| 欧美日本在线视频| 国产精品美女主播| 国产视频一区在线观看一区免费| 激情视频亚洲| 一本到12不卡视频在线dvd| 亚洲香蕉网站| 久久综合狠狠| 在线视频亚洲| 麻豆成人在线播放| 国产精品夫妻自拍| 在线播放日韩| 亚洲一区欧美| 欧美国产第一页| 亚洲在线一区二区三区| 久久综合福利| 国产精品一区在线观看| 亚洲欧洲日韩女同| 久久国产一区| 日韩视频免费观看高清在线视频| 欧美亚洲在线视频| 欧美日韩另类一区| 伊人精品成人久久综合软件| 亚洲无限乱码一二三四麻| 麻豆av一区二区三区久久| 一区二区国产日产| 欧美成人精品1314www| 国产一区二区0| 亚洲免费影院| 日韩一级裸体免费视频| 男同欧美伦乱| 曰韩精品一区二区| 欧美综合激情网| 一区二区激情| 欧美日韩你懂的| 日韩视频在线你懂得| 美女国产精品| 久久精品国产免费观看| 国产视频精品xxxx| 性欧美激情精品| 在线视频欧美日韩| 欧美三区美女| 99在线精品观看| 亚洲欧洲一区二区三区| 一本色道久久88精品综合| 亚洲精品国产品国语在线app| 亚洲一线二线三线久久久| 欧美日韩精品免费看| 99视频精品| 日韩午夜中文字幕| 欧美伦理在线观看| 一区二区三区国产在线观看| 91久久国产自产拍夜夜嗨| 欧美精品一区二区三区四区| 日韩一级成人av| aⅴ色国产欧美| 国产精品入口麻豆原神| 欧美在线精品免播放器视频| 小黄鸭精品aⅴ导航网站入口| 国产主播在线一区| 免费视频最近日韩| 欧美激情小视频| 国产精品99久久久久久久女警 | 久久久久久一区二区三区| 韩国一区二区在线观看| 久久综合一区| 欧美电影免费| 亚洲午夜久久久久久久久电影院| 亚洲视频一二三| 国模大胆一区二区三区| 欧美国产三区| 国产精品高清在线| 久久久水蜜桃av免费网站| 美女露胸一区二区三区| 亚洲一本视频| 久久久亚洲国产天美传媒修理工| 91久久一区二区| 亚洲一区二区三区免费在线观看| 国产亚洲欧美日韩美女| 亚洲国产欧美一区二区三区久久| 国产精品成人一区二区艾草| 久久久久一本一区二区青青蜜月| 欧美福利电影网| 欧美一区二区三区免费在线看| 久久久久网址| 午夜精品久久久久影视| 久久亚洲欧美| 亚洲一区二区在线| 久久久无码精品亚洲日韩按摩| 艳妇臀荡乳欲伦亚洲一区| 性色av一区二区三区在线观看 | 亚洲精品久久嫩草网站秘色| 国产伪娘ts一区| 亚洲精品网址在线观看| 国内久久婷婷综合| 一区二区三区欧美在线| 在线免费一区三区| 亚洲一区二区三区中文字幕在线| 亚洲国产欧美国产综合一区| 一区二区三区四区五区视频| 久久久久一区二区三区| 亚洲专区国产精品| 欧美va天堂在线| 久久精品中文| 国产精品揄拍500视频| 亚洲美女中文字幕| 亚洲电影自拍| 久久久www成人免费精品| 亚洲欧美综合| 欧美日韩精品欧美日韩精品一| 欧美jizz19hd性欧美| 国产一区自拍视频| 亚洲综合清纯丝袜自拍| 亚洲夜间福利| 欧美视频在线一区| 99热这里只有成人精品国产| 日韩亚洲欧美一区| 欧美激情亚洲国产| 欧美激情一区二区在线| 亚洲福利免费| 麻豆精品视频在线观看视频| 另类尿喷潮videofree| 国产一区免费视频| 欧美一区=区| 久久精品最新地址| 国内外成人在线| 久久精品久久99精品久久| 久久久久久久999| 韩国成人福利片在线播放| 欧美一级艳片视频免费观看| 久久av一区| 伊人久久亚洲美女图片| 久久精品论坛| 欧美激情亚洲另类| 99热这里只有成人精品国产| 欧美日韩三区四区| 亚洲性线免费观看视频成熟| 亚洲欧美成人综合| 国产欧美一区二区视频| 欧美一区免费| 欧美激情成人在线| 99re亚洲国产精品| 欧美性开放视频| 性欧美8khd高清极品| 欧美wwwwww| 亚洲一区二区四区| 国产一区二区黄色| 久久综合中文字幕| 亚洲精品在线看| 欧美亚洲自偷自偷| 在线免费观看一区二区三区| 欧美精品久久久久久久免费观看 | 午夜在线不卡| 欧美777四色影视在线| 亚洲伦理在线免费看| 国产精品一区免费观看| 久久亚洲国产精品一区二区| 亚洲日本欧美天堂| 欧美主播一区二区三区美女 久久精品人| 国产在线视频欧美| 欧美久久成人| 欧美中文在线字幕| 亚洲美女精品一区| 久久久蜜桃一区二区人| 一区二区激情| 在线看国产一区| 国产精品国产三级国产普通话三级| 欧美一区二区福利在线| 亚洲国产欧美一区二区三区久久| 亚洲精品一区二区网址 | 国产精品欧美一区二区三区奶水| 欧美在线黄色| 日韩亚洲综合在线| 免费高清在线视频一区·| 一区二区三区精品| 亚洲成人在线免费| 国产九色精品成人porny| 欧美xart系列高清| 久久成人一区二区| 亚洲视频狠狠| 亚洲激情专区| 欧美成年人视频| 久久久久五月天| 欧美一区二视频在线免费观看| 99精品国产热久久91蜜凸| 国产片一区二区| 国产精品私拍pans大尺度在线| 欧美激情亚洲视频| 六月婷婷一区| 久久野战av|