النتائج 1 إلى 8 من 8

الموضوع: [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

  1. #1
    التسجيل
    29-01-2004
    الدولة
    الحمدلله -- الكويت -- ^_^
    المشاركات
    2,987

    Post [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

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

    أهلا بعلماء المستقبل ..

    --------------------

    بسم الله ..

    حدثـْت مؤخرا جهاز البالم Treo 650p من 1.05 إلى 1.2 و الذي به تصحيح لبعض الأخطاء المهمة و زيادة أداء الجهاز (توفير البطارية)،
    و فرحتي لهذا التحديث، أني قمت بتنزيل بعض البرامج و الألعاب (المجانية) من موقع الشركة.


    و طبعا بعدها أخذني الوقت في تجربة هذه البرامج .. و بعد مدة .. اغلقت البرامج .. و إذ اني أرى علامة البطارية أصبحت باللون الأحمر (أي قرب نفاذ شحن البطارية) !!!

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

    البطارية !.. غريب .. فالجهاز كان يستمر معي طوال 3 أيام .. فماذا به أصبح و كأنه ليوم واحد فقط !
    قلت مو مشكلة .. يمكن ذلك بسبب أن اللعبة بها الكثير من المؤثرات الصوتية و المرئية .. ناهيك عن عمل الشاشة طوال الوقت (حجم الشاشة كبير)..
    ح
    بعد ذلك .. أخذت بتجربة لعبة بسيطة جدا جدا .. ألوانها لا تزيد عن الأربعة ألوان .. وليس هناك مؤثرات لا صوتية و لا مرئية (لعبة الEight Queens المشهورة)..!
    ثم أيضا .. نفس النتيجة .. إذ أن النسبة قلت كثيرا ... ! ما هذا ..!

    الصراحة .. خفت على جهازي .. و خفت أن يكون ذلك بسبب التحديث ..!
    و حتى أقتل الشك باليقين .. استخدمت الجهاز كالسابق .. و لم أشغل عليه أي برنامج خارجي .. ثم .....
    س
    الجهاز استمر معي لمدة 3 أيام كالسابق ^_^..
    و عندها تأكدت مما كنت أشك في أهميته و استخداماته ..
    ألا وهو "الكفاءة - Efficiency" ...
    التعديل الأخير تم بواسطة wellknownQ8 ; 04-11-2006 الساعة 10:28 AM

  2. #2
    التسجيل
    29-01-2004
    الدولة
    الحمدلله -- الكويت -- ^_^
    المشاركات
    2,987

    المقدمة...

    المقدمة

    منذ أن أخذت مادة "الرياضيات متقطعة" (أيام الجامعة) و بالتحديد عند موضوع Big O ntation (اضغط هنا لمعرفة المزيد عنه).. وذكر الدكتور أن استخدام مجرد حلقتين مشبوكتين (2 nested loops) في البرنامج يعتبر إضاعة لمجهود المعالج من دون فائدة، و ضرورة إيجاد بديل "أبسط و أخف"
    ي
    و مثال على ذلك .. ترتيب المصفوفة (array) إذ أن لترتيبها تصاعدا يلزمنا حلقتين مشبوكتين .. كالتالي:

    كود PHP:
    1: for (int i i++) {
    2: for (int j n-j++) {
    3: if (data[j] > data[j+1]) {
    4double temp data[j];
    5data[j] = data[j+1];
    6data[j+1] = temp;
    7: } else {
    8: break;
    9: }
    10: }
    11: } 
    اضغط هنا لرؤية مثال على طريقة الترتيب ..
    طبعا هذا حل صحيح .. و يؤدي الغرض .. لكن قد تلاحظون أن المسألة جدا بسيطة .. لكنها تأخذ من الوقت الكثير.. !
    ن
    فلنفترض أن كل عملية تبديل(الأسطر من 4 إلى 6) تأخذ ثانية واحدة .. فإذا أردنا ترتيب أسماء 10 أشخاص، اذا فسيكون الوقت الكلي 100 ثانية !
    فتخيل .. كم سيستغرق من الوقت (و الجهد) اذا كنت تريد تريتب أسماء عدد سكان مدينة كاملة !
    و تخيل انك تملك جهاز صغير(ساعة يد مثلا) فيها هذه الاسماء .. فهل ستتمكن الشركة من وضع معالج جبار لتطبيق عملية قد تكون تافهة ...

    أعلم ان الأجهزة الآن قادرة على تطبيق مئات الملايين من العمليات في الثانية الواحدة .. لكن هناك اجهزة ابسط مثل(التفونات النقالة و الPDA و الportable devices بشتى أنواعها)

    فالحل ليس بانتاج معالج أسرع .. و إنما بتبسيط و تحسين(optimizing) البرنامج..
    التعديل الأخير تم بواسطة wellknownQ8 ; 06-11-2006 الساعة 11:41 AM

  3. #3
    التسجيل
    29-01-2004
    الدولة
    الحمدلله -- الكويت -- ^_^
    المشاركات
    2,987

    لماذا التحسين ؟

    لماذا التحسين ؟

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

    ي
    و هنا قد يتبادر هذا السؤال في ذهن المبرمج:


    و ما هي مشكلتي إذا كانت بعض الأجهزة ضعيفة لتشغل برنامجي؟
    فنرد عليه بـ:
    ألا تريد نشر برنامجك الى أكبر عدد ممكن !؟
    أو هل تريد أن تقل سمعتك إذا وجد الناس أن برنامجك يأخذ مصادر الجهاز كلها ..؟
    أو بطريقة أخرى .
    تخيلوا لعبة كمبيوتر جديدة نزلت .. و تتطلب هذه المواصفات (على الأقل لتشغيل اللعبة)
    Pentium D 3.8 gigaHz
    4 gigaByte Ram
    كرت شاشة Geforce 7900
    و بالنهاية تجد أن أداء اللعبة برسومياتها و أصواتها مثل لعبة HalfLife 2 مثلا ..!؟

    و
    -----

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

    طرق كيفية تحسين الكفاءة:

  4. #4
    التسجيل
    29-01-2004
    الدولة
    الحمدلله -- الكويت -- ^_^
    المشاركات
    2,987

    رد: [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

    طرق كيفية تحسين الكفاءة:

    1- جعل كل ما في البرنامج صغير:
    من دوال و متغيرات و وظائف حتى تبدو بسيطة و مرنة

    2- عدم تكرار العمليات المنجزة، و هذا شي بديهي

    3- تحديد و تقليص المتغيرات - Make data sets small(limit variables)
    يعني اذا انت تعلم انك لن تستخدم اشارة السالب في الأرقام -مثلا- .. فبدلا من انك تستخدم int x تستبدلها بunsigned int x
    أو اذا تستخدم الأعداد الصحيحة فقط .. فبدلا من أن تستخدم double x تستبدلها ب int x
    و هكذا لبقية المتغيرات

    4- Selective Processing With an IF
    و هذا يوفر كثير من العمليات التي لاداعي لها.

    5- If-Then-Else and Cases
    نفس السبب السابق

    6- طول الجمل
    و ذلك لتوفير مساحات في الذاكرة و الوقت اللازم لاسترجاعها،
    فبدلا من انشاء ذاكرة لكل كلمة، يتم انشاء ذاكرة واحدة لجملة تتضمن تلك الكلمات.

    7- تحويل بين الأرقام و الأحرف
    تقريبا كسابقتها، بدلا من انشاء ذاكرة جديدة لمتغير جديد، نستخدم نفس الذاكرة السابقة لهذا المتغير الجديد.

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

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

    و أخيرا
    أنتظر منكم ردودكم و أسئلتكم حول الموضوع.
    شكرا لمتابعتكم و السلام

    اخوكم well-knownQ8

  5. #5
    التسجيل
    06-01-2005
    المشاركات
    2,725

    رد: [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

    بصراحه مبدع..
    thank's alot
    Project Diva

  6. #6
    الصورة الرمزية RAAAAD
    RAAAAD غير متصل عضو مميز في منتدى البرمجة
    التسجيل
    09-09-2005
    المشاركات
    63

    رد: [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

    موضوع بالفعل جميل ..

    ومن بعد إذن صاحب الموضوع .. أريد أن أضيف القليل ..


    طرق كيفية تحسين الكفاءة:
    إعطاء المتغير قيمة إبتدائية عند التصريح به.
    لتلافي حدوث مشكلة ظهور نتائج غير متوقعة, ولتسهيل عملية الـ debug
    كود PHP:
    //By RAAD
    //Street_Coder@yahoo.com
     
    #include <iostream>
     
    usingnamespace std;
     
    int main()
    {
    int num;
    int num2 0;
     
    cout << "Without Default Value: " <<num << endl;
    cout << "With Default Value: " << num2 << endl;
     

    عدم إستخدام الـ virtual function إلا عند الحاجة ..
    لأنها تحجز كميات كبيرة في الذاكرة.
    كود PHP:
    //RAAD
    //Street_Coder@yahoo.com
     
    #include <iostream>
     
    usingnamespace std;
     
    class 
    not_virutal
    {
    public:
    void fun()
    {
    }
     
    protected:
    int number;
    float x;
    };
     
    class 
    Virtual
    {
    public:
    virtualvoid fun2()
    {
    }
    protected:
    int number;
    float x;
    };
     
    int main()
    {
    not_virutal n;
    Virtual v;
     
    cout << "The size of Not Vritual Function is: " << sizeof (n) << endl;
    cout << "The size of Vritual Function is: " <<sizeof(v) << endl;

    عدم الإكثار من إستخدام الـ register
    مع أن الـ register يسرع عملية المعالجة إلا أن هذا سيكون على حساب شئ آخر.

    عدم الإكثار من الـ #define
    لأنها تعمل على إبقاء المتغيرات بداخل الذاكرة طوال فترة عمل البرنامج, مع أن ذلك يودي إلى إسراع المعالجة, ولأكن بالمقابل سيعمل على إستهلاك كميه أكبر من الذاكرة.


    إستخدام المؤشرات pointers ((نقطة مهمة جداً))
    وبالذات عند التعامل مع المصفوفات .. لأن ذلك يوفر علينا حجز كميات كبيرة من الذاكرة. ونستطيع بواسطتها معالجة المشكلة في الترتيب التصاعدي ((والتي ذكرها الأخ well-knownQ8 ))
    كود PHP:
    //By RAAD
    //Street_Coder@yahoo.com
    #include <iostream>
      
    usingnamespace std;
       
    void array(intarr)
    {
    for (
    int i =0;<5;++)
    {
    cout << *arr;
    arr++;
    }
    cout << endl;
    cout << "The Size OF Pointer Array: "<<sizeof(arr) << endl;
    }
       
    int main()
    {
    int myarray[5] = {5,6,9,2,4};
     
    for (
    int i =0;<5;i++)
    {
    cout << myarray[i];
    }
    cout << endl;
    cout << "The Size Of Normal Array: "<<sizeof(myarray)<< endl;
     
    array(
    myarray);
       

    حذف الـ objects من الذاكرة بعد الإنتهاء منه ..
    لتلافي حدوث مشكلة الـ overflow في الذاكرة



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


    التعديل الأخير تم بواسطة wellknownQ8 ; 06-11-2006 الساعة 11:45 AM سبب آخر: استبدال [code] بـ [php]

  7. #7
    التسجيل
    18-04-2001
    الدولة
    none
    المشاركات
    245

    رد: [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

    بصراحة يسلمو ايديك على هيك شرح

    وبجد مفيد لكل المبرمجين

    وألف شكر الك

  8. #8
    التسجيل
    29-01-2004
    الدولة
    الحمدلله -- الكويت -- ^_^
    المشاركات
    2,987

    رد: [مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟

    ام اس اف
    اخجلتم تواضعنا، الله يسمع منك ، لكني لم افعل الا القليل.

    رعد
    ومن بعد إذن صاحب الموضوع .. أريد أن أضيف القليل ..
    اكيد، خذ راحتك طالما أن ذلك في صالح الموضوع.

    إعطاء المتغير قيمة إبتدائية عند التصريح به.
    عدم إستخدام الـ virtual function إلا عند الحاجة ..
    عدم الإكثار من إستخدام الـ register
    عدم الإكثار من الـ #define
    إستخدام المؤشرات pointers ((نقطة مهمة جداً))
    حذف الـ objects من الذاكرة بعد الإنتهاء منه ..


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

    فشكرا اخوي و حياك الله


    aya brea
    الله يسلمك أخوي و يبارك فيك.
    و شكرا على المداخلة

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •