\mnb150ÿ{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\froman\fcharset1 Times New Roman;}{\f4\fmodern\fprq1 Courier New;}} {\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green0\blue255;} \deflang1031\pard\ri4\plain\f3\fs22\cf0 01. \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs22\cf1 {\pntext\f1\'b7\tab}Huffman:=proc(Alphabet) \par \pard\li600\ri1\fi-300\plain\f4\fs22\cf1 local res; \par begin \par res:=HuffmanList(Alphabet); \par if testtype(res,DOM_LIST) \par then return(res[2]) \par else return(res) \par end_if; \par end_proc: \par \pard\ri4\plain\f3\fs22\cf0 02. \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs22\cf1 {\pntext\f1\'b7\tab}string2set:=str->\{str[i] $ i=1..length(str)\}: \par \pard\li600\ri1\fi-300\plain\f4\fs22\cf1 \par HuffmanList:=proc(Alphabet) \par local j,k,alphabet,createcode,erst,zweit; \par begin \par if not abs(_plus(Alphabet[k][2] $ k=1..nops(Alphabet))-1)<0.01 \par then return("falsche Eingabe") \par end_if; \par alphabet:=Alphabet; \par createcode:=[[alphabet[k][1],[]] $ k=1..nops(alphabet)]; \par for j from 1 to nops(alphabet)-1 do \par alphabet:=sort(alphabet,(x,y)->if op(x,2)<=op(y,2) then return(TRUE) else return(FALSE) end_if ); \par erst:=alphabet[1]; \par alphabet:=alphabet[2..nops(alphabet)]; \par zweit:=alphabet[1];//return(erst[1],zweit[1],createcode); \par alphabet:=alphabet[2..nops(alphabet)]; \par for k from 1 to nops(createcode) do \par if contains(string2set(erst[1]),createcode[k][1]) \par then createcode[k][2]:=[0,op(createcode[k][2])] \par end_if; \par end_for; \par for k from 1 to nops(createcode) do \par if contains(string2set(zweit[1]),createcode[k][1]) \par then createcode[k][2]:=[1,op(createcode[k][2])] \par end_if; \par end_for; \par alphabet:=[[_concat(erst[1],zweit[1]),erst[2]+zweit[2]],op(alphabet)]; \par end_for; \par return([alphabet,createcode]) \par end_proc: \par \pard\ri4\plain\f3\fs22\cf0 03. \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs22\cf1 {\pntext\f1\'b7\tab}Alphabet:=[["A",0.1],["B",0.12],["C",0.18],["D",0.2],["E",0.4]] \par \pard\ri4\plain\f3\fs22\cf0 04. \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs22\cf1 {\pntext\f1\'b7\tab}Huffman(Alphabet) \par \pard\ri4\plain\f3\fs22\cf0 \par }