Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
53
Task/Huffman-coding/BBC-BASIC/huffman-coding.basic
Normal file
53
Task/Huffman-coding/BBC-BASIC/huffman-coding.basic
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
INSTALL @lib$+"SORTSALIB"
|
||||
SortUp% = FN_sortSAinit(0,0) : REM Ascending
|
||||
SortDn% = FN_sortSAinit(1,0) : REM Descending
|
||||
|
||||
Text$ = "this is an example for huffman encoding"
|
||||
|
||||
DIM tree{(127) ch&, num%, lkl%, lkr%}
|
||||
FOR i% = 1 TO LEN(Text$)
|
||||
c% = ASCMID$(Text$,i%)
|
||||
tree{(c%)}.ch& = c%
|
||||
tree{(c%)}.num% += 1
|
||||
NEXT
|
||||
|
||||
C% = DIM(tree{()},1) + 1
|
||||
CALL SortDn%, tree{()}, tree{(0)}.num%
|
||||
FOR i% = 0 TO DIM(tree{()},1)
|
||||
IF tree{(i%)}.num% = 0 EXIT FOR
|
||||
NEXT
|
||||
size% = i%
|
||||
|
||||
linked% = 0
|
||||
REPEAT
|
||||
C% = size%
|
||||
CALL SortUp%, tree{()}, tree{(0)}.num%
|
||||
i% = 0 : WHILE tree{(i%)}.lkl% OR tree{(i%)}.lkr% i% += 1 : ENDWHILE
|
||||
tree{(i%)}.lkl% = size%
|
||||
j% = 0 : WHILE tree{(j%)}.lkl% OR tree{(j%)}.lkr% j% += 1 : ENDWHILE
|
||||
tree{(j%)}.lkr% = size%
|
||||
linked% += 2
|
||||
tree{(size%)}.num% = tree{(i%)}.num% + tree{(j%)}.num%
|
||||
size% += 1
|
||||
UNTIL linked% = (size% - 1)
|
||||
|
||||
FOR i% = size% - 1 TO 0 STEP -1
|
||||
IF tree{(i%)}.ch& THEN
|
||||
h$ = ""
|
||||
j% = i%
|
||||
REPEAT
|
||||
CASE TRUE OF
|
||||
WHEN tree{(j%)}.lkl% <> 0:
|
||||
h$ = "0" + h$
|
||||
j% = tree{(j%)}.lkl%
|
||||
WHEN tree{(j%)}.lkr% <> 0:
|
||||
h$ = "1" + h$
|
||||
j% = tree{(j%)}.lkr%
|
||||
OTHERWISE:
|
||||
EXIT REPEAT
|
||||
ENDCASE
|
||||
UNTIL FALSE
|
||||
VDU tree{(i%)}.ch& : PRINT " " h$
|
||||
ENDIF
|
||||
NEXT
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue