en
Feedback
مبرمج | ShadyRahimo

مبرمج | ShadyRahimo

Open in Telegram

فهرسة المحتوى @indexshady Cyber Security Researcher Front-End Developer Back-end development حسابي الشخصي @Abu_Alala فهرس القناة @indexshady

Show more
216
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
خوارزميات فرق تسد: 🟡 أسلوب فرِّق تسُد هو من أساليب الخوارزميات الشائعة ويستند في عمله على التعاود recursion. يقسِّم أسلوب فرِّق تسد المسألة إلى مسائل فرعية تشبه المسألة الأصلية، ويقدّم حلولًا للمسائل الفرعية بطريقة تعاودية، ثم يدمج حلول المسائل الفرعية وذلك لتقديم حلٍّ للمسألة الأصلية. ولمّا كان أسلوب فرِّق تسد يعمل بطريقة تعاودية، فيلزم أن تكون كل مسألة فرعية أصغر من المسألة الأصلية، ويجب أن يكون هناك حالة أساس لجميع المسائل الفرعية. يمكن تقسيم طريقة عمل هذا الأسلوب إلى خطوات ثلاث:
تقسيم Divide المسألة إلى عدد من المسائل الفرعية التي تكون نسخًا أصغر من المسألة الأصلية.
التغلب Conquer على المسائل الفرعية وذلك بحلّها بطريقة تعاودية، ويمكن حل المسائل الفرعية كحالات أساسية إن كانت صغيرة بما فيه الكفاية.
دمج Combine حلول المسائل الفرعية لتشكيل الحل النهائي للمسألة الأصلية.
أسلوب فرّق تسد مقابل البرمجة الديناميكية: يقسّم كلا الأسلوبين (فرّق تسد والبرمجة الديناميكية) المسألة المعطاة إلى مسائل فرعية لتحلّها بعد ذلك. ولكن تستخدم منهجية فرّق تسد عندما لا تجري معالجة المسألة الفرعية نفسها مرات عديدة. أما في حال تكرار المسائل الفرعية فيجب حينئذ استخدام البرمجة الديناميكية لحلّها. فعلى سبيل المثال: 🔹
لا تجري معالجة نفس المسائل الفرعية في خوارزمية البحث الثنائي بصورة متكررة؛ لذا تنتمي هذه الخوارزمية إلى منهج فرِّق تسد، أما خوارزمية متتالية فيبوناتشي فتعالج فيها نفس المسائل الفرعية عدة مرات؛ لذا يُفضل استخدام البرمجة الديناميكية لحلّها.
البحث الثنائي
تقارن الخوارزمية في كل خطوة العنصر المدخل x مع قيمة العنصر الموجود في منتصف المصفوفة، وإن كانت القيمتان متطابقتين تعيد الخوارزمية موقع العنصر الموجود في منتصف المصفوفة، وإن لم تتطابق القيمتان وكانت قيمة x أقل من قيمة العنصر الموجود في منتصف المصفوفة، تعاود الخوارزمية العمل على الجانب الأيسر من العنصر المتوسط، وإن لم تتطابق القيم تنتقل إلى الجزء الأيمن من المصفوفة.
الترتيب السريع
تختار الخوارزمية عنصرًا محوريًا، وتعيد ترتيب عناصر المصفوفة بطريقة تأخذ فيها العناصر التي تكون أصغر من العنصر المحوري الجانب الأيسر منه، والعناصر التي تكون أكبر من العنصر المحوري الجانب الأيمن. وترتب الخوارزمية في النهاية المصفوفات الفرعية بطريقة تعاودية على جانبي العنصر المحوري.
الترتيب بالدمج
تقسّم الخوارزمية المصفوفة إلى نصفين وترتبهما تعاوديًا وتدمجمها النصفين المرتبين بعضهما ببعض.
أقرب زوج من النقاط
تبحث الخوارزمية عن أقرب زوج من النقاط في مجموعة من النقاط التي تنتمي إلى السطح x-y. يمكن حل المسألة بتعقيد زمني قدره O(n^2)‎ وذلك بحساب المسافات التي تفصل بين أزواج النقاط كلها ومقارنة المسافات لمعرفة المسافة الأقصر. يمكن تقليص التعقيد الزمني إلى المقدار O(nLogn)‎ باستخدام أسلوب فرِّق تسد.
حساب ناتج رفع عدد إلى قوّة معينة
يمكن استخدام أسلوب فرِّق تسد في كتابة خوارزمية تحسب ناتج رفع عدد معين (ليكن x) إلى قوّة معينة (لتكن y)، مع افتراض أنّ قيمتي x و y صغيرتان نسبيًا ولن تتسببا في حدوث فيضان overflow.
إيجاد الوسيط لمصفوفتين مرتبتين لهما الحجم نفسه
المطلوب في هذه الخوارزمية هو إيجاد الوسيط median للمصفوفة الناتجة عن دمج مصفوفتين مرتبتين ومتساويتين في الحجم.
إيجاد البادئة المشتركة الطولى
تستخدم هذه الخوارزمية أسلوب فرق تسد في إيجاد البادئة المشتركة الطولى لمجموعة من السلاسل النصية.
إيجاد أكبر عنصر في مصفوفة مرتبة يكون أصغر من العنصر المعطى
المطلوب في هذه المسألة هو إيجاد أكبر عنصر في مصفوفة مرتبة يكون أصغر من العنصر المعطى (ليكن x)، يسمّى هذا العنصر بأرضية العنصر x.
إيجاد أقرب عدد للعدد المعطى في مصفوفة مرتبة
المطلوب في هذه المسألة هو إيجاد أقرب عدد للعدد المعطى في مصفوفة مرتبة من الأعداد الصحيحة التي قد تحتوي على أعداد مكررة أو ذات إشارة سالبة.
إيجاد ذروة المصفوفة
ذروة المصفوفة هي عنصر في المصفوفة يكون أكبر من العنصرين المحيطين به.
إيجاد العنصر الغالب في مصفوفة مرتبة
العنصر الغالب Majority Element هو العنصر الذي يظهر أكثر من n/2 مرة في مصفوفة مرتبة تحتوي على n من الأعداد الصحيحة.
إيجاد العنصر المكرّر في المصفوفة
المطلوب في هذه المسألة هو إيجاد العنصر المكرّر في مصفوفة تحتوي على مجموعة من العناصر المرتّبة، ويتكرّر فيها عنصر واحد فقط.
إيجاد الصغرى المحلية في مصفوفة
تعرف الصغرى المحلية Local minima بأنّها النقطة التي تكون أصغر من النقطتين المجاورتين لها أو مساوية لهما.
مــصـادر: 🔗 صفحة Divide and Conquer في توثيق الخوارزميات في موقع GeeksforGeeks.

