خوارزمية فرايفالدس (Freivalds’ algorithm)

مقدمة

خوارزمية فرايفالدس (بالإنجليزية: Freivalds’ algorithm) هي خوارزمية احتمالية عشوائية تستخدم للتحقق من ضرب المصفوفات. سميت هذه الخوارزمية على اسم عالم الحاسوب اللاتفي روسينش مارتينش فرايفالدس. تعتبر هذه الخوارزمية مثالًا ممتازًا على كيفية استخدام العشوائية لتحقيق كفاءة حسابية في حل بعض المشكلات.

الغرض من خوارزمية فرايفالدس

الغرض الرئيسي من خوارزمية فرايفالدس هو التحقق من صحة المعادلة التالية:
A × B = C
حيث A، B، و C هي مصفوفات مربعة بحجم n × n.

بدلاً من إجراء عملية ضرب المصفوفات الكاملة (والتي تتطلب وقتًا زمنيًا قدره O(n^3) باستخدام الخوارزميات القياسية، أو O(n^2.3728639) باستخدام الخوارزميات الأكثر تعقيدًا مثل خوارزمية Coppersmith–Winograd)، تقدم خوارزمية فرايفالدس طريقة أسرع وأكثر كفاءة من خلال استخدام العشوائية.

كيف تعمل خوارزمية فرايفالدس

تعتمد الخوارزمية على اختيار متجه عشوائي r بطول n، بحيث يكون كل عنصر من عناصر هذا المتجه إما 0 أو 1. ثم يتم حساب كل من A × (B × r) و C × r. إذا كانت النتيجة متطابقة، فهذا يشير (باحتمالية عالية) إلى أن A × B = C. أما إذا كانت النتيجة مختلفة، فهذا يعني بالتأكيد أن A × B ≠ C.

الخطوات التفصيلية للخوارزمية هي:

  1. اختيار المتجه العشوائي r: يتم إنشاء متجه عشوائي r بطول n، حيث يكون كل عنصر إما 0 أو 1.
  2. حساب B × r: يتم حساب حاصل ضرب المصفوفة B في المتجه r، والنتيجة هي متجه جديد وليكن v.
  3. حساب A × v: يتم حساب حاصل ضرب المصفوفة A في المتجه v، والنتيجة هي متجه جديد وليكن u.
  4. حساب C × r: يتم حساب حاصل ضرب المصفوفة C في المتجه r، والنتيجة هي متجه جديد وليكن w.
  5. المقارنة: يتم مقارنة المتجهين u و w. إذا كانا متطابقين، تفترض الخوارزمية أن A × B = C (مع احتمال وجود خطأ). أما إذا كانا مختلفين، فإن A × B ≠ C بالتأكيد.

التحليل الاحتمالي

خوارزمية فرايفالدس هي خوارزمية احتمالية، مما يعني أنها قد تعطي نتائج خاطئة باحتمالية معينة. إذا كانت A × B = C، فإن الخوارزمية ستعيد “صحيح” دائمًا. ولكن، إذا كانت A × B ≠ C، فإن الخوارزمية قد تعيد “صحيح” باحتمالية صغيرة.

يمكن تقليل احتمالية الخطأ عن طريق تكرار الخوارزمية عدة مرات. في كل مرة يتم فيها تكرار الخوارزمية، يتم اختيار متجه عشوائي جديد r. إذا تم تكرار الخوارزمية k مرة، فإن احتمالية الحصول على نتيجة خاطئة (أي أن الخوارزمية تعيد “صحيح” بينما A × B ≠ C) تنخفض إلى 2-k.

شرح رياضي للاحتمالية:

لتكن D = A × B – C. إذا كانت A × B ≠ C، فهذا يعني أن D ≠ 0. الخوارزمية تعيد نتيجة خاطئة فقط إذا كان D × r = 0. يمكن إثبات أن احتمالية حدوث ذلك هي على الأكثر 1/2. بتكرار الخوارزمية k مرة، تصبح احتمالية الحصول على نتيجة خاطئة في كل مرة هي (1/2)k = 2-k.

الكفاءة الزمنية

تتمتع خوارزمية فرايفالدس بكفاءة زمنية قدرها O(n2)، حيث n هو حجم المصفوفات. هذه الكفاءة أعلى بكثير من الكفاءة الزمنية لخوارزميات ضرب المصفوفات التقليدية (O(n3)) أو حتى الخوارزميات الأكثر تطوراً (O(n2.3728639)).

