Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Метод Хаффмена Добавлено: 08.03.04 19:32  

Автор вопроса:  Yeputons | ICQ: 278444762 

Ответить

  Ответы Всего ответов: 21  

Номер ответа: 16
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #16 Добавлено: 14.04.04 11:25
А поподробней можно?  У меня есть массив узлов.  У каждого узла есть следующие свойства: символ, позиция (право или лево) и родительский узел.  Может кинуть сюда код модуля?

Ответить

Номер ответа: 17
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #17 Добавлено: 14.04.04 12:34
А поподробней можно?  У меня есть массив узлов. У каждого узла есть 3 свойства: символ, позиция (право илил лево) и родительский узел.  Может кинуть сюда код модуля?

Ответить

Номер ответа: 18
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #18 Добавлено: 14.04.04 15:10

Вот тебе код модуля:

Option Explicit

Private Type Node

Value As Long

Position As Boolean

ParentNode As Long

End Type

Dim Tree(255) As Node

Dim TreeExist As Boolean

Public Event ChangeProcent(ByVal Procent As Byte)

Public Sub CreateTree()

Dim I As Long

Dim NP As Boolean 'Новая позиция

Dim NPN As Long 'Новый верхний узел

Dim APN As Byte 'Повтор верхнего узла

DeleteTree

NPN = -1: APN = 1

For I = 0 To 255

With Tree(I)

.Value = I

.Position = NP

.ParentNode = NPN

End With

APN = APN + 1

If APN = 3 Then APN = 1: NPN = I

If NPN = -1 Then APN = 1: NPN = 0

NP = Not NP

RaiseEvent ChangeProcent(CByte(I / 2.55))

DoEvents

Next I

TreeExist = True

End Sub

Public Sub CompressFile(ByVal Source As String, ByVal Destination As String)

On Error GoTo RTE

Dim Bytes() As Byte, Count As Long

If Not FileExist(Source) Then

Err.Raise vbObjectError, "TextSystem.Compress.CompressFile(" & Source & ", " & Destination & ")", "Source file not exist"

End If

Open Source For Binary As #1

ReDim Bytes(LOF(1))

Count = LOF(1) + 1

Get #1, , Bytes()

Close #1

CompressBytes Bytes(), Count

ReDim Preserve Bytes(Count - 1)

If FileExist(Destination) Then Kill Destination

Open Destination For Binary As #1

Put #1, , Bytes()

Close #1

Exit Sub

RTE:

If Err.Number = 75 Then Err.Raise vbObjectError, "TextSystem.Compress.CompressFile(" & Source & ", " & Destination & ")", "File """ & Destination & """ can not open for write"

End Sub

Public Function CompressString(ByVal Str As String) As String

Dim Bytes() As Byte, Count As Long

Bytes() = StrConv(Str, vbFromUnicode)

Count = Len(Str)

CompressBytes Bytes(), Count

ReDim Preserve Bytes(Count - 1)

CompressString = StrConv(Bytes(), vbUnicode)

ReDim Bytes(0)

Count = 0

End Function

Public Function CompressBytes(ByteArray() As Byte, Count As Long)

Dim I As Long

Dim Bytes() As String

End Function

Public Function FileExist(FileName As String) As Boolean

On Error GoTo RTE

FileLen FileName

FileExist = True

Exit Function

RTE:

If Err.Number = 53 Then FileExist = False

End Function

Public Sub DeleteTree()

Dim I As Long

For I = 0 To 255

With Tree(I)

.Value = -1

.Position = True

.ParentNode = -1

End With

Next I

TreeExist = False

End Sub

Private Function GetHuffmanCode(Symbol As String) As String

Dim I As Long, NodeCode As Long

Symbol = Left(Symbol, 1)

For I = 0 To 255

If Tree(I).Value = Asc(Symbol) Then NodeCode = I: Exit For

Next I

While Tree(I).ParentNode <> -1

GetHuffmanCode = GetHuffmanCode & CStr(Abs(Tree(I).Position))

I = Tree(I).ParentNode

Wend

End Function

Ответить

Номер ответа: 19
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #19 Добавлено: 15.04.04 18:56
Правда тела у функции "CompressBytes" еще нет.

Ответить

Номер ответа: 20
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #20
Добавлено: 15.04.04 22:39

Ну если интерестно можешь посмотреть и на эту вариацию Хафмана....

http://mudator.by.ru/UoHuffman.zip

Как то занимался (да и счас немного) програмированием под игру UltimaOnline.... вообщем это вариант клиента для неё... без крипта используется только ... сжатие по хафману.... портировалось с программы Injection...

смотри класс..

Ответить

Номер ответа: 21
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #21
Добавлено: 15.04.04 22:40

Ну если интерестно можешь посмотреть и на эту вариацию Хафмана....

http://mudator.by.ru/UoHuffman.zip

Как то занимался (да и счас немного) програмированием под игру UltimaOnline.... вообщем это вариант клиента для неё... без крипта используется только ... сжатие по хафману.... портировалось с программы Injection...

смотри класс..

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам