بسم الله الرحمن الرحيم
بحمد الله اتمنى ان يفيدكم هذا الموضوع ويفيد العالم باجمعه ان شاء الله
فكرة المشروع مفتوحة المصدر وانت حر فى امتلاكها تطوريها تعديلها كتابة اسمك عليها اى شئ ولا تنسانى بدعائك
الموضوع باختصار يتحدث عن طريقة ضغط المفلفات جائت الى بالى اردت ان اقوم بتنفيذها ولكن للاسف لم اووفقك
لعل بعضكم يوفق فيها ويكمل الى نجاحها
اولا ناخذ مثال على ملف به data شكلها عندما ننظر لها بال Binary هى
001000010110100001101101011001010100100
ولو قمت بترجمة هذا الملف من ال Binary الى String حتكون الناتج
Ahmed
او بمعنى افضل من ذلك سيكون Array of Char
'A' 'h' 'm' 'e' 'd'
لو قمنا بترجمة كل حرف الى ما يقابله فى ال ASCII سيكون الناتج هو
65 104 109 101 100
هنا انا لدى مجموعة من الارقام (Vector ) اذا استطعت ان اجد معادلة اذا عوضت فيها ب X ستعطينى 65
واذا عوضت فيها ب x+1 ستعطينى 104 واذا عوضت فيها ب x+2 ستعطينى 109
F(X)=65 F(X+1)=104 F(X+2)=109 F(X+3)=101 F(X+4)=100
ومن هنا فالمطلوب هو الاتى
ال F() و ال X ونهاية لقيم التعويض (كما فى مثالنا هى x+4)
طبعا الصعب فى الموضوع والمعوق لى فى الوقت الحالى نقطة ايجاد المعادلة التى تربط او تصف البيانات التى فى الملف
طبعا اتمنى ان تكون الفكرة وصلتلكم وهى اننى سوف ااخذ الملف واقوم بعمل Vector يحتوى على ال Ascii الخاصة بكل char فى هذا الملف واقوم بعد ذلك بحل هذه المعادلة بطريقة ما ؟؟؟؟!!!؟؟؟؟
ثم بعد ذلك يخرج لى ال F() وايضا ال X والنهاية التى انتهى عندها التعويض
طبعا موضوع ايجاد معادلة تصف هذه الداتا ليس امرا يسيرا خاصتا اذا ازداد عدد العناصر
طبعا كانت فكرتى مبنية اننى ااخذ من الملف واحد ميجا داتا واحملها على Memory Stream والعب معاهم حتى اجد المعادلة واجد X واجد النهاية التى بالبديهى المفروض هى X + عدد العناصر اللى لعبت معاها -1
وبعد كدا اروح احمل واحد ميجا تانى على ال memory stream اكتب على الاولى لاننى لن استخدمها مرة اخرى
وبعد ذلك اكرر العمليات على هذا المحمل مرة اخرى وهكذا
وفى النهاية سيصبح لدى ملف يتكون من
عدد من الصفوف يساوى حجم الملف / واحد ميجا (ده اذا كنت انا شغلى مبنى من الاول على واحد ميجا)
كل صف يتكون من
معادلة تصف مجموعة من العناصر عددهم هو 1024*1024 عنصر يعنى واحد ميجا بايت
وتحتوى ايضا على قيمة ال X وليس ضروريا ان تحتوى على نهاية ولكنى افضلها لان الملف ربما يكون واحد ميجا ونص او كسر فيفضل ذلك
وبذلك اكن قد كونت ملف نصى بسيط حجمه بسيط جدا مقارنتا بحجم الملف الاصلى لانه يحتوى على معادلات وليس قيم او داتا
افضل ان اكمل فكرتى وهى اننى اظن بدرجة عالية جدا ان هذا الملف لن يصل حجمة الى واحد ميجا لذلك افضل ان يقوم بضغط نفسه مرة اخرى بنفس الاسلوب وبذلك سوف يكن لدى معادلة واحدة فقط تصف ملف يحتوى على معادلات كثيرة تصف الداتا الحقيقية
طبعا سيكون بهذه الطريقة اذا ضغطت مثلا 20 جيجا فسيتكون 20*1024 سطر
لنفرض ان الحجم الذى سياخذه السطر هو 25 بايت (طبعا افتراض غير مبنى على اسلوب تجريبى)
فسيكون لدينا ملف حجمه هو 25*20*1024 بايت اى 512000 اى انها اقل من واحد ميجا (نص ميجا)
وهذا يعنى اذا جربت ضغطها مرة اخرى بسيكون الناتج هو 25 بايت
تصور تضغط 20 جيجا الى 25 بايت والله اكيدانا جننت فى عقلى
فكرة فك الضغط
وهى اننى ااخذ هذا الملف واقوم بتحميله طبعا سطر سطر على ال memory stream
ثم بعد ذلك ابدا بالتعويض وهذا امر سهل جدا ولكن صعوبته هو انه ربما تكون المعادلة كبيرة فتاخذ وقت ولكن لا شك فى سهولة الفكرة
ثم كلما عوضت ب X فى المعادلة التى حملتها معى على ال memory stream ابدا ارمى ناتج التعويض على الفايل
الذى جارى انشائه (الملف المفكوك )
وههكذا سطرا وراء سطرا حتى النهاية
وبذلك اكن قد قمت بفك الضغط بطريقة معاكسه لطريقة الضغط
طبعا منتظر تعليقاتكم على هذا المشروع الذى اخذت فى التفكير به كثيرا والمحاولات ولم انجح فى ان اصل الى طريقة
لحل مشكلة ايجاد المعادلة وقيم التعويض
لعدت اسباب اهممها هو ان هناك مشكلة كبيرة جدا وهى الوقت الذى سيتغرق لايجاد المعادلة بالاضافة الى CPU Time الذى سيكون فى حالتنا عالى جدا جدا
السبب الاخر وهو عد خبرتى الواسعه فى مجال الرياضيات التى تجعلنى استطيع حل هذه المشكلة بنفسى
واود ان انبه ان فكرة هذه المشروع فى نظرى انها فكرة رائعة جدا ربما هى مطبقة وربما لم تخترع من قبل
ولكن انا لم اقصد الا ان اساعد نفسى واساعدكم فى حلها
لم اقصد ان ابنى مشروعا لكى اكتب عليه اسمى ولكن اردت المشروع لذاته ان يكون موجودا
ادعوكم الى ان تتعاونوا على دعم ومساعدة البرامج المفتوحة المصدر والمشاركة فيها
اجعل اخى كل برامجك مفتوح المصدر ربما لن تنعم ماديا ولكن مؤكد سنتعم فكريا واخلاقيا
لانك تخدم الكمبيوتر وليس تشتغل به للكسب
اتمنى الا اكون ازعجتكم بهذا الموضوع ولكن انا فى امس الحاجة الى ارائكم وتعليقاتكم
ولابد لمن سيعلق ان يقراء الموضوع كاملا
بعض اللينكات التى يمكن ان تفيد القارئ
شكرا لكم
السلام عليكم ورحمة الله وبركاته
احمد عصام


