2011年12月20日
湘南工科大学
情報理論2
第11回
小林 学
〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25
Tel.
0466-30-0232(直通)
Fax.
0466-34-5932
[email protected]
[前回の課題1解答] 系列「ABCABCBCACCACCB」をLZ77符号
で符号化しなさい.
これから符号化する系列
0 1 2 3 4 5 6 7
出力
A A A A A A A A A B C A B C B C (0,1,B)
A A A A A A A B C A B C B C A C (0,0,C)
A A A A B A B C A B C B C A C C (5,3,B)
B A B C A B C B C A C C A C C B (3,2,C)
C A B C B C A C C A C C B
C A C C A C C B
符号化する系列が空なので,終了
(5,4,B)
[前回の課題2解答] 配列Strの中身を左へnずらす(シフトする)関数
Shiftを作成しなさい
#include<stdio.h>
char Str[10]="ababbaaba";
void Shift(int n){
int i;
for(i=0 ; i<10-n ; i++) Str[i]=Str[i+n];
}
void main(void){
int n=3;
printf("ずらす前の文字列:%s\n", Str);
Shift(n);
printf("ずらした後の文字列:%s\n", Str);
}
実行結果
[前回の課題3解答] 配列Str1のp番目からとStr2の先頭からの一致
文字数を計算する関数Icchichoのプログラムを作成しなさい
#include<stdio.h>
char Str1[10]="ababbaaba", Str2[10]="abbababba";
int Icchicho(int p){
int i, count=0;
for(i=0;i<9;i++){
if(Str1[i+p]!=Str2[i]) break;
count++;
実行結果
}
return(count);
}
void main(void){
int ans, p=2;
ans = Icchicho(p);
printf("一致した文字の数:%d\n", ans);
}
[前回の課題4解答] 課題1の関数Icchichoを利用して,Str1の全て
の位置とStr2の先頭からとの一致長を出力するプログラムを作成
しなさい
#include<stdio.h>
char Str1[10]="ababbaaba", Str2[10]="abbababba";
int Icchicho(int p){省略}
void main(void){
int ans, p;
for(p=0;p<9;p++){
ans = Icchicho(p);
printf("%d番目から一致した文字の数:%d\n", p, ans);
}
}
実行結果
[課題1]前回の課題4のプログラムを改良して,全ての一致長を配
列Icchi[]に入れなさい.
#include<stdio.h>
char Str1[10]="ababbaaba", Str2[10]="abbababba";
int Icchi[9];
int Icchicho(int p){省略}
void main(void){
int ans, p;
for(p=0;p<9;p++) ??? = Icchicho(p);
}
[課題2]課題1のプログラムを改良して,配列Icchi[]の中の最大の
位置MaxPositionと最大値MaxValueを出力する関数Max()
を作りなさい.
#include<stdio.h>
char Str1[10]="ababbaaba", Str2[10]="abbababba";
int Icchi[9],MaxPosition,MaxValue;//グローバル変数
int Icchicho(int p){省略}
void Max(void){
???
//ここを作成!!
printf("最大の位置:%d,最大値:%d", MaxPosition,
MaxValue) ;
}
void main(void){
int ans, p;
for(p=0;p<9;p++) ??? = Icchicho(p);
Max();
}
[課題3]今までの課題を参考にして,LZ77符号の符号化
プログラムを作成しなさい.
#include<stdio.h>
char Str[17]="AAAAAAAAABABCAD";
int Icchi[8],MaxPosition,MaxValue;
int Icchicho(???){省略}
//ちょっと変える必要あり
void Shift(???){省略}
void Max(void){省略}
void main(void){
int p;
while(1){//無限ループ
??? //参照部と符号化部の全ての一致長の計算
??? //一致長の最大の位置と最大値を計算
printf("%s\n", Str);
printf("(%d,%d,%c)\n", ???);
実行結果
??? //シフト
if(Str[8]==0) break;
}
printf("%s\n", Str);
}
ダウンロード

第11回資料