(طرق تخزين القيم) هناك طريقتان مختلفتان لتخزين القيم هما:
•- التحفيظ Memoization (من الأعلى إلى الأسفل) •- الجدولة Tabulation (من الأسفل إلى الأعلى)

(مسائل فرعية متداخلة) تشبه البرمجة الديناميكية نموذج فرّق تسد في أنّها تدمج حلول المسائل الفرعية بعضها ببعض. تستخدم البرمجة الديناميكية عمومًا عندما تظهر الحاجة إلى استخدام حلول مجموعة معينة من المسائل الفرعية مرة بعد أخرى. تخزّن حلول المسائل الفرعية في البرمجة الديناميكية في جدول وذلك لتجنّب حسابها مرة أخرى. هذا يعني أنّ البرمجة الديناميكية غير مفيدة عندما لا تكون هناك مسائل فرعية متداخلة؛ إذ لا فائدة من تخزين الحلول إن لم تكن الخوارزمية بحاجة إليها مرة أخرى. فعلى سبيل المثال: لا تتضمن عمليات البحث الثنائي Binary Search مسائل فرعية متداخلة، ولكن تتضمن عملية حساب أعداد فيبوناتشي بطريقة تعاودية العديد من المسائل الفرعية التي يجري حلّها مرة تلو الأخرى.
int fib(int n) { if ( n <= 1 ) return n; return fib(n-1) + fib(n-2); }
يمكن ملاحظة أنّ الدالة fib(3)‎ تستدعى مرتين، وإن تسنّى لنا تخزين القيمة الناتجة عن استدعاء هذه الدالة، فستنتفي الحاجة إلى إعادة حساب هذه القيمة وسيكون بالإمكان استخدام القيمة المخزّنة سابقًا عوضًا عن ذلك.

(خصائص المسائل التي يمكن حلها باستخدام البرمجة الديناميكية) تعدّ البرمجية الديناميكية إحدى نماذج الخوارزميات Algorithm Paradigm والتي تقدّم حلًّا لمسألة معقدة عن طريق تقسيمها إلى مسائل فرعية وتخزين النتائج المستحصلة لتجنب حساب النتيجة ذاتها مرة أخرى. تمتاز المسألة التي يمكن حلّها باستخدام البرمجة الديناميكية بالخاصيتين التاليتين: •- مسائل فرعية متداخلة Overlapping Subproblems •- بنية فرعية مثالية Optimal Substructure

خوارزميات البرمجة الديناميكية: 🌐 يمكن تعريف البرمجة الديناميكية بأنّها عملية تحسين تُجرى على العمليات التعاودية، بمعنى أنّه يمكن استخدام البرمجة الديناميكية في أيّ مكان تظهر فيها استدعاءات تعاودية متكررة تستخدم المدخلات عينها. وتتلخّص عملية التحسين في تخزين النتائج التي نحصل عليها من المسائل الفرعية وبهذا تنتفي الحاجة إلى إعادة حساب تلك النتائج في وقت لاحق. تختزل عملية التحسين البسيطة هذه التعقيد الزمني للخوارزميات من تعقيد زمني أسّي exponential إلى متعدد الحدود polynomail. فعلى سبيل المثال: 👨‍💻
يبلغ التعقيد الزمني لعملية حساب أعداد فيبوناتشي بطريقة تعاودية مقدارًا أسيًّا ولكن يمكن تحسين هذه الطريقة بتخزين حلول المسائل الفرعية في الخوارزمية ليُختزل التعقيد الزمني بذلك إلى مقدار خطّي.

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

الخوارزميات الجشعة: 😶 الخوارزميات الجشعة هي إحدى أساليب الخوارزميات Algorithm paradigm التي تصل إلى الحل خطوة فخطوة وذلك بالحرص على أن تقدّم الخطوة التالية أعظم فائدة ممكنة في طريق الوصول إلى الحل؛ ولهذا فإنّ المسائل التي يؤدي فيها اختيار حلول محلية فضلى local optimal إلى الوصول إلى حلول عامة فضلى global optimal، تكون هي الأكثر ملائمة للخوارزميات الجشعة، مثل مسألة حقيبة الظهر المجزئة Fractional Knapsack Problem، إذ يكون الحل المحلّي الأفضل هو اختيار العنصر الذي يمتلك أعلى نسبة (قيمة إلى وزن). يؤدي الاعتماد على هذه الطريقة إلى الوصول إلى حل مثالي عام وذلك لأنّ اختيار أجزاء من العناصر مسموح به في هذه الحالة. تستخدم الخوارزميات الجشعة كذلك في حل مسائل الأمثلية optimization problems. إن كان بالإمكان اتخاذ قرار يكون هو الأفضل في كلّ خطوة وكان بالإمكان الوصول إلى الحل الأمثل للمسألة برمتها، فيمكن للخوارزمية الجشعة حينئذٍ حلّ هذه المسألة. إن كان بإمكان الخوارزمية الجشعة إيجاد حل لمسألة معينة، فإنّ نموذج الخورازميات هذا سيكون النموذج الأفضل لحلّ المسألة لأنّه أكثر فعّاليةً من الأساليب الأخرى مثل البرمجة الديناميكية. ولكن لا يمكن تطبيق نموذج الخوارزمية الجشعة في كل الحالات، فعلى سبيل المثال يمكن حل مسألة حقيبة الظهر المجزئة باستخدام هذا النموذج ولكن لا يمكن حل مسألة حقيبة الظهر 1-0 بواسطة هذا النموذج. يمكن استخدام أسلوب الخوارزميات الجشعة في بعض الأحيان للحصول على حل تقريبي لبعض مسائل الأمثلية الصعبة. فعلى سبيل المثال:
تصنف مسألة البائع المتجول ضمن مشاكل NP-Hard. والاختيار الجشع هنا هو في التقاط أقرب مدينة غير مزورة من المدينة الحالية في كل خطوة من خطوات الحل. قد لا تعطي هذه الطريقة الحل الأمثل في كل مرة ولكن يمكن الاستفادة منها في الوصول إلى حل مثالي تقريبًا.
خوارزميات جشعة: 😶 ترميز هوفمان:
ترميز هوفمان هو من إحدى تقنيات الضغط دون خسارة البيانات. يُسند هذا الترميز رموز بتات bit codes ذات أطوال مختلفة إلى محارف مختلفة. الاختيار الجشع هنا هو إسناد شيفرة الرموز الأقصر طولًا للمحارف الأكثر تكرارًا.
مسألة اختيار النشاط:
المطلوب في مسألة اختيار النشاط Activity Selection Problem هو تحديد كيفية اختيار أقصى عدد ممكن من النشاطات التي يمكن لشخص واحد أن يؤديها بافتراض أنّ ذلك الشخص قادرٌ على تأدية نشاط واحدة في كل مرة، إن كان هناك n من النشاطات مع أوقات بدء وانتهاء كلّ نشاط.
مسألة حقيبة الظهر المجزأة:
المطلوب في مسألة حقيبة الظهر المجزّأة Fractional Knapsack هو وضع مجموعة من العناصر ذات أوزان وقيم محددة في حقيبة ظهر تتسع لعدد معين من العناصر مع مراعاة الحصول على أكبر قيمة ممكنة لمجموع قيم العناصر الموجودة في الحقيبة.
مسألة الكسر المصري:
يمكن تمثيل أي كسر موجب كمجموع لعدد من الكسور الوحدية unit fractions الفريدة. يكون الكسر كسرًا وحديًا عندما يكون بسطه 1 ومقامه عددًا صحيحًا موجبًا، فعلى سبيل المثال يمثل الكسر 1/3 كسرًا وحديًّا. تسمى طريقة التمثيل هذه بالكسر المصري Egyptian Fraction وذلك لأنّها كانت تستخدم من قبل المصريين القدماء.
مسألة تسلسل الأعمال:
لنفترض أن لدينا مصفوفة تضمّ عددًا من الأعمال التي يرتبط كلٌّ منها بموعد للإنجاز وبمردود مالي يمكن الحصول عليه عند إتمام العمل قبل الموعد المحدد. ولنفترض أنّ كل عمل يستغرق وحدة واحدة من الزمن، وبهذا يكون أقل موعد مسموح به لإنجاز العمل هو 1. كيف يمكن زيادة المردود المالي الكلي إن كان بالإمكان القيام بعمل واحد فقط في نفس الوقت؟
مسألة ملائمة الرفوف على الحائط:
لو كان هناك جدار (w) ورفوف ذات طولين مختلفين m و n، فما هو عدد الرفوف من كلا النوعين والذي يجب استخدامه بشرط أن تكون المساحة الفارغة المتبقية قليلة قدر الإمكان.
إيجاد مجموعة فرعية من مصفوفة تعطي حاصل الضرب المطلوب:
تبحث هذه الخوارزمية عن المجموعة الفرعية ضمن مصفوفة الأعداد الصحيحة المعطاة والتي تعطي أكبر قيمة أو أصغر قيمة ممكنة لحاصل ضرب عناصر المجموعة الفرعية.
تقسيم مكعب إلى مكعبات بأقصى حجم ممكن:
المطلوب في هذه الخوارزمية هو تقسيم مكعب معروف الطول والعرض والارتفاع إلى أقل عدد ممكن من المكعبات بشرط أن تكون المكعبات كلها ذات حجم واحد وأن يصل مجموع أحجامها إلى أقصى قيمة ممكنة.
طرق تعيين الأقسام في إدارة الذاكرة:
عند توفّر أكثر من جزء واحد شاغر لتلبية متطلبات عملية معيّنة، فيجب حينئذٍ اختيار جزء من الذاكرة، وتتطلب عملية الاختيار هذه استخدام طريقة معيّنة في حجز جزء معين من الذاكرة.

خوارزميات القوة الغاشمة Brute force algorithms : يشير مصطلح (القوة الغاشمة Brute Force) 🖱 إلى الأسلوب المتّبع في كتابة الخوارزميات والذي لا يتضمّن أي وسيلة لتحسين أداء تلك الخوارزمية، ولكنّه يعتمد اعتمادًا كاملًا على القوة الحوسبة لتجربة جميع الاحتمالات الممكنة إلى حين الوصول إلى الحل المنشود. وتعدّ خوارزمية التاجر الرحالة Traveling salesman (TSP)‎ أحدّ الأمثلة التقليدية عن هذا الأسلوب. فلو فرضنا أنّ تاجرًا يريد زيارة 10 مدن في دولة ما، فكيف يمكن تحديد ترتيب هذه المدن بشرط أن يقطع التاجر أقصر مسافة ممكنة مرورًا بجميع المدن؟ لو اعتمدنا أسلوب القوة الغاشمة في حلّ هذا المسألة فسنحسب المسافة الكلية لجميع الطرق الممكنة ثم اختيار الطريق الأقصر؛ ولكنّ هذا الأسلوب غير فعالٍ على الإطلاق، إذ يمكن تجنّب العديد من المسارات المحتملة باستخدام بعض الخوارزميات الذكية. كذلك الأمر بالنسبة إلى مسألة إيجاد كلمة مرور مؤلفة من 5 أرقام، ففي أسوأ الحالات سيتطلب إيجاد كلمة المرور تنفيذ ‎105 محاولة. يبلغ التعقيد الزمني لأسلوب القوة الغاشمة المقدار
O(n*m)‎،
وذلك لأنّنا لو أردنا مثلًا البحث في سلسلة نصية ذات n من الحروف في سلسلة نصية أخرى ذات m من الحروف فإنّ عدد المحاولات التي ستُجرى باستخدام أسلوب القوة الغاشمة سيبلغ n*m محاولة.
مصادر: 🔗
صفحة Brute Force Algorithms في توثيق الخوارزميات في موقع FreeCodeCamp.

. غدا سوف أبدأ بشرح كل نوع من انواع الخوارزميات 🫥 ثم سننتقل لشرح (علوم الحاسب ⚙️) بمحتوى حصري ✅ (إشتراك في القناة لمتابعة المحتوى الحصري والفريد وشاركه مع أصدقائك 💖 ) مقدم من قناة (مبرمج | Shadyrahimo ) https://t.me/EShadyrahimo 🗣️ .

الخلاصة: 🎮 تعرفنا في المواضيع السابقة ما هي الخوارزمية وأهمية الخوارزميات في علوم الحاسب وهندسة البرمجيات، وتعرفنا على خطوات حل الخوارزمية وطرق التعبير عن الخوارزميات بالشيفرة الوهمية والمخططات الانسيابية ثم تحويلها بعد ذلك إلى برامج حاسوبية من خلال الأمثلة العملية البسيطة التي تناسب المبتدئين. كما تعرفنا في الختام على أبرز الفوائد التي تجنيها كمبرمج من تعلم الخوارزميات، وقريبا مع توفير المراجع العربية التي تشرح الخوارزميات من الصفر للاحتراف، فإذا كنت تسعى لتكون مبرمجًا محترفًا فتعلم الخوارزميات أحد الأمور المهمة التي ينبغي أن تضعها في الحسبان لتساعدك على تحقيق هذا الهدف. 🔝 . (يرجى الإشتراك في القناة ومشاركة المرجع مع أصدقائك لُطْفًا 💖) مرجع مقدم من قناة (مبرمج | Shadyrahimo ) https://t.me/EShadyrahimo 🗣️ .

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

. 5️⃣: أهم مصادر تعلم الخوارزميات: 🔗 هناك للأسف ضعف في المحتوى العربي التقني، هذا الضعف يظهر أكثر ما يظهر في مجالات الخوارزميات. ولسدّ هذا القصور في المحتوى العربي (سنوفر قريبا) العديد من مصادر التعلم القيمة باللغة العربية. 🗣️ .

. 4️⃣: الخوارزميات تجعل منك مبرمجًا أفضل: 👑 تعلم الخوارزميات سيجعلك مبرمجًا أفضل وأكثر احترافية، فسَواء كنت متخصصًا في تطبيقات الجوال أو تطبيقات سطح المكتب، أو في بناء المواقع أو تصميم الألعاب أو غيرها من مجالات البرمجة، فإنّ تعلم الخوارزميات سيوسع أفق تفكيرك البرمجي ويساعدك على تطوير برامج أجود وأسرع وأكثر موثوقية. 🔼 .

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

. 2️⃣: الاستخدام الفعال للموارد: 🖥 يضمن لك اختيار الخوارزمية الصحيحة الاستخدام المناسب للموارد مثل الذاكرة والتخزين والشبكة وغيرها. فلا يكفي أن تكون الفكرة التي بنيت عليها البرنامج أو التطبيق مفيدة ومبتكرة، ينبغي أن تكون عملية بحيث ينفّذها الحاسوب أو الجوال في وقت معقول وموارد محدودة، فما فائدة تطبيق رسم يحتاج دقيقة كاملة ليرسم مربعًا ‼️، وما فائدة برنامج يحتاج إلى 10 جيجابايت من الذاكرة ليعمل‼️ .

. 1️⃣: القدرة على حل المشكلات بشكل أفضل: 🔝 سيحسن تعلمك لطرق حل الخوارزميات من قدرتك على حل المشكلات بصورة عامة والمشكلات البرمجية على وجه الخصوص، ويكسبك مرونة ذهنية في التفكير في الحلول ويساعدك لاحقًا في كتابة البرامج الحاسوبية المتنوعة أيًا كانت اللغة البرمجية المستخدمة خصوصًا بأنّ الخوارزميات مستقلة عن لغات البرمجة، لذا يمكنك استخدامها مهما كانت لغة البرمجة التي تعمل عليها.

. هيا لنناقش كل فائدة منها بمزيد من التفصيل ونتعرف كيف يسهم تعلم الخوارزميات في تعزيزها. 🐋 .

أهمية الخوارزميات في البرمجة: 🐍 هناك من قد يقول أنّ تعلم الخوارزميات تَرفٌ، وهو غير ضروري لكتابة البرامج والتطبيقات، وأنّه ي
أهمية الخوارزميات في البرمجة: 🐍 هناك من قد يقول أنّ تعلم الخوارزميات تَرفٌ، وهو غير ضروري لكتابة البرامج والتطبيقات، وأنّه يمكن للمبرمج أن يكتب برامجه مباشرة دون الحاجة إلى مفاهيم الخوارزميات. صحيح أنّه ليس عليك أن تكون خبيرًا في الخوارزميات لتَكون مبرمجًا، لكن لا يمكنك أن تكون مبرمجًا بارعًا ومحترفًا دون أن تتعلم فن تصميم الخوارزميات. يوفر تعلم الخوارزميات للمبرمج العديد من الفوائد أبرزها: • القدرة على حل المشكلات بشكل أفضل • الاستخدام الفعال للموارد الحاسوبية • يوفر وقت البرمجة • يجعل منك مبرمجًا أفضل (لمتابعة شرح المرجع الشامل إلى تعلم الخوارزميات يرجى الإشتراك في القناة ومشاركة المرجع مع أصدقائك لُطْفًا 💖) مقدم من قناة (مبرمج | Shadyrahimo ) https://t.me/EShadyrahimo 🗣️ .

