اتعلمت اساسبات java
حاليا بزاكر data structures و فاهمها ك topic بس مش فاهم استخدمها امتي ولا ازاي و دورها بيجي أمتى بظبط
—
سؤالك جميل - حاسسها بقيت لازمة عندي -
جوابي هنا هيتشابه مع جوابي على ال oop بس هنناقش موضوع شيق آخر غير problem-solution نبدأ بسم الله
حاليا بزاكر data structures و فاهمها ك topic بس مش فاهم استخدمها امتي ولا ازاي و دورها بيجي أمتى بظبط
—
سؤالك جميل - حاسسها بقيت لازمة عندي -
جوابي هنا هيتشابه مع جوابي على ال oop بس هنناقش موضوع شيق آخر غير problem-solution نبدأ بسم الله
ال data structure كفرع من ال computer science هو قايم على فكرة بسيطة
How should we store data?
عندنا memory عايز نخزن فيها الداتا اللي هنستعملها في ال softwares نخزنها ازاي؟
عشان تحدد طريقة التخزين محتاج تفكر في بعد تاني وهو طبيعة الاستهلاك.
How should we store data?
عندنا memory عايز نخزن فيها الداتا اللي هنستعملها في ال softwares نخزنها ازاي؟
عشان تحدد طريقة التخزين محتاج تفكر في بعد تاني وهو طبيعة الاستهلاك.
ليه نفكر في طبيعة الاستهلاك برضو؟
احنا ناويين نستعمل الداتا دي مش نخزنها بس فمهم استعمالها يبقى efficient.
وهنا ناخد crash course عن ال data structures الموجودة وازاي طريقة التخزين بتتأثر بطبيعة الاستهلاك.
احنا ناويين نستعمل الداتا دي مش نخزنها بس فمهم استعمالها يبقى efficient.
وهنا ناخد crash course عن ال data structures الموجودة وازاي طريقة التخزين بتتأثر بطبيعة الاستهلاك.
Arrays
دا أول data structure بتدرسه.
أنا دلوقتي عندي مشكلة إني عايز اخزن list من الأرقام وال list دي عارف حجمها هعمل كدا ازاي من غير ال arrays؟
هعرف variables بنفس العدد دا صح؟
ايه المشكلة في كدا؟
حاجتين:
- الموضوع مقبول لو العدد قليل
- ال variables هتبقى متبعترة في ال memory
دا أول data structure بتدرسه.
أنا دلوقتي عندي مشكلة إني عايز اخزن list من الأرقام وال list دي عارف حجمها هعمل كدا ازاي من غير ال arrays؟
هعرف variables بنفس العدد دا صح؟
ايه المشكلة في كدا؟
حاجتين:
- الموضوع مقبول لو العدد قليل
- ال variables هتبقى متبعترة في ال memory
أنا كنت بخزن ال list دي وأنا مهتم إني أقدر أتعامل مع كل entry منها زي الباقي
read/write
read/write
Point of access: last entry
Point of storing: last entry
عندك slot فاضية اسمها last entry عايز التركيز يكون عليها كلما تعمل store ل entry جديدة تاخد هي الدور دا ولما تيجي تستهلكها تدي الدور دا للي قبلها.
Point of storing: last entry
عندك slot فاضية اسمها last entry عايز التركيز يكون عليها كلما تعمل store ل entry جديدة تاخد هي الدور دا ولما تيجي تستهلكها تدي الدور دا للي قبلها.
تصميم الاتنين دول متأثر بشكل أساسي بالترتيب أنت مش عايز تتعامل مع ال data ككل ك collection إنما كترتيب.
ممكن حد يسأل هنا ويقول طب ما دا كان ممكن نحقق بال Array الفكرة بس في طريقة استهلاكنا لل array مش لازم ندى أسماء جديدة
وهنا يكون حد له مستقبل بإذن الله.
ممكن حد يسأل هنا ويقول طب ما دا كان ممكن نحقق بال Array الفكرة بس في طريقة استهلاكنا لل array مش لازم ندى أسماء جديدة
وهنا يكون حد له مستقبل بإذن الله.
ال stack وال queue ال implementation بتاعهم معمول بال Array فعلاً.
الفكرة من ال data structure إنها توفر عليك تصميم طريقة الاستهلاك بإنها بتديك interface بسيطة تتعامل معاها
الفكرة من ال data structure إنها توفر عليك تصميم طريقة الاستهلاك بإنها بتديك interface بسيطة تتعامل معاها
تظهر مشكلة في ال Array وهي ال allocation إننا لازم نعمل allocation لكل المساحة اللي عايزينها بشكل continuous كل entry يبقى وراه أخوه في ال memory ودا بيحطنا قدام مشكلة ال reallocation
تأتي ال linked-list للإنقاذ أنت لسه معاك ال list اللعينة بس عايز تقضي على فكرة ال reallocation تعمل ايه؟
ايه البساطة في ال Array؟ إن ال entry وراه اللي بعديه في ال memory لو مقدرتش أقدم دا ممكن أعمل إيه؟
ممكن أخزن واحتفظ بمكان اللي بعدي.
Node {data, next}
ايه البساطة في ال Array؟ إن ال entry وراه اللي بعديه في ال memory لو مقدرتش أقدم دا ممكن أعمل إيه؟
ممكن أخزن واحتفظ بمكان اللي بعدي.
Node {data, next}
ومن التصميم دا برضو نقدر نعمل ال stack وال queue.
بل هو مناسب أكتر لإن مفيش فيه reallocation واحنا مش محتاجين نتعامل مع الداتا بعيد عن access point واحدة.
كل دا الداتا عندنا بسيطة واستهلاكها مباشر لو الدنيا اتعقدت زي إني مش عايز entry تتكرر؟
هنا بتيجي ال set
بل هو مناسب أكتر لإن مفيش فيه reallocation واحنا مش محتاجين نتعامل مع الداتا بعيد عن access point واحدة.
كل دا الداتا عندنا بسيطة واستهلاكها مباشر لو الدنيا اتعقدت زي إني مش عايز entry تتكرر؟
هنا بتيجي ال set
المبدأ فيها إنك ترفض تخزين أي duplicate value لإني عايز أتعامل مع unique values بس
طب نعملها ازاي ؟
ممكن نربط ال value بمكانها في ال memory ودا دور ال hashing
إني أعمل map وصلة بين ال value وال place.
حاجة بلعبة الأطفال اللي فيها أشكال محددة
طب نعملها ازاي ؟
ممكن نربط ال value بمكانها في ال memory ودا دور ال hashing
إني أعمل map وصلة بين ال value وال place.
حاجة بلعبة الأطفال اللي فيها أشكال محددة
الدائرة مش هتسمح غير لدائرة
المثلث مش هيسمح غير لمثلث
فاللي أنت بتخزنه محكوم بمكان معين بناء على طبيعته.
تعالي نعقد الموضوع أكتر وهو إني مش بس عايز القيمة ما تتكررش إنما عايز أربط بيها قيمة تانية أصلاً
Ali - > 15
Mohamed - > 20
دي الmap
المثلث مش هيسمح غير لمثلث
فاللي أنت بتخزنه محكوم بمكان معين بناء على طبيعته.
تعالي نعقد الموضوع أكتر وهو إني مش بس عايز القيمة ما تتكررش إنما عايز أربط بيها قيمة تانية أصلاً
Ali - > 15
Mohamed - > 20
دي الmap
ال map بتزود خطوة زيادة وهي إنها بتخزن القيمة دي في المكان اللي اتحدد من القيمة الأولى
وهنا بنسميهم
Key و value
نعقد الموضوع أكتر الداتا مبقتش linear علاقتها ببعض مبقتش ترتيب إنما بقت adjacency قرب
مش ايه اللي بعدي إنما ايه اللي حوليا
وهنا بنسميهم
Key و value
نعقد الموضوع أكتر الداتا مبقتش linear علاقتها ببعض مبقتش ترتيب إنما بقت adjacency قرب
مش ايه اللي بعدي إنما ايه اللي حوليا
زي شجرة العيلة كدا الداتا بتاعتها مش ترتيب إنما قرب.
شجرة يعني tree و tree يعني graph (دا عندنا احنا بس :")
هنا بنخزن الداتا بمعطيين
ال entry
ال adjacents
ونتوقف عند هذا الحد.
ملاحظ حاجة؟
في pattern أو trend معين إن كل data structure بيجي يحل حاجة غيره ميقدرش يعملها
شجرة يعني tree و tree يعني graph (دا عندنا احنا بس :")
هنا بنخزن الداتا بمعطيين
ال entry
ال adjacents
ونتوقف عند هذا الحد.
ملاحظ حاجة؟
في pattern أو trend معين إن كل data structure بيجي يحل حاجة غيره ميقدرش يعملها
أو بيوسع من قدرات اللي قبله زي ال map والset
أو بيبص لل data ب dimension أوسع زي ال graph.
المهم إن كله متأثر بطبيعة استهلاك الداتا دي ودا بيرتبط بال algorithms بشكل رئيسي إنما دا موضوع يطول شرحه.
أو بيبص لل data ب dimension أوسع زي ال graph.
المهم إن كله متأثر بطبيعة استهلاك الداتا دي ودا بيرتبط بال algorithms بشكل رئيسي إنما دا موضوع يطول شرحه.
في one-liner لذيذ ممكن يساعد وهو
OOP is about single entities, DS is about entity collection.
الداتا ك instance واحدة بتختلف عن لما تبقي collection وأكتر من واحدة دا دور ال ds.
OOP is about single entities, DS is about entity collection.
الداتا ك instance واحدة بتختلف عن لما تبقي collection وأكتر من واحدة دا دور ال ds.
دورها بيجي أمتى؟
نفس الفكرة هل المشكلة اللي عندك فيها collection من الداتا ولا different entities بس ؟
طالما في collection يبقى ds أنهي واحدة فيهم؟
على حسب الطريقة اللي ناوي تستهلكهم بيها.
وزود عليهم ال common algorithms وبس كدا
نفس الفكرة هل المشكلة اللي عندك فيها collection من الداتا ولا different entities بس ؟
طالما في collection يبقى ds أنهي واحدة فيهم؟
على حسب الطريقة اللي ناوي تستهلكهم بيها.
وزود عليهم ال common algorithms وبس كدا
جاري تحميل الاقتراحات...