در پست های قبل در مورد الگوریتم lempel-ziv صحبت کرده بودیم، در این پست نیز پیاده سازی این الگوریتم را در زبان C# یا C++ بررسی می کنیم. پیش از هر کاری باید بدانید که هدف ما در این پست، اشنایی با نحوه ی کار این الگوریتم و افزایش مهارت در برنامه نویسی است، نه ساخت یک برنامه کاربردی.
پیاده سازی این الگوریم را میتوان به چندین شیوه ی مختلف انجام داد، و چندان پیچیده نیست. برای نوشتن این برنامه به یک آرایه یا رشته برای ورودی، یک آرایه یا رشته برای دیکشنری و یک آرایه یا رشته برای خروجی نیازمندیم. میتوانیم اطلاعات را هم در یک آرایه ذخیره کنیم و هم به صورت متوالی در یک رشته (string)؛ ولی بهتر است از ارایه برای این کار استفاده کنیم.
اولین کار پس از دریافت ورودی از کاربر این است که دیکشنری اولیه را تشکیل دهیم. ما ورودی را در این برنامه به صورت "متن" در نظر میگیریم؛ پس ابتدا باید به دنبال کاراکتر های متمایز در این ورودی بگردیم. تکه کدی مانند کد زیر میتواند این کار را برای ما انجام دهد :

D[0] = Input[0].ToString();
LEN = 1;
for (i = 1; i < Input.Length; i++)
{
flag = true;
for (j = 0; j < LEN; j++)
{
if (Input[i].ToString() == D[j])
{
flag = false;
break;
}
}

if (flag)
{
D[LEN++] = Input[i].ToString();
}
}

ورودی : Input
دیکشنری : D
طول دیکشنری : LEN
پرچم : flag

حالا که دیکشنری اولیه را تشکیل داده ایم میتوانیم هسته اصلی برنامه را ایجاد کنیم. به این شکل که از ابتدا تا انتهای ورودی را پیمایش کرده و طبق فلوچارت زیر عمل میکنیم.

تکه کد زیر را میتوان برای هسته ی اصلی برنامه به کار برد. این کد را میتوان به روش های دیگر و بهتر نیز نوشت ولی کد زیر نیز تا این جا جواب داده است!

// true : found
// false : not there
for (i = 0; i < Input.Length; i++)
{
k = i;
p = -1;
Temp = Input[i].ToString();
Loop:
flag = false;
for (j = 0; j < LEN && k < Input.Length - 1; j++)
{
if (D[j] == Temp)
{
flag = true;
break;
}
}
if (flag == true)
{
Temp += Input[++k];
p++;
goto Loop;
}
else if (Temp.Length > 1)
{
D[LEN++] = Temp;
O += Find(D, LEN, sub(Temp)).ToString() + Separator;
i += p;
}
if (Temp.Length == 1 && i + 1 == Input.Length)
{
O += Find(D, LEN, Temp);
}

خروجی : O
تابع برای پیدا کردن شماره یک داده در دیکشنری : Find
تابع برای حذف کردن یک کاراکتر از انتهای یک رشته : sub

برنامه زیر را میتوانید برای مشاهده نتیجه فشرده سازی متن با این الگوریتم استفاده کنید. (برای اجرای برنامه به .Net نسخه ی 4 نیاز دارید).