مررت بتجربة شخصية فحبيت إني أنشرها لكم للفائدة . يمكن البعض يطيح في نفس المشكلة . فبدل ما يعيد إختراع العجلة حتى يحل مشكلته .
طبعأ الحين أنا على مشرف تخرج من الكلية الحاسب , تخصص علوم حاسب . وكنت محتاج في في مشروع التخرج معروفة الكلمات الأكثر تكرار في اللغة العربية . يعني مثلاً مثل (من , في , إلى , عن ,.... وغيرها ) عشان أستخدمها في المشروع . ليه قلت هذا الكلام عشان أوضح إن جميع المواضيع المهمة والأساسية للحاسب درستها .
المشكلة وكالعادة ما لقيت دراسات وإحصائيات عربية سابقة أعتمد عليه فقررت إني أبحث بنفسي , ولقيت قاعدة بيانات اكسيس حجمها 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 في البرامج وشكراً لحسن إستماعكم .
