学院首页>网络编程>ASP.NET>LZW算法的 C#实现

LZW算法的 C#实现

作者: 来源: 添加时间:2006-5-21 19:49:36

#undef debug
#define debugdisplay
#undef debugdictionary
using System;
using System.Collections;

namespace LZW
{
 public class cLZW
 {
  #region Constrcut
  public cLZW()
  {
  }
  #endregion
  
  #region Coding
  public string InCharStream
  {
set { _InCharStream = value; }
get {return _InCharStream; }
  }
  public ArrayList CodingCodeStream
  {
get {return _CodingCodeStream;}
  }
  public ArrayList CodingDictionary
  {
get {return _CodingDictionary;}
  }
  private void InitCodingDictionary()
  {
_CodingDictionary.Clear();
#if debug
_CodingDictionary.Add("A");
_CodingDictionary.Add("B");
_CodingDictionary.Add("C");
#else
for(int i = 0; i < 256; i++)
{
 _CodingDictionary.Add((char)i);
}
#endif
  }
  private void AddCodingDictionary(object str)
  {
_CodingDictionary.Add(str);
  }
  private void AddCodingCodeStream(object str)
  {
_CodingCodeStream.Add(str);
  }
  private bool ISInCodingDictionary(string Prefix)
  {
bool result = false;
int  count = _CodingDictionary.Count;
for(int i = 0; i < count; i++)
{
 string temp = _CodingDictionary[i].ToString();
 if (temp.IndexOf(Prefix) >= 0)
 {
  result = true;
  break;
 }
}
return result;
  }
  private string  GetIndexCodingDictionary(string Prefix)
  {
string result ="0";
int  count = _CodingDictionary.Count;
for(int i = 0; i < count; i++)
{
 string temp = _CodingDictionary[i].ToString();
 if (temp.IndexOf(Prefix) >= 0)
 {
  result = Convert.ToString(i + 1);
  break;
 }
}
return result;
  }
  private void DisplayCodingCodeStream()
  {
System.Console.WriteLine("*********_CodingCodeStream************");
for(int i = 0; i < _CodingCodeStream.Count; i++)
{
 System.Console.WriteLine(_CodingCodeStream[i].ToString());
}
  }
  private void DisplayCodingDictionary()
  {
System.Console.WriteLine("*********_CodingDictionary************");
for(int i = 0; i < _CodingDictionary.Count; i++)
{
 System.Console.WriteLine(_CodingDictionary[i].ToString());
}
  }
  private void DisplayInCharStream()
  {
System.Console.WriteLine("*********_InCharStream************");
System.Console.WriteLine(_InCharStream);
  }
  private void InitCodingCodeStream()
  {
_CodingCodeStream.Clear();
  }
  private ArrayList _CodingDictionary = new ArrayList();
  private string _InCharStream = "";
  private ArrayList _CodingCodeStream = new ArrayList();
  public void Coding()
  {
string Prefix ="" ;
string c ="";
string PrefixIndex= "0";
int  count = _InCharStream.Length;
if (count == 0) return ;
InitCodingDictionary();
InitCodingCodeStream();
Prefix = _InCharStream[0].ToString();
for(int i = 1; i < count; i++)
{
 c = _InCharStream[i].ToString();
 if (ISInCodingDictionary( Prefix + c))
 {
  Prefix += c;
 }
 else
 {
  PrefixIndex = GetIndexCodingDictionary(Prefix);
  AddCodingCodeStream(PrefixIndex);
  AddCodingDictionary( Prefix + c);
  Prefix = c;
 }
}
PrefixIndex = GetIndexCodingDictionary(Prefix);
AddCodingCodeStream(PrefixIndex);
#if debugdisplay
DisplayInCharStream();
DisplayCodingCodeStream();
#if debugdictionary
DisplayCodingDictionary();
#endif
#endif
  }
  
  #endregion
  
  #region Decode
  private ArrayList _DeCodeDictionary = new ArrayList();
  private ArrayList _OutCharStream = new ArrayList();
  private int[] _DeCodeCodeStream ;
  public void SetDeCodeSCodetream(int[] obj)
  {
int count = obj.Length;
_DeCodeCodeStream = new int[count];
for(int i =0; i < count ; i++)
{
 _DeCodeCodeStream[i] = obj[i];
}
  }
  public void SetDeCodeSCodetream(ArrayList obj)
  {
int count = obj.Count;
_DeCodeCodeStream = new int[count];
for(int i =0; i < count ; i++)
{
 _DeCodeCodeStream[i] = System.Convert.ToInt32(obj[i]);
}
  
  }
  public int[] GetDeCodeCodeStream()
  {
return _DeCodeCodeStream;
  }
  public string OutCharStream
  {
get
{
 string result = "";
 for(int i = 0,count = _OutCharStream.Count; i < count; i++)
 {
  result += _OutCharStream[i].ToString();
 }
 return result;
}
  }
  public ArrayList DeCodeDictionary
  {
get
{
 return _DeCodeDictionary;
}
  }
  private void InitDeCodeDictionary()
  {
_DeCodeDictionary.Clear();
#if debug
_DeCodeDictionary.Add("A");
_DeCodeDictionary.Add("B");
_DeCodeDictionary.Add("C");
#else
for(int i = 0; i < 256; i++)
{
 _DeCodeDictionary.Add((char)i);
}
#endif
  }
  private void InitOutCharStream()
  {
_OutCharStream.Clear();
  }
  private void DisplayOutCharStream()
  {
System.Console.WriteLine("*********_OutCharStream************");
string temp = "";
for(int i = 0; i < _OutCharStream.Count; i++)
{
 temp = temp + (_OutCharStream[i].ToString());
}
 
System.Console.WriteLine(temp);
  }
  private void DisplayDeCodeDictionary()
  {
System.Console.WriteLine("*********_DeCodeDictionary************");
for(int i = 0; i < _DeCodeDictionary.Count; i++)
{
 System.Console.WriteLine(_DeCodeDictionary[i].ToString());
}

  }

第 1 页,共 2 页 [1] [2]
站内搜索