Seite 1 von 1
Huffman algo...
Verfasst: 24.02.2009 15:22
von R4z0r1989
Hey leute ich bin seit einigen tagen dran mich mit dem huffman algo auseinander zu setzen. und bitte jetzt kein "das gabs schon mal" ich weiß dass es das einmal schon gab und mich der code eindeutig nicht mag da er nur "-0" ausgibt.
und ausserdem will ich ja nicht direkt eine lösung sondern tipps und lösungsansätze da ich es doch irgendwo gern selber schaffen will auf meine schlampige weiße...
wie würdet ihr anfangen?
Welche art von verarbeitung?
Danke im voraus
Verfasst: 24.02.2009 15:31
von STARGÅTE
habs mir nie richtig angesehen, aber diese Seite hier:
Huffman - Algorithmus und Kompression
sieht recht enifach aus, und genauso würde ich ihn dann auch programmieren ...
Verfasst: 24.02.2009 15:50
von R4z0r1989
ich denk mal das stargate meinen sauereicode sehen will um vll mal zu sagen was hier ein absolutes nogo is^^
Code: Alles auswählen
Procedure ShowImage(Image)
wid = OpenWindow(#PB_Any,0,0,ImageWidth(Image)+10,ImageHeight(Image)+10,"ShowImage",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If wid
If CreateGadgetList(WindowID(wid))
ImageGadget(#PB_Any,5,5,ImageWidth(Image),ImageHeight(Image),ImageID(Image))
EndIf
Repeat
event = WaitWindowEvent()
If event = #PB_Event_CloseWindow
quit = 1
EndIf
Until quit = 1
EndIf
EndProcedure
Procedure.s RarestChar(Input.s)
Protected amount.l, rarestamount.l, rarestchar.s
Repeat
amount.l = CountString(Input.s, Left(Input.s,1))
If rarestamount.l = 0
rarestamount.l = amount.l
rarestchar.s = Left(Input.s,1)
ElseIf rarestamount.l > amount.l
rarestamount.l = amount.l
rarestchar.s = Left(Input.s,1)
EndIf
Input.s = ReplaceString(Input.s, Left(Input.s,1), "")
Until Input.s = ""
ProcedureReturn rarestchar.s
EndProcedure
Procedure.l RarestAmount(Input.s)
Protected amount.l, rarestamount.l
Repeat
amount.l = CountString(Input.s, Left(Input.s,1))
If rarestamount.l = 0
rarestamount.l = amount.l
ElseIf rarestamount.l > amount.l
rarestamount.l = amount.l
EndIf
Input.s = ReplaceString(Input.s, Left(Input.s,1), "")
Until Input.s = ""
ProcedureReturn rarestamount.l
EndProcedure
Input$ = "mississippi"
Structure chars
Char.s
Amount.l
EndStructure
NewList TreeBeginn.chars()
NewList TreeEdit.chars()
Repeat
AddElement(TreeBeginn())
TreeBeginn()\Char = RarestChar(Input$)
TreeBeginn()\Amount = RarestAmount(Input$)
Input$ = ReplaceString(Input$, TreeBeginn()\Char, "")
Until Input$ = ""
CreateImage(0,300,300)
StartDrawing(ImageOutput(0))
ResetList(TreeBeginn())
While NextElement(TreeBeginn())
i + 25
Circle(i-10,280-10,10,RGB(0,255,0))
DrawingMode(1)
DrawText(i-10-TextWidth(TreeBeginn()\Char)/2,280-10-TextHeight(TreeBeginn()\Char)/2,TreeBeginn()\Char,RGB(255,0,0))
DrawText(i-10-TextWidth(TreeBeginn()\Char)/2,280,Str(TreeBeginn()\Amount),RGB(0,255,255))
Wend
StopDrawing()
ResetList(TreeBeginn())
NextElement(TreeBeginn())
plus1 = TreeBeginn()\Amount
NextElement(TreeBeginn())
plus2 = TreeBeginn()\Amount
Debug plus1 + plus2
ShowImage(Image)
FreeImage(0)
danke im voraus