data structure and algorithm شرح

 لو قريت عنهم اقرا تانى صدقنى هتلاقى اختلاف وامثالة بشكل واقعى هتفيدك ان شاء الله.

يمكن أشهر كلمة فى مجالنا ومن المفترض أنك مدورش على شغل الا وأنت عارفهم لدرجاتى يعنى ؟ أومااال مش سألت السؤال سيبنى اجاوب بقا.



دردشة

يمكن اللى بيفرق شخص عن التانى هى طريقة فهمه للكود اللى بيكتبه ويكون عارف المتغير دا هيتخزن فين وهياخد ميمورى قد ايه وسرعه الكود دا هتكون عاملة ازى مش ساعات كدا تفتح موقع تلاقيه سريع معاك وموقع تانى بيكون بطئ وبتزهق منه بفرض ان الاتنين ليهم نفس عدد الزيارات فأهمية انك تكون عارف data structure and algorithm هى توفيرك للميمورى بتاع العميل وسرعه الابليكشن معاه هنتكلم على جزء واحد النهارده هى Algorithm.

---------------------------------------------------------------------------------------------------------------
Algorithm

الخورزميات هى مجرد شوية خطوات لحل مشكلة عندك .
🎯مثال
المشكلة عندى ايجاد المضروب لرقم (Problem: Find the factorial of n )
الخطوات : اكتبها عادى كما لو هتحل مساله رياضية

Initialize fact = 1
For every value v in range 1 to n:
    Multiply the fact by v
fact contains the factorial of n
خطوات عادية جدا تقدر تقرأها هعمل متغير fact وهمشى على الارقام من 1:n وكل مره هضرب ال fact فى الرقم اللى عليه الدور
الكود (احول بقا الالجورزم اللى كتبته لكود)


int factorial(int n) {
    int fact = 1;
    for (int v = 1; v <= n; v++) {
        fact = fact * v;
    }
    return fact;
}

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

مثال حقيقى لتوضيح المشكلة

خد بالك أن دايما بيحكمك الوقت اللى كودك هياخده عشان يشتغل
والريسورس بتاع الجهاز.
على و أحمد معاهم مشكلة عايزين يحلوها أن اليوزر بيدخل رقم ومستنى
يطلع مجموعه الارقام من 1:n واكتر رقم يقدر يدخله اليوزر هو 11^10
على : أنا هكتب ال algorithm
أحمد : وانا هكتب كود للالجورزم بتاعك
على : دا الالجورزم بتاعى


Initialize sum = 0
for every natural number n in range 1 to 1011 (inclusive):
    add n to sum
sum is your answer

أحمد : أنا كتبت كود ليه أهو
 
int findSum() {
    int sum = 0;
    for (int v = 1; v <= 100000000000;v++) {
        sum += v;
    }
    return sum;
}

على : تعالى نشغل الكود كدا
أحمد : أنا شغلته وانت بتصلى ودخلت للفانكشن 11^10 بس لسا مطلعش
ناتج مش عارف ليه.
على: استنى احنا نسينا نشوف الوقت اللى هتاخده الفانكشن دى عشان تتنفذ قد أيه ﻷن بيحكمنا الوقت والريسوررس
أحمد : طب معادله حسب وقت التفيذ بتساوى أيه
على : Time =num of instructions * time to execute each instruction
احمد : يبقى محتاجين عدد العمليات اللى هتحصل نعرف بكام
على :1 + (11^10 + 1) + (11^10) + 1 = x
أحمد : يبقى كدا عدد العمليات = 2 * 11^10 + 3
على : ايو وقت كل عمليه بعتمد على سرعه جهازك بس كمتوسط جهازك يقدر ينفذ 8^10 عمليه فى الثانيه
أحمد : Time taken to run code = x/y يعنى الكود بتاعنا محتاج اكتر من 16 دقيقه عشان يطلع ناتج
على : حسب الله ونعم الوكيل فيك يا خسيس😌

---------------------------------------------------------------------------------------------------------------
الحل
خد بالك ان كل مشكلة تقدر تكتب ليها اكتر من algorithm الشاطر اللى الالجوزرم بتاعه يتنفذ اسرع من التانى عشان كدا بتتسأل فى ال data structure and algorithm عشان يفرق اللى فاهم كويس تعالى نشوف الجوزرم تانى للمشكله بتاع احمد وعلى كدا.
طب لو قولت ليك أن فيه قانون رياضى بيقول أن عشان تجيب مجموع من 1:N تستخدم القانون دا Sum = N * (N + 1) / 2
يعنى مجموعه الارقام 1:5 بساوى15 شيل n فى القانون وحط 5 هى هى
اذا لو طبقنا الكلام دا على مشكله احمد وعلى
أحمد قال ل على طبق بقا الالجوزرم الجديد


int sum(int N) {
    return N * (N + 1) / 2;
}

على :كدا هنفذ عمليه واحده يعنى الكود هياخد 10 نانو من الثانيه
احمد : فله عليك😅
---------------------------------------------------------------------------------------------------------------

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

Comments