تحليل الكفاءة:

  • حساب B × r يتطلب O(n2) عمليات.
  • حساب A × v يتطلب O(n2) عمليات.
  • حساب C × r يتطلب O(n2) عمليات.
  • مقارنة المتجهين u و w تتطلب O(n) عمليات.

إجمالي العمليات هو O(n2) + O(n2) + O(n2) + O(n) = O(n2).

تطبيقات خوارزمية فرايفالدس

تستخدم خوارزمية فرايفالدس في العديد من التطبيقات التي تتطلب التحقق السريع من ضرب المصفوفات، بما في ذلك:

  • التحقق من صحة العمليات الحسابية الكبيرة: يمكن استخدام الخوارزمية للتحقق من صحة العمليات الحسابية المعقدة التي تتضمن ضرب المصفوفات الكبيرة.
  • اختبار الأجهزة: يمكن استخدام الخوارزمية لاختبار سلامة الأجهزة التي تقوم بعمليات ضرب المصفوفات، مثل وحدات معالجة الرسومات (GPUs) والدوائر المتكاملة المتخصصة (ASICs).
  • التشفير: يمكن استخدام الخوارزمية كجزء من بروتوكولات التشفير التي تعتمد على ضرب المصفوفات.

مثال توضيحي

لنفترض أن لدينا المصفوفات التالية:

A = [[1, 2], [3, 4]]

B = [[5, 6], [7, 8]]

C = [[19, 22], [43, 50]]

نريد التحقق مما إذا كانت A × B = C باستخدام خوارزمية فرايفالدس.

الخطوة 1: نختار متجهًا عشوائيًا r = [0, 1].

الخطوة 2: نحسب B × r = [[5, 6], [7, 8]] × [0, 1] = [6, 8].

الخطوة 3: نحسب A × (B × r) = [[1, 2], [3, 4]] × [6, 8] = [22, 50].

الخطوة 4: نحسب C × r = [[19, 22], [43, 50]] × [0, 1] = [22, 50].

الخطوة 5: نقارن بين [22, 50] و [22, 50]. بما أنهما متطابقان، نفترض أن A × B = C.

إذا قمنا بتكرار هذه العملية عدة مرات بمتجهات عشوائية مختلفة، سنزيد من ثقتنا في أن A × B = C.

مقارنة مع خوارزميات أخرى

خوارزمية فرايفالدس تبرز بكونها خوارزمية احتمالية تحقق كفاءة زمنية عالية (O(n2)) مقارنة بالخوارزميات القطعية التي تتطلب O(n3) على الأقل. بينما توجد خوارزميات أسرع لضرب المصفوفات مثل خوارزمية Coppersmith-Winograd، إلا أنها أكثر تعقيدًا من الناحية العملية وتستخدم في حالات معينة جدًا. خوارزمية فرايفالدس تقدم حلًا بسيطًا وسريعًا للتحقق من صحة ضرب المصفوفات، خاصة عندما تكون المصفوفات كبيرة جدًا.

عيوب خوارزمية فرايفالدس

العيب الرئيسي في خوارزمية فرايفالدس هو أنها خوارزمية احتمالية، وبالتالي قد تعطي نتائج خاطئة. على الرغم من أن احتمالية الخطأ يمكن تقليلها عن طريق تكرار الخوارزمية عدة مرات، إلا أنها لا يمكن القضاء عليها تمامًا. بالإضافة إلى ذلك، الخوارزمية لا تعطي أي معلومات حول سبب عدم صحة المعادلة A × B = C إذا كانت غير صحيحة، بل تخبرنا فقط بأنها غير صحيحة.

تحسينات على خوارزمية فرايفالدس

هناك بعض التحسينات التي يمكن إجراؤها على خوارزمية فرايفالدس لتحسين كفاءتها أو تقليل احتمالية الخطأ. على سبيل المثال، يمكن استخدام مولدات أرقام عشوائية أفضل لإنشاء المتجهات العشوائية r. يمكن أيضًا استخدام تقنيات أخرى لتقليل التباين في النتائج، مثل تقنيات Monte Carlo.

خاتمة

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

المراجع