أنواع الخوارزميات البرمجية: 🫥 الخوارزميات هي خطط عامة لحل المشاكل وتتنوع أساليب وأنواع الخوارزميات بحسب الأسلوب الذي تتبعه الخوارزمية لحل المشكلة أو بحسب نوع المشكلة التي تحلها، وبناء على ذلك يمكن أن نجد أنواعًا مختلفة من الخوارزميات ومن أبرزها: خوارزميات القوة الغاشمة Brute force algorithms :
تحاول الخوارزميات من هذا النوع حل المشكلة بطريقة مباشرة وتمر بجميع الخيارات الممكنة حتى تتمكن من العثور على حل لهذه المشكلة.
الخوارزميات الجشعة Greedy algorithms:
تحاول الخوارزميات الجشعة حل المشكلة خطوة فخطوة، بحيث تقترب رويدًا رويدًا من الحل العام للمشكلة.
خوارزميات البرمجة الديناميكية Dynamic Programming:
تقسّم خوارزميات البرمجة الديناميكية المشكلة إلى مشاكل فرعية أبسط، ثمّ تحل تلك المشاكل الفرعية لاستنتاج الحل النهائي
خوارزميات فرق تسد Divide and conquer algorithms:
تقسِّم خوارزميات فرِّق تسد المسألة إلى مسائل فرعية تشبه المسألة الأصلية، ثمّ تحلها وتدمج الحلول لتقديم حلٍّ المسألة الأصلية.
خوارزميات التعقب الخلفي Backtracking algorithms:
تحاول خوارزميات التعقب الخلفي حل المشكلة تعاوديًا عبر بناء الحل تصاعديًا خطوة فخطوة، مع حذف الحلول التي لا تستجيب للقيود التي تفرضها المسألة المُراد حلها في أيّ وقت أثناء تنفيذ الخوارزمية.
خوارزميات الترتيب Sort algorithms:
هي خوارزميات ترتب مجموعة من العناصر القائمة في ترتيب معين رقمي أو هجائي. والفرز هو أحد الخطوات الهامة في الخوارزميات الأكثر تعقيدًا، توجد عدة خوارزميات تمكننا من تحقيق عملية الفرز ولكل منها ميزاتها ومحدوديتها.
خوارزميات البحث Search algorithms:
هي خوارزميات تقوم بتحديد موقع بيانات محددة بين مجموعة من البيانات أي أنها تبحث عن البيانات المخزنة ضمن بعض الهياكل أو بنى البيانات وتقوم باستردادها.
خوارزميات التعلم الآلي:
هي خوارزميات تحاول التعلم بناءً على مجموعة من حالات اتخاذ القرار السابقة كي تتمكن من اتخاذ قرارات معقدة بناءً عليها.
خوارزميات التشفير:
هي الخوارزميات التي تقوم بتحويل نص مقروء إلى نص غير مقروء يُعرف باسم النص المشفر بحيث يمكن للأطراف المصرح لهم فقط بفهم المعلومات الموجودة في هذا النص وهي خوارزميات هامة جدًا في مجال أمن البيانات الحساسة والحفاظ على الخصوصية.
كانت تلك بعض أنواع وتصنيفات الخوارزميات الأكثر شيوعًا وهناك بالطبع العديد من الخوارزميات الأخرى للعديد من الحالات المختلفة. هناك أيضًا طرق أخرى يمكن تطبيقها بسهولة في التطبيقات مثل
خوارزمية Dijkstra و Cycle Detection و Kruskal Minimum Spanning Trees
فهي من الخوارزميات الأساسية للمبتدئين للتعلم منها.

تعقيد زمني ثابت: أي تستغرق الخوارزمية نفس الزمن مهما كان حجم الدخل.
O(1)‎
تعقيد زمني خطي: أي يتناسب زمن تنفيذ الخوارزمية بشكل خطي مع حجم الدخل، بمعنى آخر إذا كان حجم الدخل n فإن عدد الخطوات المطلوب لحلها سيكون n على الأكثر.
O(n)‎
تعقيد جذر تربيعي: أي إذا كان حجم دخل الخوازرمية هو n سوف يتناسب زمن تنفيذ الخوارزمية مع الجذر التربيعي لقيمة الدخل.
O(sqrt(n))
تعقيد كثير الحدود: يتناسب زمن تنفيذ الخوارزمية مع حجم الدخل مرفوع للأس c وله أنواع فقد يكون تعقيد زمني تربيعي O (n^²)‎ أي يتناسب زمن تنفيذ الخوارزمية مع مكعب حجم الدخل أو تعقيد زمني تكعيبي O(n^3)‎ أي يتناسب زمن تنفيذ الخوارزمية مع مكعب حجم الدخل.
O(n^c)‎
تعقيد لوغاريتمي: تناسب زمن تنفيذ الخوارزمية مع لوغاريتم حجم الدخل.
O(log n)‎
تعقيد لوغاريتمي خطي: وهو أبطأ قليلاً من الخطي
O(n log n)‌‎
تعقيد أسي: وفيه تتضاعف خطوات الخوارزمية بشكل أسي مع زيادة حجم الدخل.
O(2^n)‎
تعقيد عاملي: أي يتناسب زمن الخوارزمية مع قيمة عاملي الدخل أي ضرب جميع الأعداد الصحيحة الموجبة الأصغر من قيمة الدخل.
O(n!)‎
يمكنك أن تجد حلًا للمشاكل بدون الخوارزميات، لكن من النادر أن يكون ذلك الحل الذي وجدته هو الحل الأفضل والأكفأ، وهذه فائدة تحليل الخوارزميات فهو يمكّنك من العثور على الحل الأمثل والأنسب والأقل استهلاكًا للموارد.