Un código es distinto si cada palabra de código es reconocible entre sí (es decir, se coordina la planificación desde los mensajes fuente hasta las palabras de código). Un código distinto es extraordinariamente decodificable si cada palabra de código es reconocible cuando está empapada en un grupo de palabras de código o si la disposición de la primera fuente puede rehacerse perfectamente a partir de la secuencia binaria codificada.
Prueba de decodificación única:
- Considere dos palabras de código A y B. A es de k bits y B es de n bits (k<n), si los primeros k bits de B son idénticos a A, entonces A se llama un prefijo de B, los últimos nk bits restantes se llaman como el sufijo colgante. Ejemplo: A = 010, B = 01001, el sufijo colgante es 01.
- Construya una lista de todas las palabras de código, examine todos los pares de palabras de código para ver si alguna palabra de código es un prefijo de otra, siempre que ese par esté presente agregue un sufijo colgante a la lista a menos que haya agregado el mismo sufijo colgante a la lista en una iteración anterior.
- Continúe repitiendo el procedimiento para la lista extendida hasta que se comparen todas las palabras clave.
Resultados:
- Obtiene un sufijo colgante que es una palabra clave.
- No hay ningún sufijo colgante presente.
- El sufijo colgante no es una palabra clave.
- Si obtiene el punto 5 como resultado, el código no es decodificable de forma única.
- En todos los demás casos, es decodificable de forma única.
Ejemplos:
'0, 01, 011, 0111' is an Uniquely decodable code '0, 1, 00, 11' is not an uniquely decodable code
Código:
% Given Code code = {'0','01','011','0111'}; disp(code) i = 1; flag1 = 0; % Storing the code in temp variable temp = code; % Create datastore ds = {}; while i < length(temp) j = 1; while j < length(temp) c1 = temp{i}; c2 = temp{j}; l1 = length(c1); l2 = length(c2); % To find dangling suffix if l1 < l2 if c1 == c2(1 : l1) % Extract dangling suffix after comparing codewords tsuffix = c2(l1 + 1 : l2); l = length(ds); % Append tsuffix to ds if l == 0 % If no dangling suffix available then tsuffix % is new dangling suffix ds = {tsuffix}; else k = 1; while k <= l % Compare new tsuffix with 'k'th dangling suffix flag = strcmp(tsuffix, ds{k}); if flag ~= 1; k = k + 1; end end if flag == 0 % Attach tsuffix to dangling suffix array ds = [ds {tsuffix}]; l = length(ds); end end % Append tsuffix to code lt = length(temp); k = 1; while k <= lt % Compare each extracted dangling suffix % with 'k'th original codeword flag = strcmp(tsuffix, temp{k}); if flag == 1 flag1 = 1; disp('Code is not Uniquely decodable'); break; else k = k + 1; end end if flag == 0 % Attach extracted dangling suffix array to codeword array temp = {temp(:) tsuffix}; lt = length(temp); end end end if flag1 == 1 break; end j = j + 1; end if flag1 == 1 break; end i = i + 1; end if flag1 == 0 disp('Code is Uniquely Decodable'); end
Producción:
'0' '01' '011' '0111' Code is Uniquely Decodable
Publicación traducida automáticamente
Artículo escrito por sourabhnaikssj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA