エディットグラフを理解するのに、まずその目的を知る必要がある。エデットグラフは、2つのドキュメントがどの程度相違しているかを調べる際に、比較過程を落としたグラフのことである。この文書比較(diff)は、2つの文書A,Bの最長共通部分(LCS Longuest Common Subsequence)、または最小編集距離(SED Shotest Edit Distance)を求める問題と同じ問題として認識できる。編集距離は、2つの文字列が相違している度合い(相違度)を示す尺度とも言える。
エディットグラフの具体的なやり方は、このようになっている。文書A、Bの各要素(A1 A2 ... AM, B1 B2 ... BN)をX軸Y軸上に並べ、それらの交点を縦横の辺で結合し、Aのx番目の要素とBのy番目の要素が等しい場合のみ (x-1, y-1) から (x, y) を結合したものである。
2016年8月22日月曜日
2016年8月19日金曜日
基数変換プログラム
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
char RadixConversion(void){
char num1[10]={0};
int num2[10]={0};
int size=0;
int w=0;
int w2=0;
int rdx1=0;
int rdx2=0;
int quo=0;
int rem=0;
double base=0;
int i=0;
double j=0;
char ans='N';
while(ans=='N'){
printf("Enter a number:");
scanf("%s",num1);
printf("Enter the radix:");
scanf("%d",&rdx1);
size=strlen(num1);
if(rdx1==2){
j=0;
w=0;
for(i=size-1;i>=0;i--){
num2[i]=num1[i]-0x30;
base=pow(2,j);
w=num2[i]*base+w;
j++;
}
}else if(rdx1==8){
j=0;
w=0;
for(i=size-1;i>=0;i--){
num2[i]=num1[i]-0x30;
base=pow(8,j);
w=num2[i]*base+w;
j++;
}
}else if(rdx1==10){
j=0;
w=0;
for(i=size-1;i>=0;i--){
num2[i]=num1[i]-0x30;
base=pow(10,j);
w=num2[i]*base+w;
j++;
}
}else if(rdx1==16){
j=0;
w=0;
for(i=size-1;i>=0;i--){
if(num1[i]>0x2f&&num1[i]<0x3a){
num2[i]=num1[i]-0x30;
}else if(num1[i]>0x40&&num1[i]<0x46){
num2[i]=num1[i]-0x37;
}else if(num1[i]>0x60&&num1[i]<0x67){
num2[i]=num1[i]-0x57;
}
base=pow(16,j);
w=num2[i]*base+w;
j++;
}
}
w2=w;
//入力データが2進数の場合
if(rdx1==2){
//8進
i=0;
size=0;
while(w!=0){
num2[i] = w % 8;
w = w / 8;
i++;
size++;
}
printf("Octal:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//10進
printf("Decimal:%d\t",w2);
//16進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 16;
w = w / 16;
i++;
size++;
}
printf("Hexadecimal:");
for(i=size-1;i>=0;i--){
if(num2[i]==10){
printf("A");
}else if(num2[i]==11){
printf("B");
}else if(num2[i]==12){
printf("C");
}else if(num2[i]==13){
printf("D");
}else if(num2[i]==14){
printf("E");
}else if(num2[i]==15){
printf("F");
}else{
printf("%d",num2[i]);
}
}
}
//入力データが8進数の場合
if(rdx1==8){
//2進
i=0;
size=0;
while(w!=0){
num2[i] = w % 2;
w = w / 2;
i++;
size++;
}
printf("Binary:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//10進
printf("Decimal:%d\t",w2);
//16進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 16;
w = w / 16;
i++;
size++;
}
printf("Hexadecimal:");
for(i=size-1;i>=0;i--){
if(num2[i]==10){
printf("A");
}else if(num2[i]==11){
printf("B");
}else if(num2[i]==12){
printf("C");
}else if(num2[i]==13){
printf("D");
}else if(num2[i]==14){
printf("E");
}else if(num2[i]==15){
printf("F");
}else{
printf("%d",num2[i]);
}
}
}
//入力データが10進数の場合
if(rdx1==10){
//2進
i=0;
size=0;
while(w!=0){
num2[i] = w % 2;
w = w / 2;
i++;
size++;
}
printf("Binary:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//8進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 8;
w = w / 8;
i++;
size++;
}
printf("Octal:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//16進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 16;
w = w / 16;
i++;
size++;
}
printf("Hexadecimal:");
for(i=size-1;i>=0;i--){
if(num2[i]==10){
printf("A");
}else if(num2[i]==11){
printf("B");
}else if(num2[i]==12){
printf("C");
}else if(num2[i]==13){
printf("D");
}else if(num2[i]==14){
printf("E");
}else if(num2[i]==15){
printf("F");
}else{
printf("%d",num2[i]);
}
}
}
//入力したデータが16進数の場合
if(rdx1==16){
//2進
i=0;
size=0;
while(w!=0){
num2[i] = w % 2;
w = w / 2;
i++;
size++;
}
printf("Binary:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//8進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 8;
w = w / 8;
i++;
size++;
}
printf("Octal:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
}
printf("\nDo you want to end?(Y/N)");
scanf("%s",&ans);
}
//10進
printf("Decimal:%d\t",w2);
return 0;
}
int main(void){
RadixConversion();
return 0;
}
#include <string.h>
#include <math.h>
#include <stdlib.h>
char RadixConversion(void){
char num1[10]={0};
int num2[10]={0};
int size=0;
int w=0;
int w2=0;
int rdx1=0;
int rdx2=0;
int quo=0;
int rem=0;
double base=0;
int i=0;
double j=0;
char ans='N';
while(ans=='N'){
printf("Enter a number:");
scanf("%s",num1);
printf("Enter the radix:");
scanf("%d",&rdx1);
size=strlen(num1);
if(rdx1==2){
j=0;
w=0;
for(i=size-1;i>=0;i--){
num2[i]=num1[i]-0x30;
base=pow(2,j);
w=num2[i]*base+w;
j++;
}
}else if(rdx1==8){
j=0;
w=0;
for(i=size-1;i>=0;i--){
num2[i]=num1[i]-0x30;
base=pow(8,j);
w=num2[i]*base+w;
j++;
}
}else if(rdx1==10){
j=0;
w=0;
for(i=size-1;i>=0;i--){
num2[i]=num1[i]-0x30;
base=pow(10,j);
w=num2[i]*base+w;
j++;
}
}else if(rdx1==16){
j=0;
w=0;
for(i=size-1;i>=0;i--){
if(num1[i]>0x2f&&num1[i]<0x3a){
num2[i]=num1[i]-0x30;
}else if(num1[i]>0x40&&num1[i]<0x46){
num2[i]=num1[i]-0x37;
}else if(num1[i]>0x60&&num1[i]<0x67){
num2[i]=num1[i]-0x57;
}
base=pow(16,j);
w=num2[i]*base+w;
j++;
}
}
w2=w;
//入力データが2進数の場合
if(rdx1==2){
//8進
i=0;
size=0;
while(w!=0){
num2[i] = w % 8;
w = w / 8;
i++;
size++;
}
printf("Octal:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//10進
printf("Decimal:%d\t",w2);
//16進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 16;
w = w / 16;
i++;
size++;
}
printf("Hexadecimal:");
for(i=size-1;i>=0;i--){
if(num2[i]==10){
printf("A");
}else if(num2[i]==11){
printf("B");
}else if(num2[i]==12){
printf("C");
}else if(num2[i]==13){
printf("D");
}else if(num2[i]==14){
printf("E");
}else if(num2[i]==15){
printf("F");
}else{
printf("%d",num2[i]);
}
}
}
//入力データが8進数の場合
if(rdx1==8){
//2進
i=0;
size=0;
while(w!=0){
num2[i] = w % 2;
w = w / 2;
i++;
size++;
}
printf("Binary:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//10進
printf("Decimal:%d\t",w2);
//16進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 16;
w = w / 16;
i++;
size++;
}
printf("Hexadecimal:");
for(i=size-1;i>=0;i--){
if(num2[i]==10){
printf("A");
}else if(num2[i]==11){
printf("B");
}else if(num2[i]==12){
printf("C");
}else if(num2[i]==13){
printf("D");
}else if(num2[i]==14){
printf("E");
}else if(num2[i]==15){
printf("F");
}else{
printf("%d",num2[i]);
}
}
}
//入力データが10進数の場合
if(rdx1==10){
//2進
i=0;
size=0;
while(w!=0){
num2[i] = w % 2;
w = w / 2;
i++;
size++;
}
printf("Binary:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//8進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 8;
w = w / 8;
i++;
size++;
}
printf("Octal:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//16進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 16;
w = w / 16;
i++;
size++;
}
printf("Hexadecimal:");
for(i=size-1;i>=0;i--){
if(num2[i]==10){
printf("A");
}else if(num2[i]==11){
printf("B");
}else if(num2[i]==12){
printf("C");
}else if(num2[i]==13){
printf("D");
}else if(num2[i]==14){
printf("E");
}else if(num2[i]==15){
printf("F");
}else{
printf("%d",num2[i]);
}
}
}
//入力したデータが16進数の場合
if(rdx1==16){
//2進
i=0;
size=0;
while(w!=0){
num2[i] = w % 2;
w = w / 2;
i++;
size++;
}
printf("Binary:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
//8進
w=w2;
i=0;
size=0;
while(w!=0){
num2[i] = w % 8;
w = w / 8;
i++;
size++;
}
printf("Octal:");
for(i=size-1;i>=0;i--){
printf("%d",num2[i]);
}
printf("\t");
}
printf("\nDo you want to end?(Y/N)");
scanf("%s",&ans);
}
//10進
printf("Decimal:%d\t",w2);
return 0;
}
int main(void){
RadixConversion();
return 0;
}
2016年8月17日水曜日
登録:
コメント (Atom)
