اذهب إلى المحتوى

Khaled Osama3

الأعضاء
  • المساهمات

    890
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    1

أجوبة بواسطة Khaled Osama3

  1. وعليكم السلام

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

    ثم تطوير المعادلات هذا يتطلب مستوى أعلى من الفهم والابتكار. يعني أنك تقوم بابتكار وتطوير معادلات جديدة أو تحسين المعادلات الحالية بشكل مبتكر. هذا يتطلب معرفة عميقة بالرياضيات والخوارزميات.

    فالخطوة الأولى هي فهم كيف تعمل الأشياء الموجودة، ثم بعد ذلك يمكنك محاولة تطوير أشياء جديدة.

    • أعجبني 1
  2. في الكود الأول، يقوم الشرط if (loading) بفحص حالة التحميل، ولكن لا يقوم بإرجاع أي مكون React ليتم عرضه في واجهة المستخدم. هذا يعني أن Oval لا يتم عرضه فعليًا.

    في الكود الثاني، يتم استخدام التعبير الشرطي loading ? ... : ... داخل return لإرجاع الـOval مباشرة عندما تكون حالة التحميل true. وبالتالي، يتم عرض الـLoader Component بشكل صحيح عند تحميل البيانات.

    يمعني اخر الكود الثاني يعمل بشكل صحيح لأن الشرط الذي يتحقق من حالة التحميل (loading) يوجد داخل التعبير الشرطي في دالة return، مما يسمح بعرض الـLoader Component مباشرة. بينما في الكود الأول، الشرط if (loading) لا يعيد أي مكون للواجهة، وبالتالي لا يتم عرض الـLoader Component.

    • شكرًا 1
  3. بتاريخ منذ ساعة مضت قال Ail Ahmed:

    تمام بس عاوز برد افهم حاجه

    في التصنيف مش ممكن ان نغير كلمه نعم برقم مثل 1 وكلمه الا برقم 0 وكده نقدر نستخدم الRegression 

    وبر علي عكس الRegression مش ممكن ان نغير مثل 1 يعني الشخص ده مصاب بالسكر و 0 يعني ان سليم مش ممكن ان شيل ال1و0 ونستخدم كلمه مصاب بالسكري او سليم ووكده نقدر ان نستخدم البيانات ده في الClassification  

    هو ان كده فهم صح 

    في التصنيف (Classification) أيوة، ممكن نستخدم أرقام بدل الكلمات (زي 1 بدل "نعم" و0 بدل "لا"). دي بنسميها أحيانا encoding. لكن الهدف النهائي هو نفس الهدف اننا نحدد الفئة أو المجموعة اللي العنصر ينتمي ليها. يعني التصنيف بيكون دايما على هيئة مجموعات أو فئات مش أرقام مستمرة.
    انما في التنبؤ أو الانحدار (Regression) التنبؤ بيتعامل مع الأرقام بشكل مستمر، مش مجرد أرقام بتمثل فئات. يعني الرقم اللي بتتنبأ بيه ممكن يكون أي قيمة في نطاق معين، مش بس 0 و1. مثلاً، لما بتتنبأ بسعر بيت، ممكن يكون السعر 150000، 175000، أو أي رقم تاني.

    لتوضيح الفرق أكتر:
    - لو عندنا مشكلة تصنيف زي إننا نحدد إذا كان الشخص مصاب بالسكر أو لا، نقدر نستخدم 1 و0، لكن ده بيظل تصنيف لأن الهدف هو نحدد المجموعة اللي الشخص ينتمي ليها (مصاب أو سليم).
    - لو عندنا مشكلة تنبؤ زي تقدير مستوى السكر في الدم على هيئة رقم (مثلاً 120، 150، إلخ)، دي تبقى مشكلة تنبؤ أو انحدار لأننا بنتعامل مع أرقام مستمرة.
    بالتالي، التصنيف بيشتغل مع فئات محددة حتى لو استخدمنا أرقام لتمثيلها، والتنبؤ بيشتغل مع أرقام مستمرة.

    • أعجبني 1
  4. الهدف النهائي من بناء نموذج في البرمجة أو في الذكاء الاصطناعي هو استخدام البيانات اللي عندنا عشان نساعد في اتخاذ قرارات أفضل وأسرع في الحياة اليومية أو في الأعمال. النموذج ده بيكون زي عقل إلكتروني بيفهم البيانات ويتعلم منها عشان يديك توقعات أو توصيات مفيدة.

    في الطب: النموذج يقدر يساعد الدكاترة في تشخيص الأمراض بسرعة وبدقة.

    في الأعمال: يقدر يتنبأ بمبيعات المنتجات عشان الشركات تعرف تخطط للمستقبل.

    في السيارات الذاتية القيادة: النموذج بيساعد العربية تفهم الطريق وتتجنب الحوادث.

    في التطبيقات اليومية: ممكن يساعدك تختار الأفلام أو الأغاني اللي ممكن تعجبك.

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

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

    • أعجبني 1
  5. عبارة "birthday [name]" تشير إلى يوم ميلاد شخص معين، حيث يتم استبدال [name] باسم الشخص الذي تتحدث عنه.

    لنبدأ الاول بشرح القاموس Dictionary هو عبارة عن بنية بيانات في العديد من لغات البرمجة، ومنها Python. يسمح القاموس بتخزين البيانات على شكل أزواج (مفتاح: قيمة). المفتاح هو معرف فريد، والقيمة هي البيانات المرتبطة بهذا المفتاح.

    اليك مثال ليوضح الموضوع اكثر :إنشاء قاموس يحتوي على أعياد ميلاد أشخاص:

    birthdays = {
        "Alice": "1990-05-24",
        "Bob": "1985-12-14",
        "Charlie": "2000-01-01"
    }

    هنا قمنا بإنشاء قاموس يسمى birthdays و يحتوي على مفاتيح وهي أسماء الأشخاص ("Alice"، "Bob"، "Charlie").

    القيم المرتبطة بهذه المفاتيح هي تواريخ ميلادهم ("1990-05-24"، "1985-12-14"، "2000-01-01").

    للوصول إلى يوم ميلاد شخص معين:

    name = "Alice"
    print(f"{name}'s birthday is on {birthdays[name]}")

    النتيجة ستكون:

     Alice's birthday is on 1990-05-24

    بهذه الطريقة، يمكنك استخدام القاموس لتخزين واسترجاع معلومات مختلفة، مثل أعياد الميلاد، بسهولة وفعالية.

    القواميس dict في بايثون

     

  6. بتاريخ 43 دقائق مضت قال Ail Ahmed:

    اوالا شكرااا لجضرتك جدا

    ثانيا انا عاوز اتخصص في مجال رويه الحاسوب فا الافضل ان اتعلم الخاضع الاشرف والغير خاضغ الاشرف وبعد كده اتعلم التعلم العميق صح كده ؟

    بالنسبة لتخصصك في مجال رؤية الحاسوب (Computer Vision)، الطريق اللي اقترحته صحيح ومناسب جدًا. 

    التعلم الخاضع للإشراف (Supervised Learning) ده الأساس في كتير من تطبيقات رؤية الحاسوب. هتحتاج تتعلم إزاي تبني نماذج تتعرف على الأجسام في الصور وتقدر تصنفها. هتحتاج تدرس المواضيع دي:

    • التصنيف (Classification): مثلا تصنيف الصور حسب نوعها (قطة، كلب، سيارة، إلخ).
    • الكشف عن الأجسام (Object Detection): تحديد مكان وحجم الأجسام في الصور.
    • تقسيم الصور (Image Segmentation): تقسيم الصورة إلى أجزاء بناء على محتواها.

    التعلم غير الخاضع للإشراف (Unsupervised Learning) هنا هتتعلم إزاي تكتشف الأنماط في الصور من غير ما يكون عندك تصنيفات مسبقة. ده مهم لتحليل البيانات وتقديم رؤى جديدة. المواضيع اللي ممكن تدرسها تشمل:

    • التجميع (Clustering): تجميع الصور المتشابهة مع بعض.
    • تقليل الأبعاد (Dimensionality Reduction): تقليل حجم البيانات مع الحفاظ على المعلومات الأساسية.

    التعلم العميق (Deep Learning) ده الجزء الأكثر تطورًا في رؤية الحاسوب. باستخدام الشبكات العصبية العميقة (Deep Neural Networks)، تقدر تحقق أداء ممتاز في المهام المعقدة. المواضيع اللي تركز عليها هنا تشمل:

    • الشبكات العصبية الالتفافية (Convolutional Neural Networks - CNNs): دي الأساس في رؤية الحاسوب، بتستخدم لتصنيف الصور والكشف عن الأجسام.
    • الشبكات العصبية التوليدية (Generative Adversarial Networks - GANs): بتستخدم لتوليد صور جديدة وتعديل الصور الحالية.
    • التعلم بالنقل (Transfer Learning): استخدام نماذج مدربة مسبقاً وتحسينها لمهام جديدة، ده بيساعدك توفر وقت ومجهود في تدريب النماذج.

    يجب ان تبدأ بالتعلم الخاضع للإشراف:

    • تعلم الأساسيات: Python, NumPy, Pandas.
    • ادرس مكتبات التعلم الآلي زي Scikit-Learn.
    • تعلم الأساسيات في تصنيف الصور والكشف عن الأجسام.

    ثم انتقل للتعلم غير الخاضع للإشراف:

    • ادرس التقنيات الأساسية زي K-Means و PCA.
    • جرب التطبيقات العملية على البيانات الخاصة برؤية الحاسوب.

    وبعد ذلك تعمق في التعلم العميق:

    • ادرس مكتبات التعلم العميق زي TensorFlow و PyTorch.
    • ابدأ بمشاريع بسيطة في CNNs، ثم انتقل لمشاريع أكثر تعقيداً زي GANs و Transfer Learning.

    باتباع الخطوات دي، هتكون عندك قاعدة قوية في رؤية الحاسوب وتقدر تشتغل على مشاريع متقدمة في المجال.

    • أعجبني 1
  7. تعلم الآلة (Machine Learning) هو مجال كبير وفيه أنواع كتير، زي ما أنت قلت:
    1. التعلم الخاضع للإشراف (Supervised Learning):
       ده النوع اللي فيه البيانات بتكون متصنفة، يعني كل بيان لدينا بيكون معروف نوعه أو الفئة اللي بينتمي ليها. المثال الشائع هو تصنيف الصور، يعني لدينا مجموعة صور وعايزين نعرف كل صورة فيها قطة ولا كلب.
    2. التعلم غير الخاضع للإشراف (Unsupervised Learning):
       هنا البيانات ما بتبقاش متصنفة، يعني مش عارفين كل بيان ينتمي لفئة إيه. بنستخدم النوع ده لايجاد أنماط أو تجمعات في البيانات. مثال على ده هو تجميع العملاء حسب تصرفاتهم في الشراء.
    3. التعلم شبه الخاضع للإشراف (Semi-Supervised Learning):
       ده نوع بين الاثنين، يعني لدينا بعض البيانات متصنفة وبعض البيانات غير متصنفة. بنستخدم النوع ده لما يكون لدينا بيانات كتير بس ليس لدينا الوقت أو الموارد نصنفها كلها.
    4. التعلم المعزز (Reinforcement Learning):
       ده نوع مختلف قليلا، فيه الآلة بتتعلم عن طريق التجربة والخطأ. بتاخد قرارات وبناء على نتيجة القرار (إيجابي أو سلبي) بتتعلم تحسن من قراراتها المستقبلية. مثال على ده هو الألعاب، زي لعبة الشطرنج، الآلة بتتعلم تلعب وتفوز عن طريق التجربة.

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

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

    في النهاية، اختيارك للتخصص يعتمد على اهتماماتك والمجال الذي تريد العمل فيه. لا توجد مشكلة في أن تبدأ بتعلم الأساسيات في جميع الأنواع، ثم تختار النوع الذي ترى أنك ستتميز فيه.

    • أعجبني 1
  8. بتاريخ 18 ساعة قال امل هاني2:

    لم ينجح عندما قمت بعم

    لم ينجح الامر عندما قمت بعمل هاذه الخطوة 

    if Text.End([CHECKTIME], 2) = "AM" then "Entry" else "Exit"
    وبعدها قمت بعمل Pivot column  اصبحت القيم لدي 0 و 1 
    مما جعل هذه الخطوة 

    Duration.TotalHours([Exit] - [Entry])
    لا تعمل وتعطي نتائج  1 و -1

    حل مشكلة القيم التي أصبحت 0 و 1 بعد تطبيق خطوة Pivot Column، يجب التأكد من أن التوقيت في عمود CHECKTIME يبقى نصا قبل محاولة تقسيمه. وسنقوم بهذه الخطوات باستخدام Power Query في Power BI:

    تأكدى من أن العمود CHECKTIME هو نص إذا لم يكن كذلك، حددى العمود وانقرى على Data Type في الشريط العلوي واخترى"Text".
    وقومى بتحويل النص إلى تاريخ/وقت:

    -حددى العمود الذي يحتوي على التاريخ وحوله إلى نوع البيانات "Date".

    -حددى العمود الذي يحتوي على الوقت وحوله إلى نوع البيانات "Time".
    وقومى باضافة عمود جديد مخصص لحساب عدد الساعات بين الدخول والخروج:

    اضغطي على Add Column ثم Custom Column.

    واستخدمى الصيغة التالية:

    Duration.TotalHours(Time.From([Exit]) - Time.From([Entry]))
    • أعجبني 1
  9. بتاريخ 2 دقائق مضت قال محمد اصفار:

    عند تنفيد السطر الاول حلت المشكلة

    غريب، كانت الصلاحيات في الفولدر 777 من البداية

    الحمدلله ان المشكله حلت قد تكون المشكلة كانت بسبب تداخل أو تعارض في الأذونات بين المجلدات الفرعية والمجلد الأساسي.

    يمكنك استخدام الأوامر مثل ls -l للتحقق من الأذونات ومالك الملفات بشكل دوري خاصة بعد التحديثات أو التغييرات الكبيرة.

  10. بما أن المسار صحيح ويعطيك الملفات الموجودة فيه، المشكلة قد تكون في صلاحيات الوصول أو في استخدام أسماء المجلدات داخل الكود. للتحقق أكثر، تحقق من الأذونات للمجلدات الفرعية والمجلد الذي يحتوي على السكريبت

    chmod -R 777 /home/1.****.com/public_html/images2/
    

    وايضان يجب ان تتأكد من أن أسماء المجلدات في الكود تتطابق بالضبط مع الأسماء الموجودة في النظام، بما في ذلك الأحرف الكبيرة والصغيرة. في بعض الأحيان، قد تكون المشكلة ناتجة عن حرف مختلف في الاسم.

    بعد هذه التأكيدات اذا استمرت المشكله جرب ان تضف بعض التحقق من الأخطاء في الكود الخاص بك للحصول على مزيد من التفاصيل حول الخطأ لكي نستطيع ايجاد اين المشكله بالظبط

    $path = 'images2/2024/imk.jpg';
    if (!file_exists(dirname($path))) {
        die('Directory does not exist: ' . dirname($path));
    }
    if (!is_writable(dirname($path))) {
        die('Directory is not writable: ' . dirname($path));
    }
    if (file_put_contents($path, $data) === false) {
        die('Failed to write to file: ' . $path);
    }

    جرب هذه الخطوات وإذا استمرت المشكلة، قدم لي الرسائل الجديدة التي تحصل عليها

  11. تظهر الرسالة التحذيرية أن هناك مشكلة في فتح المجلد أو الملف المحدد. يمكن أن تكون المشكلة ناتجة عن عدة أسباب مثل ان المسار غير صحيح: تأكد من أن المسار images2/2024/imk.jpg هو المسار الصحيح وأنه موجود بالفعل. يبدو أن المجلد "images2" غير موجود في المسار المحدد في الرسالة التحذيرية. قد يكون المسار الصحيح هو images/2024/imk.jpg.

    تأكد من أن الأذونات مضبوطة بشكل صحيح لجميع المجلدات التي تشمل المسار الكامل. الصورة تظهر أن مجلد "images" لديه أذونات كاملة، ولكن تأكد أيضا من الأذونات للمجلدات الفرعية.

    للتأكد من وجود المسار الصحيح:

    ls -l /home/1.****.com/public_html/images2/2024/
    

    إذا لم يكن المجلد موجودا، يمكنك إنشاء المجلدات الناقصة:

    mkdir -p /home/1.****.com/public_html/images2/2024/
    

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

  12. السلام عليكم أمل ،
    لفصل توقيـت الدخول والخروج في عمودين منفصلين لحساب ساعـات العمل لكل موظف، يمكنك استخدام برنامج Power BI واستخدام استعلامات DAX أو Power Query سـوف أوضح لكى كيفيـة القيام بذلك باستخدام Power Query، وهو جزء من Power BI Desktop.

    اولا قومى بتحميل البيانات إلى Power BI:

    افتحى Power BI Desktopوانقرى على Get Data وحددى نوع البيانات Excel إذا كانت بياناتك في ملف Excel.

    وقمى بتحميل الجدول الذي يحتوي على بيانات البصمة.

    ومن ثـم افتحى محرر Power Query:

    -بعد تحميل البيانات، انقرى على Transform Data لفتح محرر Power Query.

    -إضافة عمود مخصص لتحديد نوع الحدث دخول أو خروج.

    -اختر الجدول الخاص بك في Power Query.

    -اضغطى على Add Column ثم Custom Column

    أضفى عمود مخصص لتحديد نوع الحدث دخول أو خروج بناء على الوقت. يمكنك استخدام صيغة لتحديد ما إذا كان الوقت في الصباح (AM) هو دخول وما إذا كان في المساء PM هو خروج:

    if Text.End([CHECKTIME], 2) = "AM" then "Entry" else "Exit"

    فصل التاريخ والوقت:

    استخدمى Split Column لفصل التاريخ والوقت في عمود CHECKTIME إلى تاريخ ووقت ،.واخترى العمود CHECKTIME.

    انقر على Home ثم Split Columnواختر By Delimiter واختر Space كالفاصل.

    تحويل النص إلى تاريخ/وقت:

    حددى العمود الذي يحتوي على التاريخ وحوله إلى نوع البيانات Date.

    حددى العمود الذي يحتوي على الوقت وحوله إلى نوع البيانات Time.

    ومن ثم نجعل  الجدول Pivot:

    -استخدم Pivot Column لجعل القيم في عمود نوع الحدث دخول أو خروج كعناوين أعمدة.

    -اخترى العمود الذي يحتوي على نوع الحدث.وانقرى على Transform ثم Pivot Column.

    -في نافذة Pivot Column، اختر العمود الذي يحتوي على الوقت كقيم.

    ومن ثم نقوم بحساب عدد الساعات:

    أضفى عمود مخصص جديد لحساب عدد الساعات بين الدخول والخروج.

    اضغطى على Add Column ثم Custom Column.

    استخدم صيغة لحساب الفرق بين وقت الدخول ووقت الخروج:

    Duration.TotalHours([Exit] - [Entry])

    واخيرا انقرى على Close & Apply لتطبيق التغييرات والعودة إلى Power BI
    وبعد ذلك قومى بإنشاء التقارير التى تريدين.

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

     

  14. وعليكم السلام ورحمة الله وبركاته،

    كتابة التعليقات (Comments) في الكود لا تعتبر بالضرورة مخالفة لقواعد كتابة الكود النظيف (Clean Code)، بل على العكس، فهي جزء مهم من عملية كتابة الكود النظيف والصحيح.

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

    ولكن يوجد قواعد لكتابه التعليقات مثل ان تكتب تعليقات قصيرة ومباشرة توضح الغرض من الكود بدون كلام كتير. ولا تكتب تعليقات على حاجات واضحة ومفهومة من الكود نفسه، زي تعليق بيقول "زيادة 1 للمؤشر".

    ومع ذلك، هناك بعض الأمور التي يجب مراعاتها عند كتابة التعليقات حتى لا تؤثر سلبًا على جودة الكود:

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

    2. تحديث التعليقات: يجب تحديث التعليقات بشكل منتظم لتتوافق مع أي تغييرات في الكود، حتى لا تصبح التعليقات قديمة وغير صحيحة.

    3. اتباع اتفاقية توثيق موحدة: يجب اتباع اتفاقية توثيق موحدة في جميع أنحاء المشروع، سواء كانت تعليقات أو توثيق رسمي، لضمان الاتساق والوضوح.

    لذلك، كتابة التعليقات في الكود ليست مشكلة في حد ذاتها، ولكن يجب الانتباه إلى كيفية استخدامها بشكل صحيح ومناسب لضمان جودة الكود وسهولة صيانته وقراءته.

    • أعجبني 1
  15. بتاريخ 4 دقائق مضت قال Layan Saeed2:

    هل استطيع تعلم جافا سكربت عن طريق المقاطع وفي النفس الوقت استخدم الكتاب لمساعدتي اكثر ؟ ام ان الكتاب اصعب وليس للمبتدئين ؟ 

    نعم بالتأكيد يمكنك ذلك.

    ستساعدك الفيديوهات على رؤية التعليمات البرمجية قيد التنفيذ وفهم كيفية عملها في السياق العملي. والكتب توفر شروحات أكثر عمقا وتفصيلا للنظريات والمفاهيم الأساسية.

    ابدأ بمشاهدة فيديوهات تعليمية للحصول على نظرة عامة وفهم أساسي للمفاهيم. ثم بعد مشاهدة الفيديوهات، استخدم الكتاب لتعمق الفهم ولإيجاد تفاصيل إضافية حول الموضوعات التي تعلمتها. ولكن حاول كتابة الأكواد بنفسك وتجربة ما تعلمته من الفيديوهات والكتاب.

    الطريقة المثلى هي عند مواجهة صعوبة في الفيديوهات استعن بالكتاب لمزيد من التوضيح.استخدم الكتب كمرجع بعد الانتهاء من موضوع معين.

    توكل على الله واجتهد.

    • أعجبني 1
  16. يمكنك تحميله بصيغة PDF وقراءته على جهازك، ولكن لا توجد خدمة لطلب نسخة ورقية منه مباشرة من خلال الأكاديمية. 

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

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

    للأسف، لا توجد حاليا خدمة لتوفير الكتب الورقية من قبل أكاديمية حسوب، ولكن الطباعة الذاتية تعتبر حلا مناسبا.

    • أعجبني 1
  17. الكود الذي كتبته صحيح، ولكن هناك نقطة مهمة يجب أن تعرفها بخصوص استخدام الأنماط (styles) في مكتبة matplotlib. الأنماط يجب أن تطبق قبل إنشاء الرسم البياني (أي قبل استدعاء دالة plt.plot). هنا انت قمت بإنشاء الرسم البياني أولا ثم حاولت تطبيق النمط، وهذا هو السبب في أن النمط لم يطبق على الرسم البياني.
    دعنا نعيد كتابة الكود بشكل صحيح بحيث يتم تطبيق النمط قبل إنشاء الرسم البياني:

    import matplotlib.pyplot as plt 
    
    # قائمة الأعداد للمحورين
    a = [1,2,3,4,5,6,7,8]
    b = [1,2,3,4,5,6,7,8]
    
    # تطبيق النمط قبل رسم المخطط
    plt.style.use('bmh')
    
    # رسم المخطط
    plt.plot(a,b)
    
    # عرض المخطط
    plt.show()

    في هذا الكود، قمت بتطبيق النمط bmh قبل رسم المخطط، لذا سيتم تطبيق النمط على المخطط بشكل صحيح.

    • أعجبني 1
  18. للتأسيس الجيد في البرمجة والفهم العميق للمفاهيم الأساسية، يفضل البدء بإحدى اللغات التالية:

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

    2. جافا (Java):
    لغة قوية ومنظمة، تستخدم بشكل واسع في التطبيقات التجارية وتطوير التطبيقات الكبيرة، تعتمد على البرمجة الشيئية بشكل كامل.
    تتيح لك فهم المفاهيم الأساسية للبرمجة الشيئية، إدارة الذاكرة، والتعامل مع البيانات بطرق منظمة.

    3. C++:
    توفر أداء عاليا وتتحكم بشكل دقيق في موارد النظام.
    تدعم البرمجة الشيئية، مما يسمح بإنشاء برامج معقدة بطريقة منظمة.
    تتضمن ميزات لغة C، مما يسمح بفهم عميقا لهيكلية الكمبيوتر وإدارة الذاكرة، والتي تعتبر مهارات أساسية لأي مبرمج.

    مقارنة بين اللغات التي ذكرتها:

    Screenshot(490).thumb.png.db3c42351ca2c24e1dea25182ce2fde1.png

    التوصية:

    إذا كنت مبتدئاً تماماً وترغب في تعلم أساسيات البرمجة بسهولة، فإن Python هي الخيار المثالي.

    إذا كنت مهتماً بتطوير الويب وترغب في رؤية نتائج ملموسة بسرعة، ابدأ بـ JavaScript(لا انصح الا للنتائج السريعه).

    إذا كنت ترغب في فهم عميق لمفاهيم البرمجة الأساسية وتطبيقات الأداء العالي، فإن ++C ستكون مفيدة.

    نصيحتي الاخيره لك هي ان تتعلم اساسيات البرمجه بلغه Python لكي تفهم المفاهيم العامه ثم الانتقال الي لغه ++C لكي تتعمق بها اكثر وتدرس البرمجه كائنيه التوجه وان تتعلم حل المشكلات بهذه اللغه شئ عظيم اذا حققت هذا سيمكنك الانتقال بسهوله بين كل مجالات البرمجه في وقت قصير وبسهوله عكس عندما تدرس اول لغه لك JS ستجد ان كل شئ سهل وستصل لنتائج بسرعه ولكن لا يمكنك الانتقال لمجال اخر غير بصعوبه شديده.

     

  19. يبدو أنك تواجه مشكلة في عرض الرسم البياني لكن لاحظ أنك تستخدم print() لعرض الرسمة البيانية، وهذا لن يعمل بدلا من ذلك يجب عليك استخدام plt.show() لعرض الرسمة البيانية جرب تغيير الشفيرة لتبدو مثل هذا:

    import matplotlib.pyplot as plt 
    
    a = (1,2,3,4,5,6,7,8)
    b = (1,2,3,4,5,6,7,8)
    
    plt.plot(a,b)
    plt.show()

    الفرق بين plot() و plot_date() يكمن في النوع الأساسي للبيانات التي يمكن تمثيلها بهما.

    فإن plot() تستخدم لرسم البيانات العادية، حيث يكون محور x مكونا من قيم متغيرة بشكل متسلسل على سبيل المثال، عندما تمثل محور x الوقت بصورة متسلسلة مثل الأرقام الصحيحة أو الأعداد العشرية.

    أما عن plot_date() هذه الدالة مخصصة لرسم البيانات التي تمثل قيما زمنية على محور x يتم استخدامها عندما يكون محور x يحتوي على تواريخ أو أوقات.

    فى العموم كلا الدالتين تعتمدان على plot() الأساسية لرسم البيانات لكن plot_date() توفر بعض المزايا الإضافية لمعالجة التواريخ والأوقات بشكل أسهل وأكثر تفصيلا.

    • أعجبني 2
  20. لا يمكنك بشكل مباشر إجبار المستخدم على الانتقال إلى موقع آخر في وقت معين باستخدام HTML فقط. ومع ذلك، يمكنك استخدام JavaScript لتحقيق هذه الميزة. هنا كيفية القيام بذلك:

    1. استخدم دالة setTimeout() في JavaScript لتحديد الوقت الذي تريد بعده إعادة توجيه المستخدم إلى موقع آخر.

    2. داخل دالة setTimeout() استخدم داله window.location.href لإعادة توجيه المستخدم إلى عنوان URL الجديد.

    مثل هذا المثال للتوضيح:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Redirect Example</title>
        <script>
            // تحديد الوقت الذي تريد بعده إعادة التوجيه (في هذا المثال، بعد 5 ثوانٍ)
            setTimeout(function() {
                // إعادة توجيه المستخدم إلى موقع آخر
                 window.location.href = "https://example.com"; 
            }, 5000); // 5000 مللي ثانية = 5 ثوانٍ
        </script>
    </head>
    <body>
        <h1>سيتم إعادة توجيهك إلى موقع آخر بعد 5 ثوانٍ...</h1>
    </body>
    </html>

    في هذا المثال، سيتم إعادة توجيه المستخدم إلى https://www.example.com بعد 5 ثوان من تحميل الصفحة.

    لاحظ أنه يمكنك تغيير قيمة 5000 (التي تمثل عدد المللي ثوانٍ) إلى الوقت الذي تريده قبل إعادة التوجيه.

  21. نعم، في إمكانك توصيل مشروع لارافل بأكثر من قاعدة بيانات بكل سهولة. ساشرح لك الخطوات بالتفصيل:
    1. تعديل ملف الإعدادات .env:
       - أول شئ ستفعله هي إضافة إعدادات الاتصال للقواعد البيانات المختلفة في ملف .env الخاص بمشروعك. مثلاً، لو عندك قاعدتين بيانات، واحدة اسمها db1 والتانية db2، هتضيف إعدادات زي الأتي:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=main_database
    DB_USERNAME=root
    DB_PASSWORD=
    
    DB_CONNECTION_SECOND=mysql
    DB_HOST_SECOND=127.0.0.1
    DB_PORT_SECOND=3306
    DB_DATABASE_SECOND=second_database
    DB_USERNAME_SECOND=root
    DB_PASSWORD_SECOND=

    2. تعديل ملف config/database.php:
       - بعد ما تضيف الإعدادات في .env، الان يجب الذهاب لملف config/database.php عشان تضيف الاتصالات الجديدة تحت الـ connections array:

    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],
    
    'second' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL_SECOND'),
        'host' => env('DB_HOST_SECOND', '127.0.0.1'),
        'port' => env('DB_PORT_SECOND', '3306'),
        'database' => env('DB_DATABASE_SECOND', 'forge'),
        'username' => env('DB_USERNAME_SECOND', 'forge'),
        'password' => env('DB_PASSWORD_SECOND', ''),
        'unix_socket' => env('DB_SOCKET_SECOND', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA_SECOND'),
        ]) : [],
    ],

    3. استخدام الاتصال بالقاعدة المطلوبة في كودك:

    يمكنك صنع جدول لقاعدة البيانات عبر Schema بحيث نعرف Schema::connection لقاعدة البيانات الأخرى مثل 

    Schema::connection('second')->create('users_two', function($table)
    {
        $table->increments('id'):
    });

    لما تحب تستخدم قاعدة بيانات معينة في أي استعلام بالكود، تقدر تحدد الاتصال عن طريق الاسم اللي حددته. مثلاً، لو عايز تجيب بيانات من القاعدة الثانية:

    $users = DB::connection('second')->select(...);

    ايضا يمكنك توجيه Model إلى استخدام قاعدة الاتصال الثاني الخاص بقاعدة البيانات الثانية باستخدام 

    protected $connection = 'second';
    • شكرًا 1
  22. يبدو انك بتشتغل في virtual environment في بايثون، وده شائع جدًا ومفيد علشان تدير الاعتماديات والمكتبات لمشاريع بايثون المختلفة بشكل منفصل عن باقي النظام. البيئة الافتراضية اللي بتشتغل فيها مفعلة دلوقتي، وده السبب في ظهور (venv) قبل المسار في سطر الأوامر.

    كيفية الخروج من البيئة الافتراضية

    عشان تخرج من البيئة الافتراضية في نافذة الأوامر، يمكنك استخدام الأمر:

    deactivate
    

    لما تعمل الأمر ده، هتلاحظ أن (venv) اختفت من قدام المسار، وده يعني أنك خرجت من البيئة الافتراضية.

    تغيير المسار جوا سطر الأوامر

    لو حابب تغير المسار جوا نافذة الأوامر، ممكن تستخدم الأمر cd (Change Directory). مثال لتغيير المسار:

    cd C:\Users\L\Documents
    

    أكد أنك بتكتب المسار الصحيح اللي عايز تروح له.

    استخدام VS Code بكفاءة

    VS Code ده محرر نصوص قوي ممكن تحوله لبيئة تطوير متكاملة (IDE) لو استخدمت الإضافات والإعدادات. اهم النصايح علشان تستخدم VS Code بكفاءة أكتر:

    ثبت الإضافات المناسبة: ممكن تثبت إضافات زي Python (من Microsoft) علشان تحسن دعم بايثون. الإضافة دي بتوفر دعم للتصحيح، التلميحات أثناء الكتابة، ومميزات تانية كتير.

    هيأ البيئة الافتراضية: ممكن تهيء VS Code يتعرف لوحده على البيئة الافتراضية لو ضفت مسار البيئة الافتراضية لإعدادات المشروع.

    استخدم التصحيح (Debugging): VS Code عنده مميزات تصحيح قوية. ممكن تستخدم شباك "Run and Debug" علشان تصحح سكريبتات بايثون.

    الانتقال لـ PyCharm

    PyCharm ده IDE متكامل خصوصي لـ Python بيوفر ميزات متقدمة زي تحليل الكود، دعم إطارات العمل للويب زي Django و Flask، وأدوات لتطوير قواعد البيانات. الانتقال له ممكن يكون مفيد لو بتدور على بيئة أكتر تكامل وتخصص في Python.

    • أعجبني 1
  23. علشان تحدد عدد المرات اللي ممكن تكرر فيها البيانات في قاعدة البيانات، يمكنك استخدام كذا طريقة تضمن إن البيانات متتكررش أكتر من مرتين أو تلاتة. هقولك على اتنين من الطرق الشائعة: استخدام SQL للتحكم في التكرار عند الاستعلام، واستخدام PHP لفحص البيانات قبل الإدخال.
    1. استخدام SQL للتحكم في التكرار
    علشان تتحكم في عدد المرات اللي تظهر فيها القيم في قاعدة البيانات، ممكن تستخدم استعلام SQL مع GROUP BY و HAVING لاسترجاع البيانات اللي تكررت مرتين أو تلاتة بس:

    SELECT column_name, COUNT(*)
    FROM table_name
    GROUP BY column_name
    HAVING COUNT(*) <= 3;

    الاستعلام ده بيجيب البيانات اللي متكررتش أكتر من تلات مرات. ممكن تغير القيمة 3 لو عايز تحدد حد أقصى للتكرار.
    2. استخدام PHP لفحص البيانات قبل الإدخال
    لو عايز تدخل بيانات جديدة وعايز تتأكد إن البيانات دي متتكررش أكتر من مرتين أو تلاتة، يمكنك تكتب كود PHP يفحص قاعدة البيانات قبل ما تدخل بيانات جديدة:

    <?php
    
    $pdo = new PDO('mysql:host=your_host;dbname=your_db', 'username', 'password');
    
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $column_value = 'value_to_check'; // القيمة اللي عايز تتأكد من تكرارها
    
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM table_name WHERE column_name = ?");
    
    $stmt->execute([$column_value]);
    
    $count = $stmt->fetchColumn();
    
    if ($count < 3) {
    
        // إدخال البيانات لو المرات أقل من تلاتة
    
        $insertStmt = $pdo->prepare("INSERT INTO table_name (column_name) VALUES (?)");
    
        $insertStmt->execute([$column_value]);
    
        echo "Data inserted successfully.";
    
    } else {
    
        echo "Data already exists more than twice.";
    
    }
    
    ?>

    في الكود ده، PHP بيفحص الأول عدد المرات اللي تكررت فيها القيمة المعينة في الجدول. لو القيمة موجودة أقل من تلات مرات، البيانات بتتدخل. وإلا، بيظهر رسالة بتقول إن البيانات موجودة بالفعل أكتر من مرتين.
    ممكن تستخدم الطريقتين دول حسب اللي يناسب متطلبات مشروعك، وكمان ممكن تدمجهم لأفضل نتيجة في التحكم بتكرار البيانات.

  24. عفوًا، سعيد بمساعدتك!

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

    وفي مجال تحليل البيانات والتعلم الآلي، كتير بيتطلب من الأنظمة انها تتخذ قرارات بتوزيع الموارد بشكل مثالي أو اختيار مجموعات بيانات معينة. خوارزميات زي خوارزمية الحقيبة ممكن تساعد في تحديد أي الميزات أو النماذج اللي بتعطي أحسن أداء مع محدوديات معينة.

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

    ولا تنسي ان التعرف على الخوارزميات دي بيساعد على بناء فهم قوي للنظرية الحاسوبية والخوارزميات، وده بيساهم في تطوير مهارات حل المشكلات والتفكير النقدي في مجال الذكاء الاصطناعي.

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

    • أعجبني 1
  25. وعليكم السلام،

    مشكلة الحقيبة (Knapsack Problem) دي واحدة من المشاكل اللي بتقابل الناس اللي بيشتغلوا في علوم الحاسب، وهي من نوع المشاكل اللي بتدور على أحسن طريقة لتحميل حاجات بأوزان وقيم مختلفة جوه حقيبة أو صندوق بسعة محدودة، علشان نحاول نزود القيمة الكلية بتاعت اللي جوا الحقيبة دي. الفكرة منها ممكن تتستخدم في حاجات كتير زي تحميل البضايع أو توزيع الموارد.

    الأنواع الرئيسية لمشكلة الحقيبة:
    1. 0/1 Knapsack Problem: يا تاخد الحاجة كلها يا تسيبها خالص.
    2. Fractional Knapsack Problem: تقدر تاخد جزء من الحاجة في الحقيبة.
    3. Bounded Knapsack Problem: كل حاجة ليها عدد محدود تقدر تاخده.

    خوارزميات لحل مشكلة الحقيبة:

    1. الخوارزمية الجشعة (Greedy Algorithm):
       - بتستخدم لمشكلة الحقيبة الجزئية.
       - الفكرة هي إنك تاخد الحاجات حسب نسبة القيمة للوزن، من الأعلى للأقل، وتحطها في الحقيبة لحد ما تمتلئ.
       - بتكون سريعة بس مش دايماً بتجيب الحل الأمثل للأنواع التانية من المشكلة.

    2. البرمجة الديناميكية (Dynamic Programming):
       - دي الطريقة المعتادة لحل مشكلة الحقيبة 0/1.
       - بتقسم المشكلة لمشاكل أصغر وتحفظ النتايج بتاعتها علشان متتحسبش كتير.
       - بتديك حل دقيق بس ممكن تكون غالية من ناحية الذاكرة والوقت لو السعة كبيرة.

    3. Branch and Bound:
       - بتستخدم لما تكون عايز حل دقيق لمشكلة الحقيبة 0/1.
       - بتستخدم تقنيات لتقليم الأشجار علشان تتجنب الحالات اللي مش هتجيب حل أحسن من الحل الأحسن المعروف.

    4. Approximation Algorithms:
       - لما تكون محتاج حل سريع أكتر من إنك تحصل على الحل الأمثل.
       - بتوفر حلول قريبة من الحل الأمثل وغالبًا تكون كفاية لكتير من الاستخدامات العملية.

    يلا بينا نشوف مثال عملي على مشكلة

     الحقيبة باستخدام البرمجة الديناميكية لحل 0/1 Knapsack Problem. في المشكلة دي عندنا حاجات كل واحدة ليها وزن وقيمة، وعايزين نعرف إيه الحاجات اللي لازم نشيلها في الحقيبة علشان تكون الوزن تحت الحد والقيمة أعلى ما يمكن.

    المشكلة:
    - عندنا حقيبة سعتها 50 وحدة وزن.
    - عندنا أربع حاجات بالمواصفات دي:
      - حاجة 1: وزن = 10 وحدة، قيمة = 60 وحدة.
      - حاجة 2: وزن = 20 وحدة، قيمة = 100 وحدة.
      - حاجة 3: وزن = 30 وحدة، قيمة = 120 وحدة.
      - حاجة 4: وزن = 40 وحدة، قيمة = 240 وحدة.

    الحل بالبرمجة الديناميكية:
    هنستخدم جدول الصفوف بيمثل القيم والأعمدة بتمثل الأوزان من صفر لحد الحد الأقصى للحقيبة. الهدف إن كل خلية في الجدول تعكس القيمة القصوى اللي ممكن تتحقق بالوزن ده باستخدام الحاجات لحد الصف ده.

    هنبدأ نملأ الجدول ونحسب القيمة القصوى خطوة بخطوة:

    def knapsack(W, weights, values, n):
        # إنشاء جدول K
        K = [[0 for x in range(W + 1)] for x in range(n + 1)]
    
        # بناء الجدول K[][]
        for i in range(n + 1):
            for w in range(W + 1):
                if i == 0 or w == 0:
                    K[i][w] = 0
                elif weights[i-1] <= w:
                    K[i][w] = max(values[i-1] + K[i-1][w-weights[i-1]], K[i-1][w])
                else:
                    K[i][w] = K[i-1][w]
    
        return K[n][W]
    
    # المعطيات
    values = [60, 100, 120, 240]  # قائمة بالقيم
    weights = [10, 20, 30, 40]    # قائمة بالأوزان
    W = 50                        # الوزن الأقصى للحقيبة
    n = len(values)               # عدد العناصر
    
    # دعوة الدالة
    result = knapsack(W, weights, values, n)
    print("القيمة القصوى التي يمكن الحصول عليها هي", result)

    في الكود ده:

    - knapsack دي الدالة اللي بتبني الجدول الديناميكي علشان نحسب القيمة القصوى.
    - الجدول K عبارة عن جدول ثنائي الأبعاد بيتم إنشاؤه بمقاس (n+1) x (W+1)، وهنا n هي عدد العناصر و W هو الوزن الأقصى.
    - في الحلقات، بنفحص كل وزن ممكن من 0 لغاية W لكل عنصر. إذا كان العنصر يقدر يتحمل بالوزن الحالي، هنشوف هل من المفيد إضافته ولا لأ، وده بنقرره بالمقارنة بين قيمة الخلية الحالية وقيمة الخلية اللي قبلها مضاف إليها قيمة العنصر.
    - في النهاية، K[n][W] هتحتوي على القيمة القصوى اللي يمكن تحقيقها بالوزن الأقصى W.

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

    يمكنك القراءه اكثر عن مسألة حقيبة الظهر المجزأة من هنا و عن مسألة حقيبة الظهر ‎0-1 من هنا

    • أعجبني 1
×
×
  • أضف...