Immediate Decodability

Immediate Decodability

An encoding of a set of symbols is said to beimmediatelydecodable if no code for one symbol is the prefix of a code for another symbol. We will assume for this problem that all codes are in binary, that no two codes within a set of codes are the same, that each code has at least one bit and no more than ten bits, and that each set has at least two codes and no more than eight.

Examples:Assume an alphabet that has symbols {A, B, C, D}

The following code is immediately decodable:

A:01 B:10 C:0010 D:0000

but this one is not:

A:01 B:10 C:010 D:0000(Note thatAis a prefix ofC)

Input

Write a program that accepts as input a series of groups of records from a data file. Each record in a group contains a collection of zeroes and ones representing a binary code for a different symbol. Each group is followed by a single separator record containing a single 9; the separator records are not part of the group. Each group is independent of other groups; the codes in one group are not related to codes in any other group (that is, each group is to be processed independently).

Output

For each group, your program should determine whether the codes in that group are immediately decodable, and should print a single output line giving the group number and stating whether the group is, or is not, immediately decodable.

The Sample Input describes the examples above.

Sample Input

0110001000009011001000009

Sample OutputSet 1 is immediately decodableSet 2 is not immediately decodable

Miguel A. Revilla2000-01-17

#include<stdio.h>#include<string.h>int main(){char set[12][12], temp[12], *str;int i, j, flag, t, n = 0, m, cnt = 0;memset(set, 0, sizeof(char)*12*12);, temp) != EOF){){cnt++;for(i=0; i<n-1; ++i){flag = 1;for(j=0; j<n-1-i; ++j){if(strlen(set[j]) > strlen(set[j+1])){strcpy(temp, set[j]); strcpy(set[j],set[j+1]); strcpy(set[j+1], temp); flag = 0;}}if(flag) break;}flag = 0;for(i=0; i<n-1; ++i){for(j=i+1; j<n; ++j){if((str = strstr(set[j], set[i])) != NULL && str – set[j] == 0){flag = 1;break;}}if(flag) break;}, cnt);, cnt);memset(set, 0, sizeof(char)*12*12);n = 0;}else strcpy(set[n++], temp);}return 0;}

解题报告:

很简单的一道题,一个排序,两个循环,时间复杂度为:O(n^2),但还是有所WA,三四天没做题好像要我的命是的,美国服务器,整天感觉空虚了什么东西,香港服务器,确实,现在做题时感觉稍微有点疏松,香港服务器租用,第二次WA的原因是因为题目没看清楚,开的数组小了,贡献了一个running error

第一次WA的原因是:

我另外开了一个数组int型的rank[12],打算在调整code的顺序时存储长度从短到长德code的下标数,如下:

for(i=0; i<n; ++i) rank[i] = i;for(i=0; i<n-1; ++i){flag = 1;for(j=0; j<n-1-i; ++j){if(strlen(set[j]) > strlen(set[j+1])) // doc 2{t = rank[j]; rank[j] = rank[j+1]; rank[j+1] = t; flag = 0;} // doc 1}if(flag) break;}flag = 0;for(i=0; i<n-1; ++i){for(j=i+1; j<n; ++j){if((str = strstr(set[rank[j]], set[rank[i]])) != NULL && str – set[rank[j]] == 0){flag = 1;break;}}if(flag) break;}

走自己的路,让人家去说吧。

Immediate Decodability

相关文章:

你感兴趣的文章:

标签云: