ليمبل-زيف-ويلش

خوارزمية ليمبل - زيف - ويلش ( LZW ) هي خوارزمية ضغط بيانات شاملة بدون فقدان، ابتكرها أبراهام ليمبل ، وجاكوب زيف ، وتيري ويلش . نشرها ويلش عام 1984 كتحسين لخوارزمية LZ78 التي نشرها ليمبل وزيف عام 1978. تشمل مزاياها المزعومة: سهولة التنفيذ وإمكانية تحقيق إنتاجية عالية في التطبيقات المادية. [ 1 ]

يمكن عادةً ضغط ملف نصي إنجليزي كبير باستخدام LZW إلى حوالي نصف حجمه الأصلي.

أصبحت هذه الخوارزمية أول طريقة ضغط بيانات عالمية واسعة الانتشار في الحواسيب. استُخدمت في برنامج الضغط المُضمّن عادةً في أنظمة يونكس بدءًا من عام 1986 تقريبًا. اختفت لاحقًا من العديد من التوزيعات، نظرًا لانتهاكها براءة اختراع LZW، ولأنّ gzip حقق نسب ضغط أفضل باستخدام خوارزمية DEFLATE القائمة على LZ77 . انتشرت الخوارزمية على نطاق واسع عندما أصبحت جزءًا من تنسيق صور GIF عام 1987. ويمكن استخدامها اختياريًا في ملفات TIFF و PDF . مع أن LZW متوفرة في برنامج Adobe Acrobat ، إلا أن Acrobat يستخدم DEFLATE افتراضيًا لمعظم بيانات النصوص والصور القائمة على جداول الألوان في ملفات PDF.

الخوارزمية

يصف سيناريو ويلش في بحثه المنشور عام ١٩٨٤ [ ١ ] ترميز سلاسل البيانات ذات ٨ بتات كرموز ثابتة الطول مكونة من ١٢ بتًا. تمثل الرموز من ٠ إلى ٢٥٥ سلاسل مكونة من حرف واحد، كل حرف منها يمثل الحرف المقابل ذو ٨ بتات. أما الرموز من ٢٥٦ إلى ٤٠٩٥، فتُنشأ في قاموس خاص بالسلاسل التي تُصادف في البيانات أثناء ترميزها. في كل مرحلة من مراحل الضغط، تُجمع بايتات الإدخال في سلسلة حتى يُصبح الحرف التالي سلسلةً لا يوجد لها رمز في القاموس. يُضاف رمز السلسلة (بدون ذلك الحرف) إلى الناتج، ويُضاف رمز جديد (للسلسلة التي تحتوي على ذلك الحرف) إلى القاموس.

في التطبيق العملي لضغط الصور، وبالنسبة للصور المعتمدة على جدول ألوان، تُعتبر مجموعة فهارس جدول الألوان بمثابة أبجدية حروف طبيعية. في ثمانينيات القرن الماضي، كانت العديد من الصور تحتوي على جداول ألوان صغيرة (حوالي 16 لونًا). مع هذه الأبجدية المختصرة، لم تُحقق رموز الـ 12 بت الكاملة ضغطًا فعالًا إلا إذا كانت الصورة كبيرة الحجم، لذا طُرحت فكرة الرمز ذي العرض المتغير : تبدأ الرموز عادةً بعرض بت واحد أكبر من الرموز المراد ترميزها، ومع استهلاك كل حجم رمز، يزداد عرض الرمز بمقدار بت واحد، حتى يصل إلى حد أقصى مُحدد (عادةً 12 بت). عند الوصول إلى الحد الأقصى لقيمة الرمز، يستمر الترميز باستخدام الجدول الموجود، دون إنشاء رموز جديدة لإضافتها إلى الجدول.

تشمل التحسينات الإضافية حجز رمز للإشارة إلى ضرورة مسح جدول الرموز وإعادته إلى حالته الأولية (رمز المسح، وهو عادةً القيمة الأولى التي تلي قيم أحرف الأبجدية مباشرةً)، ورمز آخر للإشارة إلى نهاية البيانات (رمز الإيقاف، وهو عادةً أكبر من رمز المسح بواحد). يسمح رمز المسح بإعادة تهيئة الجدول بعد امتلائه، مما يُمكّن التشفير من التكيف مع الأنماط المتغيرة في بيانات الإدخال. تستطيع أجهزة التشفير الذكية مراقبة كفاءة الضغط ومسح الجدول عندما لا يعود الجدول الحالي متوافقًا مع بيانات الإدخال.

بما أن إضافة الرموز تتم وفقًا لطريقة تحددها البيانات، فإن وحدة فك التشفير تحاكي بناء الجدول عند رؤيتها للرموز الناتجة. من الضروري أن يتفق كل من المُشفِّر ووحدة فك التشفير على نوع LZW المستخدم: حجم الأبجدية، والحد الأقصى لحجم الجدول (وعرض الرمز)، وما إذا كان يتم استخدام ترميز متغير العرض، وحجم الرمز الأولي، وما إذا كان سيتم استخدام رموز المسح والإيقاف (وما هي قيمها). تُضمِّن معظم التنسيقات التي تستخدم LZW هذه المعلومات في مواصفات التنسيق أو توفر حقولًا صريحة لها في رأس ضغط البيانات.

التشفير

يمكن وصف عملية التشفير على النحو التالي:

  1. قم بتهيئة القاموس ليحتوي على جميع السلاسل النصية التي طولها واحد.
  2. ابحث عن أطول سلسلة نصية W في القاموس والتي تطابق المدخلات الحالية.
  3. قم بإصدار فهرس القاموس الخاص بـ W للإخراج وإزالة W من المدخلات.
  4. أضف الحرف W متبوعًا بالرمز التالي في المدخلات إلى القاموس.
  5. انتقل إلى الخطوة 2.

يتم تهيئة قاموس يحتوي على سلاسل نصية أحادية الحرف تُقابل جميع الأحرف المُدخلة المُمكنة (ولا شيء غير رموز المسح والإيقاف إن وُجدت). تعمل الخوارزمية عن طريق مسح سلسلة الإدخال بحثًا عن سلاسل فرعية أطول تدريجيًا حتى تجد سلسلة غير موجودة في القاموس. عند العثور على هذه السلسلة، يتم استرجاع فهرس السلسلة بدون الحرف الأخير (أي أطول سلسلة فرعية موجودة في القاموس) من القاموس وإرساله إلى المخرجات، ثم تُضاف السلسلة الجديدة (بما في ذلك الحرف الأخير) إلى القاموس مع الرمز التالي المُتاح. بعد ذلك، يُستخدم الحرف الأخير من الإدخال كنقطة بداية لمسح السلاسل الفرعية التالية.

بهذه الطريقة، تُسجَّل السلاسل الأطول تدريجيًا في القاموس وتكون متاحة للترميز اللاحق كقيم إخراج مفردة. تعمل الخوارزمية بشكل أفضل مع البيانات ذات الأنماط المتكررة، لذا فإن الأجزاء الأولى من الرسالة لا تتعرض لضغط كبير. مع ذلك، ومع ازدياد حجم الرسالة، تميل نسبة الضغط إلى التقارب نحو الحد الأقصى (أي أن عامل الضغط أو نسبته يتحسن بشكل متزايد، وليس خطيًا، مقتربًا من الحد الأقصى النظري خلال فترة زمنية محدودة بدلًا من فترة زمنية غير محدودة). [ 2 ]

فك التشفير

يمكن وصف عملية فك التشفير على النحو التالي:

  1. قم بتهيئة القاموس ليحتوي على جميع السلاسل النصية التي طولها واحد.
  2. اقرأ الرمز المشفر التالي.
  3. إذا لم يكن الرمز مشفرًا في القاموس، فانتقل إلى الخطوة 7.
  4. قم بإخراج السلسلة النصية W المقابلة إلى المخرجات.
  5. قم بدمج السلسلة السابقة التي تم إخراجها مع الرمز الأول W ؛ أضف هذا إلى القاموس.
  6. انتقل إلى الخطوة 9.
  7. قم بدمج السلسلة السابقة التي تم إخراجها مع رمزها الأول؛ وسمّ هذه السلسلة V.
  8. أضف V إلى القاموس وأخرج V إلى المخرجات.
  9. كرر الخطوة 2 حتى نهاية المدخلات.

تعمل خوارزمية فك التشفير بقراءة قيمة من المدخلات المشفرة وإخراج السلسلة المقابلة لها من القاموس. مع ذلك، لا حاجة للقاموس الكامل، بل يكفي القاموس الأولي الذي يحتوي على سلاسل أحادية الحرف (والذي عادةً ما يكون مُضمّنًا في البرنامج، بدلًا من إرساله مع البيانات المشفرة). بدلًا من ذلك، يُعاد بناء القاموس الكامل أثناء عملية فك التشفير بالطريقة التالية: بعد فك تشفير قيمة وإخراج سلسلة، يقوم المُفكِّك بدمجها مع الحرف الأول من السلسلة التالية التي تم فك تشفيرها (أو الحرف الأول من السلسلة الحالية، إذا تعذّر فك تشفير السلسلة التالية؛ لأنه إذا كانت القيمة التالية غير معروفة، فيجب أن تكون القيمة المُضافة إلى القاموس في هذه الدورة، وبالتالي يكون حرفها الأول هو نفسه الحرف الأول من السلسلة الحالية)، ويُحدِّث القاموس بالسلسلة الجديدة. ثم ينتقل المُفكِّك إلى المدخلات التالية (التي تمت قراءتها بالفعل في الدورة السابقة) ويُعالجها كما في السابق، وهكذا حتى يستنفد دفق المدخلات.

رموز ذات عرض متغير

في حال استخدام رموز متغيرة العرض، يجب على المُشفِّر والمُفكِّك توخي الحذر عند تغيير العرض في نفس النقاط من البيانات المُشفَّرة لتجنب أي اختلاف في حدود الرموز الفردية في التدفق. في الإصدار القياسي، يزيد المُشفِّر العرض من p إلى p  +  1 عند مصادفة تسلسل ω  + s غير موجود في الجدول (مما يستدعي إضافة رمز له)، ولكن الرمز التالي المتاح في الجدول هو 2p ( أول رمز يتطلب p + 1 بت). يُصدر المُشفِّر رمز ω بعرض p (لأن هذا الرمز لا يتطلب p + 1 بت)، ثم يزيد عرض الرمز بحيث يكون الرمز التالي المُصدر بعرض p + 1 بت.       

يكون جهاز فك التشفير دائمًا متأخرًا برمز واحد عن جهاز التشفير عند بناء الجدول، لذلك عندما يرى رمز ω، فإنه يُنشئ مدخلًا للرمز 2p 1. وبما أن هذه هي النقطة التي يزيد فيها جهاز التشفير عرض الرمز، فيجب على جهاز فك التشفير زيادة العرض هنا أيضًا - عند النقطة التي يُنشئ فيها أكبر رمز يتناسب مع p بت.  

لسوء الحظ، تقوم بعض التطبيقات المبكرة لخوارزمية التشفير بزيادة عرض الكود ثم تُصدر قيمة ω عند العرض الجديد بدلاً من العرض القديم، مما يجعل برنامج فك التشفير يعتقد أن العرض يتغير قبل الأوان بمقدار كود واحد. يُسمى هذا "التغيير المبكر"؛ وقد تسبب في الكثير من الارتباك لدرجة أن Adobe تسمح الآن بكلا الإصدارين في ملفات PDF، ولكنها تُضيف علامة صريحة في رأس كل دفق مضغوط بتقنية LZW للإشارة إلى ما إذا كان التغيير المبكر مُستخدمًا. من بين تنسيقات ملفات الرسومات التي تدعم ضغط LZW، يستخدم TIFF التغيير المبكر، بينما لا يستخدمه GIF ومعظم التنسيقات الأخرى.

عندما يتم مسح الجدول استجابةً لرمز المسح، يقوم كل من المشفر والمفكك بتغيير عرض الرمز بعد رمز المسح إلى عرض الرمز الأولي، بدءًا من الرمز الذي يلي رمز المسح مباشرةً.

طلب التعبئة

بما أن الرموز الصادرة لا تقع عادةً على حدود البايتات، يجب أن يتفق المُشفِّر والمُفكِّك على كيفية تجميع الرموز في البايتات. الطريقتان الشائعتان هما: LSB-first (" البت الأقل أهمية أولاً") و MSB-first (" البت الأكثر أهمية أولاً"). في طريقة LSB-first، يُحاذى الرمز الأول بحيث يقع البت الأقل أهمية فيه ضمن البت الأقل أهمية في بايت التدفق الأول، وإذا كان الرمز يحتوي على أكثر من 8 بتات، تُحاذى البتات المتبقية ذات الترتيب الأعلى مع البتات الأقل أهمية في البايت التالي؛ وتُجمَّع الرموز اللاحقة بحيث يقع البت الأقل أهمية في البت الأقل أهمية غير المستخدم في بايت التدفق الحالي، مع الاستمرار في البايتات اللاحقة حسب الحاجة. أما طريقة MSB-first، فتُحاذى الرمز الأول بحيث يقع البت الأكثر أهمية فيه ضمن البت الأكثر أهمية في بايت التدفق الأول، مع محاذاة البت الزائد مع البت الأكثر أهمية في البايت التالي؛ وتُكتب الرموز اللاحقة بحيث يقع البت الأكثر أهمية في البت الأكثر أهمية غير المستخدم في بايت التدفق الحالي.

تستخدم ملفات GIF ترتيب التعبئة LSB أولاً. بينما تستخدم ملفات TIFF وملفات PDF ترتيب التعبئة MSB أولاً.

المزيد من البرمجة

تُوسّع العديد من التطبيقات الخوارزمية بتطبيق ترميز إضافي على سلسلة رموز الإخراج. بعضها يُغلّف التدفق المُرمّز كأحرف قابلة للطباعة باستخدام نوع من ترميز التحويل من ثنائي إلى نص . هذا يزيد من طول الترميز ويُقلّل من معدل الضغط. في المقابل، يُمكن غالبًا تحقيق ضغط أكبر باستخدام مُرمّز إنتروبيا تكيفي . يُقدّر هذا المُرمّز التوزيع الاحتمالي لقيمة الرمز التالي، بناءً على التكرارات المُلاحظة للقيم حتى الآن. ثم يستخدم ترميز إنتروبيا قياسي، مثل ترميز هوفمان أو الترميز الحسابي، رموزًا أقصر للقيم ذات الاحتمالات الأعلى.

مثال

يوضح المثال التالي خوارزمية LZW أثناء العمل، مُبينًا حالة المخرجات والقاموس في كل مرحلة، سواءً في ترميز البيانات أو فك ترميزها. صُمم هذا المثال لتحقيق ضغط معقول لرسالة قصيرة جدًا. في بيانات النصوص الحقيقية، يكون التكرار أقل وضوحًا بشكل عام، لذا عادةً ما تكون هناك حاجة إلى تدفقات إدخال أطول قبل أن يصل الضغط إلى الكفاءة المطلوبة.

النص الأصلي المراد ترميزه (من أبجدية تستخدم الأحرف الكبيرة فقط) هو:

أن تكون أو لا تكون أو لا تكون#

يحتوي النص الأصلي على 26 رمزًا (الأحرف الكبيرة من A إلى Z ). يُستخدم الرمز # لتمثيل رمز التوقف: وهو رمز خارج نطاق النص الأصلي يُفعّل معالجة خاصة. نُعيّن لهذه الرموز القيم من 1 إلى 26 للأحرف، والقيمة 0 لرمز التوقف '#'. (في معظم إصدارات خوارزمية LZW، يُوضع رمز التوقف بعد أبجدية البيانات، ولكن لا يوجد ما يُلزم بذلك في الخوارزمية الأساسية. يكفي أن يتفق المُشفّر والمُفكّك على قيمته).

يقوم الحاسوب بتحويل هذه البيانات إلى سلاسل من البتات . يلزم استخدام رموز مكونة من خمسة بتات لتوفير عدد كافٍ من التوليفات لتغطية هذه المجموعة المكونة من 27 قيمة. يتم تهيئة القاموس بهذه القيم الـ 27. مع نمو القاموس، يجب أن يزداد عرض الرموز لاستيعاب المدخلات الإضافية. يوفر رمز مكون من 5 بتات 2^ 5 = 32 توليفة ممكنة من البتات، لذلك عند إنشاء الكلمة رقم 33 في القاموس، يجب على الخوارزمية عند هذه النقطة التحول من سلاسل مكونة من 5 بتات إلى سلاسل مكونة من 6 بتات (لجميع قيم الرموز، بما في ذلك تلك التي تم إخراجها سابقًا بخمسة بتات فقط). لاحظ أنه نظرًا لاستخدام الرمز 00000، الذي يتكون من جميع الأصفار، والمُسمى "0"، فإن المدخل رقم 33 في القاموس مُسمى 32. (لا تتأثر المخرجات المُولدة سابقًا بتغيير عرض الرمز، ولكن بمجرد توليد قيمة مكونة من 6 بتات في القاموس، فمن المحتمل أن تكون هي الرمز التالي المُصدر، لذلك يتحول عرض المخرجات اللاحقة إلى 6 بتات لاستيعاب ذلك).

إذن، يتكون القاموس الأولي من المدخلات التالية:

رمزثنائيعشري
8000000
أ000011
ب٠٠٠١٠2
ج٠٠٠١١3
د٠٠١٠٠4
هـ001015
F001106
جي٠٠١١١7
ح010008
أنا010019
ج0101010
ك0101111
ل0110012
م0110113
شمال0111014
يا0111115
P1000016
سؤال1000117
R1001018
S1001119
تي1010020
يو1010121
V1011022
دبليو1011123
X1100024
Y1100125
Z1101026

التشفير

قم بتخزين الأحرف المدخلة في تسلسل ω حتى يصبح الحرف ω + الحرف التالي غير موجود في القاموس. ثم قم بإصدار رمز ω، وأضف الحرف ω + الحرف التالي إلى القاموس. ابدأ التخزين المؤقت مرة أخرى مع الحرف التالي. (السلسلة المراد ترميزها هي "TOBEORNOTTOBEORTOBEORNOT#").

التسلسل الحاليالحرف التاليالناتجقاموس موسعتعليقات
شفرةأجزاء
باطلتي
تييا201010027:ل27 = أول رمز متاح بعد الأرقام من 0 إلى 26
ياب150111128:OB
بهـ2٠٠٠١٠29:يكون
هـيا50010130:EO
ياR150111131:أو
Rشمال181001032:ممرضة مسجلةالعدد 32 يتطلب 6 بتات، لذا استخدم 6 بتات للإخراج التالي
شماليا1400111033:لا
ياتي15٠٠١١١١34:العلاج الوظيفي
تيتي2001010035:تي تي
لب2701101136:توب
يكونيا2901110137:BEO
أوتي31٠١١١١١38:جهاز ORT
توبهـ3610010039:يكون
EOR3001111040:استخلاص النفط المعزز
ممرضة مسجلةيا3210000041:RNO
العلاج الوظيفي834100010# يوقف الخوارزمية؛ يرسل التسلسل الحالي
0000000ورمز التوقف
الطول غير المشفر = 25 رمزًا × 5 بتات/رمز = 125 بتًا
الطول المشفر = (6 رموز × 5 بتات/رمز) + (11 رمزًا × 6 بتات/رمز) = 96 بت.

ساهم استخدام خوارزمية LZW في توفير 29 بت من أصل 125، مما قلل حجم الرسالة بأكثر من 23%. لو كانت الرسالة أطول، لكانت كلمات القاموس ستمثل مقاطع نصية أطول فأطول، مما يؤدي إلى إرسال الكلمات المتكررة بشكل مضغوط للغاية.

فك التشفير

لفك تشفير أرشيف مضغوط بتقنية LZW، يحتاج المرء إلى معرفة القاموس الأولي المستخدم مسبقًا، ولكن يمكن إعادة بناء الإدخالات الإضافية لأنها دائمًا ما تكون مجرد سلاسل من الإدخالات السابقة.

مدخلتسلسل الإخراجمدخل جديد في القاموستعليقات
أجزاءشفرةممتلىءتخمين
1010020تي27:ت؟
0111115يا27:ل28:أو؟
٠٠٠١٠2ب28:OB29:ب؟
001015هـ29:يكون30:هـ؟
0111115يا30:EO31:أو؟
1001018R31:أو32:تم إنشاء الكود رقم 31 (آخر كود يتناسب مع 5 بتات)
00111014شمال32:ممرضة مسجلة33:ن؟لذا ابدأ قراءة المدخلات عند 6 بتات
٠٠١١١١15يا33:لا34:أو؟
01010020تي34:العلاج الوظيفي35:ت؟
01101127ل35:تي تي36:ل؟
01110129يكون36:توب37:يكون؟36 = TO + الرمز الأول (B) من
٠١١١١١31أو37:BEO38:أو؟تم استلام التسلسل المشفر التالي (BE)
10010036توب38:جهاز ORT39:TOB؟
01111030EO39:يكون40:EO؟
10000032ممرضة مسجلة40:استخلاص النفط المعزز41:ممرض/ة مسجل/ة؟
10001034العلاج الوظيفي41:RNO42:خارج الموضوع؟
00000008

في كل مرحلة، يستقبل المُفكِّك رمزًا X؛ يبحث عن X في الجدول ويُخرج التسلسل χ الذي يُشفِّره، ويفترض أن χ +  ؟ هو المدخل الذي أضافه المُشفِّر للتو - لأن المُشفِّر أصدر X لـ χ تحديدًا لأن χ +  ؟ لم يكن موجودًا في الجدول، ثم يُضيفه. ولكن ما هو الحرف المفقود؟ إنه الحرف الأول في التسلسل الذي يُشفِّره الرمز التالي Z الذي يستقبله المُفكِّك. لذا يبحث المُفكِّك عن Z، ويُفكِّكه إلى التسلسل ω، ويأخذ الحرف الأول z ويُلحقه بنهاية χ كمدخل القاموس التالي.

تنجح هذه الطريقة طالما أن الرموز المستلمة موجودة في قاموس المُفكِّك، بحيث يمكن فك تشفيرها إلى متواليات. ماذا يحدث إذا استلم المُفكِّك رمزًا Z غير موجود في قاموسه؟ بما أن المُفكِّك دائمًا ما يكون متأخرًا برمز واحد فقط عن المُشفِّر، فلا يمكن أن يكون Z في قاموس المُشفِّر إلا إذا كان المُشفِّر قد أنشأه للتو ، عند إرسال الرمز السابق X للرمز χ. وبالتالي، يُشفِّر Z حرفًا ما ω وهو χ +  ؟، ويمكن للمُفكِّك تحديد الحرف المجهول كما يلي:

  1. يرى جهاز فك التشفير X ثم Z، حيث يقوم X بتشفير التسلسل χ ويقوم Z بتشفير تسلسل غير معروف ω.
  2. يعرف جهاز فك التشفير أن جهاز التشفير قد أضاف Z كرمز لـ χ + حرف غير معروف c ، لذا فإن ω = χ + c .
  3. بما أن c هو الحرف الأول في دفق الإدخال بعد χ، وبما أن ω هي السلسلة التي تظهر مباشرة بعد χ، فيجب أن يكون c هو الحرف الأول من التسلسل ω.
  4. بما أن χ هي سلسلة فرعية أولية من ω، فيجب أن يكون c أيضًا الحرف الأول من χ.
  5. لذلك على الرغم من أن رمز Z ليس موجودًا في الجدول، إلا أن جهاز فك التشفير قادر على استنتاج التسلسل غير المعروف ويضيف χ + (الحرف الأول من χ) إلى الجدول كقيمة لـ Z.

