مشاهدة النسخة كاملة : الرجاء عدم الدخول.. الموضوع لدمعة فقط
لعيونها
02-02-2004, 12:28 PM
السلام عليكم
طبعاً عارف فيه ناس كثير داخلين ودمعة إلى الحين مادخل :P
بصراحة بغيت اسئل دمعة عن الـ Big O
-- ما ادري سمعت انك دارس حاسب إن شاء الله ما اكون غلطان --
ياليت بشرح وبعدين ابغى مثال بسيط في اي لغة وياليت يكون المثال
سهل يعني ابغى loop بسيط مثلا جدول الضرب 5 * 5
مشكور مقدماً وكل عام وانت بخير
ههههههههههههههههههههههههههههههههههههههههههه
اي والله الكل دخل الا دمعة....
لكن مررة ثانية الافضل ارسل لي على رسالة خاصة تقول لي في موضوع هنا ابيك ترد عليه...
غالي والطلب رخيص .... ابشر راح ارد عليك بشرح لها مبسط
لكن اللوووب اللي تبيها في الاخير مافهمت وش تبي بصراحة هل مثال لعملية حساب جدول الضرب او مصفوفة حجمها 5*5 ؟؟؟؟
انتظر اجابتك وانت انتظر شرحي
السلام عليكم ورحمة الله وبركاته ...
ومتاسفين على التاخير ...
الموضوع هو Big-O Notation
الفكرة من هذه القاعدة هو معرفة مدى قدرة ودقة الخوارزم لبرنامج ما.
الاحتياجات اللازمة لفهم هذه القاعدة هي معلومات في البرمجة.
مستوى الشرح: مقدمة بسيطة جداً
الشرح:
من المعلوم للمبرمجين بانه من الصعب جداً الحكم على قدرة ودقة خوارزم ما لأي برنامج بالاعتماد على سرعة المعالج في التنفيذ؛ لسبب صغير وهو أن بعض الخوارزميات تعمل بشكل مختلف في معالجات مختلفة!!
فلهذا السبب، بدلاً من اعتمادنا على سرعة الكمبيوتر في الحكم.. نحن نتطلع إلى معرفة عدد الخطوات المحتاجة لعمل البرنامج. وهذه الطريقة تعطينا أداء عالى الدقة بتقليل الخطوات في الخوارزم وبصفة خاصة حذف الخطوات الزائدة او الغير محتاجة في البرنامج..
مثال:
لو عندنا مصفوفة تحتوي على 8000 عنصر. وأردنا البحث عن عنصر فيها!!
وكما هو معروف للجميع وخاصة المبرمجين بانه لدنيا اساليب كثيرة للبحث. منها البحث التتابعي او كما يسمى البحث المباشر او الخطي - Linear Search - وهو مقارنة العنصر المطلوب بكل العناصر، وايضا لدينا البحث الثنائي - Binary Search - وهو عبارة عن ترتيب العناصر بشكل منطقي ومن ثم تقسيمها الى قسمين ومن ثم يقارن العنصر المطلوب مع القسمين ويعرف الي اي الاقسام هي التي ينتمي لها ومن ثم ياخذ القسم ويقسمه الى قسمين وهكذا الى ان يجد العنصر المطلوب...
ولو طبقنا الـ بحث الثنائي Binary Search .. في هذه المصفوفة لوجدناها تعطينا أداء أفضل من ناحية سرعة ايجاد العنصر المطلوب والدقة في العمل من الاسلوب الثاني Linear Search.
** لكن السؤال هل سوف نخرج بنفس هذه النتيجة اذا كان عدد العناصر فقط 4 عناصر؟؟ أو كان عدد العناصر 40,000,000 عنصر؟؟
فلو جربنا منطق العقل..
فو فرضنا عندنا 4 عناصر ورميناها امام طفل وسالناه البحث عن عنصر ما.. لوجدناه ياخذ العنصر عنصراً عنصر وفي كل مررة نراه يتفحصه واحدا تلو الاخر... لكن عرضنا مجموعة كبيرة - قل 100 عنصر - من العناصر أمام بالغ ليبحث عن عنصر ما؟؟ فأفضل اسلوب هو تصنيف هذه المجموعة ومن ثم البحث عن العنصر..
~~~ أعذرني للوقوف في هذه النقطة ~~~
** بودي اكمال الشرح ... لكن هذه القاعدة تحتاج لخلفية في البرمجة وقاعدة قوية في الرياضيات وللأسف المحيط الذي نحن في مايشجع!! :( فاعذرني... لكن نقدر نكمل الدرس عن طريق الايميل اذا كان بودك.. فضلا ارسل لي على الخاص..
شاكر لك اخوي
السلام عليكم مررة أخرى ...
رأيت من الافضل ان استعين بمثال ابين فيه كيفية معرفة البيج او لبرنامج ما..
لنأخذ برنامج صغير وهو عبارة عن أمر طباعة لعدد ما لنقل هذا العدد هو N..
انظر في الصورة القادمة والتي تبين البرنامج مكتوب بالجافا << حسوا بديت اتعلم جافا :D :rolleyes: >>
http://www.angelfire.com/linux/sharksgroup/Clip_3.jpg
تمام .. ان شا الله يكون البرنامج مفهوم ومافيه اي مشاكل
طبعن كل امر في البرنامج ياخذ وقت في التنفيذ.. والحين احنا في غرض شرح الفكرة فعشان كذا راح نبسطها بشكل كبير ونعتبر كل امر ياخذ وقت محدد وثابت لكل الاوامر وهو 1 ثانية :blink: ... << معليش هذا الكمبيوتر كان جدي يبرمج فيه >>
طبعن فرضنا الثانية الواحدة لتسهيل حسابنا في هالمحل بس .. يعني لا احد يسمعنا نقوول تنفيذ امر واحد يحتاج ثانية واحدة كاملة...
تمام الحين ... يالله خلونا نبدا نحسب
السطر 1 ... راح يحتاج ثانية واحدة
السطر 2 ... راح يحتاج ثانية واحدة ... المجموع 2 ثانية
السطر 3 ... فيه ثلاث اوامر .. بالترتيب .. معرف الدورة i=0 و مدقق استمرارية الدورة الـ i<N وعداد الدورة i++...
تمام الحين: بالنسبة للمعرف فهو يحتاج ثانية واحدة
بالنسبة للمدقق فهو يحتاج N+1 ثانية!! ليش؟؟ لانه راح يتنفذ N مررة ومع اول مررة.. فيعني N+1
بالنسبة للعداد فهو يحتاج N ثانية...
وبعدين ندخل داخل الدورة LOOP ونعد سطورها وكل سطر يحتاج ثانية مثل السطر الاول والثاني - طبعا الكلام هذا اذا ماكانت داخل الدورة LOOP هذه دورة LOOP ... يعني NESTED LOOP..
فتكون عندنا حسبة الدورة كاملة للسطر الثالث مع اوامرها الداخلية ( ان كانت فيها اوامر من غير دورات اخرى - لنقل مجموع هذه الاوامر هو X )... فتكون هذه الاوامر الداخلية راح تتنفذ N مرررة -- فيعني انها تحتاج الى N*X ...
وبهذا راح يكون ان الدورة تحتاج الى .... الصورة القادمة
http://www.angelfire.com/linux/sharksgroup/Capture_2.jpg
طبعن X هي عدد الاوامر اللي داخل الدورة ... والرقم اللي يطلع لك طبعن تضيفه على المجموع السابق قبل السطر 3.
** الحين نجي للسطر 4 ...
مثل السطر الثالث ... يحتاج لـ N + N + 1 + 1 صح
السطر الخامس يحتاج لـ N ثواني لانه امر واحد.. تمام
وبكذا الدورة الثانية اللي هي السطر 4 و 5 ... تحتاج لـ N + N + N + 1 + 1
اللي يساوي 2 + 3N
صح؟؟
الحين المجموع الاخير مانجمع باللي قبل لا!!! لانه هذا راح يتنفذ N مررة في الدورة الاولى!! يعني هذا المجموع راح نحطه بدل X .... ويكون عندنا..
http://www.angelfire.com/linux/sharksgroup/bigO.jpg
هابشر كيف؟؟ فهمت والا تحس ان الشرح فاشل؟؟ ;)
الله يستر <_<
لعيونها
02-16-2004, 12:00 PM
اممممم وش اقول <_<
كلمة ابداع قليلة والله يعني ما اقدر اقول اكثر من كذا
وانا فهمت عليك اووكي لاكن اكيد عندي شوية اسئله :D
طبعاً الاسئلة ابيها تكون مواجهه :) يعني لازم اشوفك ماسنجر
او على الايميل اقل شي :P واسئلتي في
وماعليه على التاخر بالرد :( كانت فيه مشكله بالمنتدى مع اسمي مدري وش السالفه يقول اني غير مسجل :( بس الحمد لله انحلت المشكلة
السلام عليكم مررره ثانية
جيت لاني نسيت الخطوة الاخيرة :D وهي كيف نكتب الــ BigO Notation
الحين طلع الناتج النهائي للمعادلة مثل ماهي موضحة هنا
http://www.angelfire.com/linux/sharksgroup/bigO.jpg
احنا في البيج اوه مانهتم الا بالحد الكبير او مايسمى بالحد المؤثر بقوة وهو N^2 ... لماذا؟؟
لانك لو لاحظت في حساب هذه المعادلة لكذا مررة وكل مررة تجرب عدد مختلف من N راح تلقى العدد يتزايد بشكل كبير وراح تلقى ان التزايد يعتمد على هذا الحد بشكل مباشر...
فتكتب الــ BigO Notation لخوارزم لمثل هذه البرامج والتي يكون في دورتين فقط متداخلتين One Nested Loop ... هي (O(N^2
طبعا في علامات للبيج اوه كثيرة مميزة مثل...
(O(1
(O(N
(O(N^2
(O(logN
فأنت لما تسوي برنامج واحد باكثر من خوارزم راح تلقى لكل خوارزم بيج اوه مختلف.. وبكذا راح تعرف وش الافضل من بينهم..
لا شكر ع واجب اخوي الغالي لعيونها...
وانا تحت امرك وعسى ربي يوفقني واجاوب على كل اسئلتك..
تفضل اسأل بوين ماتبي
vBulletin® v3.8.1, Copyright ©2000-2012