الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عمل tree

مغلق
بدأه khalid_c في 3 يونيو 2004 · 2 رد · 702 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

(((أسأل الله العلي القدير أن يوفقنا إلى ما يحبه ويرضاه ..... لا تنسو أخوانكم في العراق من الدعاء ))))

#2

السلام عليكم ,,

أهم مافي ال DataStructure على الاطلاق ال LinkList ,, لأنها تعطي بنية مرنة جدا في المحافظة على الذاكرة بأفضل صورة ,, يعني نحتاج فقط الى مانحتاج اليه ,, والسبب الثاني أن بنيتها يمكن أن تستخدم في أي شيء يكون فيه لعنصر علاقة بالعنصر الذي يليه ,,

مثلا ترتيب الأرقام بال LinkList سهل ومريح جدا ,, لأننا وقت الادخال سنضع العنصر في مكانه الصحيح ,, وبدون تبذر في الذاكرة ولاعمل ازاحة لكم عنصر لنستطيع ادخال الجديد ,,

مثلا قبلا كتبت برنامجا لضغط الملفات ,, وكان يعمل بطريقة أن يجد سلسلة حروف في الملف ويغيرها بأخرى أختارها أنا أو تكون موجودة في نفس الملف ,,

المهم لايجاد أفضل تغيير ممكن لهذه الصيغ احتجت لأن اجمع بعض المعلومات عن الملف بمعرفة عدد الخانات وعدد مرات التكرار ,, ومكان توضع هذه الخانات بالنسبة لبعضها ,, وخلصت في النهاية أن لاسبيل سوى ال LinkList أبدا أبدا ,, والا سيكون الأداء سيء للغاية ,, المهم تبنيت ال LinkList وغيرت عليها قليلا لتأخذ node و Super Nodes ,, وفي النهاية عمل البرنامج لكن أداءه كان سيئا جدا ,, بسبب مشكلة ثانية تتعلق بحجز الذاكرة والغاءها ,, وليس لهاعلاقة بال LinkList ,, المهم المشروع فشل لأسبباب تتعلق بالوقت :)

هذا بالنسبة لل LinkList ,,

بالنسبة لل Trees ,, فهي مهمة أيضا جدا جدا ,, وليس ال Tree بمعناها فقط التي أخذناه في ال Datastructure وانما أيضا الفكرة العامة للبنية الشجرية ,, فالبنية الشجرية تعمل تمام كبنية ال LinkList لكن باضافة أن لكل عنصر ليس علاقة فقط مع عنصر واحد ,, لكن مع عدة عناصر أخرى ,,

التحول والانتقال من والى عنصر آخر في مصفوفة ,, أسرع مايمكن أن يكون ببنية ال Trees ,,

مثلا في ملفات ال XML حاليا ,, تستخدم ملفات ال XML غالبا في حمل البيانات حيث تعرف ال XML أن قابلية الاستفادة منها في حمل البيانات كبير جدا ,, فيمكن أن نقرأ ونكتب في ملفات ال XML بسهولة وفي كل المنصات تقريبا ,, يعني اذا اردنا مثلا أن نأخذ بيانات من جدول قاعدة بيانات مكتوبة بال Oracle ونريد عرضها للجميع مثلا دون الحاجة لمعرفة الربط مع ال Oracle فقط يكفي أن نحول البيانات الى XML ونستطيع عرضها والاستعلام منها بسهولة خارجيا ,,

بنية ال XML تستخدم الشكل الشجري حيث لو قرأت ملف XML ستجد أن البيانات معروضة بطريقة وكأنها على شكل nodes ,, حتى في ال Parser الذي يقرأ ملفات ال XML به دوال ك GetNextNode ,, و AppendNode ,, وهكذا مما يجعلك تحس أنك تتنقل في فروع شجرة فعلا ,,

فكما قلت المفهوم هو المهم الشكل الشجري ذكي جدا جدا بما يتيح الفرصة للتنقل بشكل سريع من node الى node آخر ,, فكر في ذلك وحاول أن تجد طريقة أسرع ,,

مثال آخر على ال trees ,, برنامج مشاركة الملفات الذي أعمل عليه حاليا ,, وهو من قسم تطورير المشاريع في الموقع ,, والغرض منه أن نحصل على برنامج مشاركة ملفات كما ال :kazaa مثلا لكن خاص بأعضاء arabteam2000 فقط ,,

واجهتني عدة مصاعب في البرنامج لم أستطع حلها الا بتبني البنية الشجرية لتوزيع العقد ,, المشاكل كانت لها علاقة بالأداء والسرعة ,, المهم استطعت حلها بال Tees ,, حيث من المفترض ,, أن تتم عمليات البحث عن الملفات مثلا بارسال رسالة بين العقد حيث نضمن أن ترسل كل عقدة ,, "حيث العقدة هنا مستخدم أو جهاز مستخدم في مكان ما في الكرة الأرضية " رسالة الى عقدة أخرى وفي النهاية نضمن أن العقدة الأصلية أو جهاز المستخدم الأصلي قد وصلت رسالته لكل الأجهزة الباقية ,,

لو قلنا أن نجعل المستخدم يرسل لكل الأعضاء الذين يشاركون في البرنامج ,, ففي برنامج ك Kazaa مثلا ,, لايمكن فعل ذلك ,, والسبب أن عدد الأعضاء حوالي 3 مليون في لحظة واحدة ,, فلو أراد هذا المستخدم أن يرسل لل 3 مليون كلهم ,, فسيضيع وقتا طويلا جدا وسيتسبب في خنق عرض الحزمة الخاص به ,, دعك من ارسال عدة رسائل وليست واحدة فقط ,, وايضا لايمكن الاعتماد على السيرفر في ذلك لأن السيرفر سيختنق أيضا ,, تخيل ال 3 مليون كل واحد لديه 10 رسائل يريد ارسالها لباقي ال 3 مليون عضو ,, وكل ذلك فوق رأس السيرفر :huh: ,,

المهم بعد التفكير الطويل ,, وجدت أن البنية الشجرة هي الحل ,,

حيث سنضع المستخدم في عقدة ,, وله 10 أبناء ,, وكل مستخدم في الشجرة له 10 أبناء ماعدا السطر الأخير فقط فليس لهم أبناء ,,

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

المهم ,, اذا أراد المستخدم أن يرسل رسالة لكل ال 3 مليون عقدة في الشجرة ,, فقط سيكتفي بارسال 10 رسائل وستصل الرسالة لكل ال 3 مليون !!! قل كيف ؟

سأقول لك كل عقدة تستلم هذه الرسالة فقط ترسلها لكل الأبناء ,, الا لو كانت الرسالة من الأصل من ابن لأب آخر فترسل أيضا لأب ذلك الابن ,,, هكذا نضمن أن الرسالة ستصل لك الشجرة ,,

تجدني تحدثت كثيرا ,, لكن أريد أن أبين وجهة النظر التي تقول :

أن من نظر في ال DataStructure ليس أحمقا كما كنت أعتقد انا سابقا ,, وكما تعتقد أنت حاليا :) " هل تعتقد ذلك حقا :) " فهم قد فكرو كثيرا حتى خرجو بهذه ال DataStructure ,, ولولا دراستي أنا لل DataStructure ربما لما اتسع أفقي لأستطيع أن أفكر بفكرة كهذه للبرنامج ,,

وفقك الله ,, وحفظ أهل العراق من كل سوء ,, فقط نقول لكم ,,

" ياأيها الذين آمنو اصبروا وصابروا رابطوا واتقوا الله لعلكم تفلحون "

النصر آت لامحالة فاصبرو ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

السلام عليكم أخي/ HGB

أشكرك على كل هذا الشرح الوافي والذي أسأل المولى العلي القدير أن يجعله في ميزان حسناتك إنه ولي ذلك والقادر عليه ............. أخي في الله

أخي فما حال griphic in data structure

هذا الموضوع مغلق.

مواضيع مشابهة