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

... أهمية الData Strucure للبرامج ...

بدأه b.m.s في 9 مايو 2007 · 10 رد · 1,964 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مررت بتجربة شخصية فحبيت إني أنشرها لكم للفائدة . يمكن البعض يطيح في نفس المشكلة . فبدل ما يعيد إختراع العجلة حتى يحل مشكلته .

طبعأ الحين أنا على مشرف تخرج من الكلية الحاسب , تخصص علوم حاسب . وكنت محتاج في في مشروع التخرج معروفة الكلمات الأكثر تكرار في اللغة العربية . يعني مثلاً مثل (من , في , إلى , عن ,.... وغيرها ) عشان أستخدمها في المشروع . ليه قلت هذا الكلام عشان أوضح إن جميع المواضيع المهمة والأساسية للحاسب درستها .

المشكلة وكالعادة ما لقيت دراسات وإحصائيات عربية سابقة أعتمد عليه فقررت إني أبحث بنفسي , ولقيت قاعدة بيانات اكسيس حجمها 600 ميقا :blink: لمقالات جرائد ومجلات . فحبيت أسوي عليها إحصائيات عشان أعرف الكلمات الأكثر تكرار. فكتبت برنامج صغير يحسب تكرار كل كلمة . وعشان إني هذه أول مرة أتعامل مع بيانات بهذا الحجم طلعت لي المشاكل والمصايب .

البرنامج اللي كتبته كان بسيط جداً جداً . وكان لا يعتمد لا على خورزميات معقدة ولا على تراكيب بيانات متطورة (Data Structure) . فقط أمر على قاعدة البيانات كاملة (جدول واحد ) صف صف وأستعلام في جدول آخر هل قاعدة الكلمة موجودة ؟ إذا كانت موجودة زد عدد تكرارها بواحد , أو اضف هذه الكلمة مع عدد تكرار بواحد . تتوقعون هل البرنامج حل المسألة ؟

من ناحية الحل فهذا حل صحيح ؟ لكن متى ستخرج النتائج ؟ الله أعلم . تركت الDesktop top يشتغل مع هذا البرنامج ليومين . وبعد يومين إكتشفت إن البرنامج وصل للمقال 1600 من أصل 30000 !!!! :wacko: .

راجعت المشكلة , فإكتشفت إن البرنامج يقرأ من الهارديسك ويكتب فيه , فطبيعي يصير بطئ جداً . طيب الحل ؟ قلت لازم أعتمد على الذاكرة عندي , خصوصاً عندي 2 قيقا . فإستبدلت الجدول اللي أسجل فيه نتائج الكلمات وتكرارها بـ Data Structure يستخدم ال Binary Search للبحث (SortedList في ال#C) ومع إستخدام أكثر من thread قل الوقت إلى ساعات بعد ما كان يستغرق أيام . وتركت البرنامج يشتغل وبعد ساعة إكتشفت إنه وصل للمقال 2000 لكن بالنسبة لي ما زال بطئ <_< . بسبب إنه يقارن كل string مع جميع الstring الموجودة في الSortedList وهذا فيه مضيعة للوقت .

بعد تفكير عميق قررت أستخدم ال hash structure يمكن تخفف الوقت وتختصرة . وبالفعل إستخدمت (HashTable في ال#C) . وتتوقعون كم قل الوقت ؟ إنتهى البرنامج وما كمل الدقيقتين !!!!!! :o .

سبحان الله من أيام -------> إلى ساعات -----> إلى دقائق . فقط بسبب الData Strucure . ما غيرت في الخوارزمية أي شئ !!!!!! :lol: .

درست الBinary Search ودرست الHash Structure وأعرف أنواعها وإستخداماتها وفائدتها ومشاكل التصادم وغيرها . لكن ما فكرت يوم إني راح أجبر على تطبيق الكلام النظري اللي تعلمته في الجامعة . يمكن المشكلة كانت إن أكبر البيانات اللي تعاملت معها من قبل ما كانت تكلفني دقيقة أو دقيقتين فحتى لو إستخدمت أسوء خوارزمية ما راح ألاحظ السرعة بين لو إستخدمت خورازمية ذكية وسريعة .

هذه تجربتي بإختصار . حبيت تشاركون فيها وأسمع آرائكم على الإختيار الأمثل للData Structure في البرامج وشكراً لحسن إستماعكم .

تم تعديل هذه المشاركة بواسطة b.m.s في 9 مايو 2007 في 03:39

#2

يبدو ان مشروعك متعلق بالـ Security

اقتباس
بعد تفكير عميق قررت أستخدم ال hash structure يمكن تخفف الوقت وتختصرة . وبالفعل إستخدمت (HashTable في ال#C) . وتتوقعون كم قل الوقت ؟ إنتهى البرنامج وما كمل الدقيقتين !!!!!!
omg_smile.gif

يعني استخدمت الـ Hashtable لتخزين الكلمة كـ Key و عدد التكرار كـ Value ?

بالتوفيق في مشروعك

منقطع من حين لاخر

#3

هلا أخوي ابو الفؤاد

لا المشروع متعلق بلغة برايل (لغير المبصرين). وإستخدمت الhash مثل ما قلت .

لكن اللي صدمني من جد . إن البرنامج بدل ما كان راح ينتهي في أيام ......... إنتهى في دقايق . :lol:

#4

بالضبط هذا ماتريد ان توصله لنا لغة الجافا في Collection Framework ،

في البرامج العاديه لاتظهر المشاكل ولاتحس ان فيه فرق ، مثل استخدمت ArrayList or Vector

ولكن عندما نذهب إلى multithread سترى الفرق ، من كلامك يبدو أن c# نسخه طبق الأصل من جافا ،

#5

السلام عليكم

أخي b.m.s هذه المادة اخذتها ولكني للاسف لا اطبقها بأي مشروع أعمله .........لانني اجدها بالفعل معقدة

وبارك الله فيك على ملا حظتك

#6

بالمناسبه أحسدكم على مادتين فقط Discrete Math & Compiler ياأهل علوم الحاسب :lol:

#7

عيسى صدقت في كلامك . في البرامج العادية يمكن ما تلاحظ الفرق .

لكن في البرامج الكبيرة راح يكون الفرق واضح . بالمناسبة ترى #C يسمونها مايكروسوفت جافا :lol: لا أحد يزعل .

وبالنسبة للمادتين فالأولى يمكن , لكن الثانية بصراحة خرجت منها وكأني ما درستها . تدري مين درسني ؟! العبقري نورين <_<

تم تعديل هذه المشاركة بواسطة b.m.s في 9 مايو 2007 في 23:37

#8

العبقري يهون عند ابو نظارات السعودي صاحب الكلمه المشهوره ( راح اصفيكم بعد اسبوعين :lol: )

اما بالنسبه للأولى ان كان مح.د. هو من درسها ، فعلاً اهنيك على الماده ، دكتور رائع

#9

الإختيار الأمثل لل Data Structure مهم جدا وخاصة عندما يتعلق الامر بالسرعة فالجزء من الثانية احيانا يكون له اعتبار فقد عملت على برنامج في فيجوال بيسك 6 وكان عندما يضغط المتسخدم على زر التخزين يقوم بعمليات بحث ما دون ان يراها المستخدم وكانت الادوات المتوفرة لهذا الامر هي

recordset

arrary

collection

dictionary

وعند استعمال اي من هؤلاء نحتاج الى ما يقارب الدقيقية وهي طويلة على زر تخزين

بعد ذلك عثرت على مقالة تدمج مابين collection و hash فتغيرت السرعة الى ثواني قليلة

لذلك على المبرمج ان يكون على دراية في

array & arraylist & hash & stack

لمن يستخدم الدوت نت ومتى يستخدم كل واحدة منهم

#10
عيسى عايد العنزي كتب:
بالمناسبه أحسدكم على مادتين فقط Discrete Math & Compiler ياأهل علوم الحاسب :lol:

أعتقد إن ال CS بيدرسو ال compiler ك parser ليس إلا :P

#11
daziplqa كتب:
أعتقد إن ال CS بيدرسو ال compiler ك parser ليس إلا :P

لا حنا درسنا الكمبايلر كامل من بدايته إلى نهايته .... فقط توقفنا عند الـ Code Generation

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