تحدث هذه الحالة عندما يواجه المُشفِّر مُدخلات على شكل cScSc ، حيث c حرف واحد، وS سلسلة نصية، و cS موجودة بالفعل في القاموس، بينما cSc غير موجودة. يُصدر المُشفِّر رمز cS ، ويضع رمزًا جديدًا لـ cSc في القاموس. ثم يرى cSc في المُدخلات (بدءًا من الحرف c الثاني في cScSc ) ويُصدر الرمز الجديد الذي أضافه للتو. تُبين الحجة أعلاه أنه عندما يتلقى المُفكِّك رمزًا غير موجود في قاموسه، يجب أن تكون الحالة على هذا النحو.

على الرغم من أن إدخال بيانات بصيغة cScSc قد يبدو غير مرجح، إلا أن هذا النمط شائع إلى حد ما عندما يتميز تدفق الإدخال بتكرار كبير. وعلى وجه الخصوص، فإن السلاسل الطويلة المكونة من حرف واحد (والتي تُعد شائعة في أنواع الصور التي غالبًا ما يُستخدم ترميز LZW لترميزها) تُولّد أنماطًا من هذا النوع بشكل متكرر.

براءات الاختراع

صدرت براءات اختراع عديدة في الولايات المتحدة ودول أخرى لخوارزمية LZW وخوارزميات مشابهة. وقد غطت براءة الاختراع الأمريكية رقم 4,464,650، المسجلة باسم ليمبل، زيف، كوهن، وإيستمان، خوارزمية LZ78، والمُسندة إلى شركة سبيري ، التي أصبحت لاحقًا شركة يونيسيس ، بتاريخ 10 أغسطس 1981. كما صدرت براءتا اختراع أمريكيتان لخوارزمية LZW: الأولى رقم 4,814,746، المسجلة باسم فيكتور إس. ميلر ومارك إن. ويغمان ، والمُسندة إلى شركة آي بي إم ، بتاريخ 1 يونيو 1983، والثانية رقم 4,558,302، المسجلة باسم ويلش، والمُسندة إلى شركة سبيري، التي أصبحت لاحقًا شركة يونيسيس، بتاريخ 20 يونيو 1983.

بالإضافة إلى براءات الاختراع المذكورة أعلاه، تتضمن براءة اختراع ويلش لعام 1983 أيضًا إشارات إلى العديد من براءات الاختراع الأخرى التي أثرت فيها، بما في ذلك براءتي اختراع يابانيتين لعام 1980 ( JP9343880A و JP17790880A ) من جون كاناتسو من شركة NEC ، وبراءة الاختراع الأمريكية رقم 4,021,782 (1974) من جون إس. هورنينغ، وبراءة الاختراع الأمريكية رقم 4,366,551 (1977) من كلاوس إي. هولتز، وبراءة اختراع ألمانية لعام 1981 ( DE19813118676 ) من كارل إيكهارت هاينز. [ 3 ]

في عامي 1993-1994، ثم في عام 1999، واجهت شركة يونيسيس استنكارًا واسعًا عندما حاولت فرض رسوم ترخيص لملفات LZW في صور GIF. وقد أثارت هذه القضية، التي دارت بين يونيسيس وكومبيوسيرف ( مبتكرة صيغة GIF)، جدلًا واسعًا على مجموعة يوزنت comp.graphics بعنوان "أفكار حول صيغة ملفات بديلة لـ GIF" ، مما أدى بدوره إلى تبادل رسائل بريد إلكتروني أسفر في النهاية عن ابتكار صيغة ملفات الرسومات الشبكية المحمولة (PNG) غير الخاضعة لبراءات الاختراع في عام 1995.

انتهت صلاحية براءة اختراع شركة يونيسيس الأمريكية لخوارزمية LZW في 20 يونيو 2003، [ 4 ] بعد 20 عامًا من تقديمها. كما انتهت صلاحية براءات الاختراع التي تم تقديمها في المملكة المتحدة وفرنسا وألمانيا وإيطاليا واليابان وكندا في عام 2004، [ 4 ] بعد 20 عامًا من تقديمها أيضًا.

المتغيرات

LZMW

تعتمد خوارزمية LZMW (1985)، من تطوير فيكتور ميلر ومارك ويغمان ، [ 5 ] على البحث في المدخلات عن أطول سلسلة نصية موجودة مسبقًا في القاموس (التطابق "الحالي")، ثم تضيف دمج التطابق السابق مع التطابق الحالي إلى القاموس. وبالتالي، تنمو مدخلات القاموس بسرعة أكبر، إلا أن هذه الطريقة أكثر تعقيدًا في التنفيذ. ويقترح ميلر وويغمان حذف المدخلات ذات التكرار المنخفض من القاموس عند امتلائه.

LZAP

يُعدّ LZAP (1988)، من تطوير جيمس ستورر، [ 6 ] تعديلًا لـ LZMW. فبدلًا من إضافة سلسلة التطابق السابقة مع سلسلة التطابق الحالية إلى القاموس، يُضيف LZAP سلاسل التطابق السابقة مع كل سلسلة فرعية أولية من سلسلة التطابق الحالية ("AP" اختصارًا لـ "جميع البادئات"). على سبيل المثال، إذا كانت سلسلة التطابق السابقة هي "wiki" وسلسلة التطابق الحالية هي "pedia"، فإن مُشفّر LZAP يُضيف 5 سلاسل جديدة إلى القاموس: "wikip" و"wikipe" و"wikiped" و"wikipedi" و"wikipedia"، بينما يُضيف مُشفّر LZMW السلسلة "wikipedia" فقط. يُقلّل هذا من تعقيد LZMW، على حساب إضافة المزيد من مدخلات القاموس.

LZWL

LZWL هو شكل مختلف من LZW يعتمد على المقاطع الصوتية.

انظر أيضاً

مراجع

  1. 1 2 ويلش، تيري (1984). "تقنية لضغط البيانات عالي الأداء". مجلة الكمبيوتر . 17 (6): 8-19 . doi : 10.1109/MC.1984.1659158 . S2CID 2055321 . 
  2. زيف، ج.؛ ليمبل، أ. (1978). "ضغط التسلسلات الفردية عبر ترميز معدل متغير" (ملف PDF) . معاملات IEEE في نظرية المعلومات . 24 (5): 530. CiteSeerX 10.1.1.14.2892 . doi : 10.1109/TIT.1978.1055934 . مؤرشف من الأصل (ملف PDF) بتاريخ 12 أبريل 2012. تم الاسترجاع بتاريخ 3 مارس 2009 . 
  3. براءة اختراع أمريكية رقم 4,558,302
  4. ١ ٢ "معلومات براءات اختراع LZW" . حول شركة يونيسيس . يونيسيس. مؤرشف من الأصل في ٢٦ يونيو ٢٠٠٩. تم الاطلاع عليه في ٦ مارس ٢٠١٤ .
  5. ديفيد سالومون، ضغط البيانات - المرجع الكامل ، الطبعة الرابعة، الصفحة 209.
  6. ديفيد سالومون، ضغط البيانات - المرجع الكامل ، الطبعة الرابعة، الصفحة 212.