ask bashmohandes
All answers

انا حالياً بتعلم data structure and algorithm بس في الكورس كل شوية يقول O(n) و time and space complexity و دورت و مجمعتش حاجة بصراحة فممكن حضرتك تشرحلي اي ال time and space complexity دا؟

Anonymous · Around January 2018

Mohamed ElsherifMohamed Elsherif

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

طيب نقيس ازاي؟ الموضوع ده فضل ماشي بالحب لحد ما عمنا ربنا يطولنا في عمره دونالد كنوث Donald Knuth اقترح و قال انتم واجعين دماغكم ليه، ما احنا ممكن نحسب للخوارزميات حاجة اسمها ال Asymptotic Notation و دي حاجة موجودة في الرياضيات بالفعل من القرن ال 19، الفكرة انك تحسب مدى تأثر الخوارزمية بحجم البيانات اللي داخلة ليها، يعني هل الخوارزمية لو اشتغلت على 10 عناصر من البيانات حتاخد نفس الوقت أو الموارد اللي حتحتاجها لو اشتغلت على 100 عنصر؟ طيب 1000؟ طب لو الوقت أو الموارد عموماً بتزيد، هل بتزيد كدالة أو function لحجم البيانات اللي داخلة، و لو كده ايه الدالة اللي بتربط بين الموارد المستهلكة و بين حجم البيانات؟

اهه الدالة اللي بتربط دي هي ال Complexity بتاعة الخوارزمية، و اتعملت Classifications أو تصنيفات شهيرة بتشوف بشكل عام الخوارزمية دي بتقع فين.

مثلاً لو عندي خوارزمية الوقت اللي بتحتاجه بيتناسب طردياً مع حجم البيانات، يعني معادلتها شبه معادلة خط مستقيم فبنقول عليها Linear و بنرمزلها بأبسط معادلة لخط مستقيم اللي هي O(n)

طيب لو بتاخد وقت قريب من تربيع حجم البيانات، يبقى اسمها Quadratic function و بنرمزلها بأبسط صورة لمعادلة الدالة دي اللي هي O(n^2) و هكذا.

طبعاً ده شرح مبسط، حتلاقي تفاصيل أكتر و باقي أشهر التصنيفات هنا
https://en.wikipedia.org/wiki/Time_complexity

Open referenced link

en.wikipedia.org