سؤال

وأنا أبحث لتطبيق KMP (أو ما شابه) بحث لملف كبير (> 4GB).

وأتوقع هذا أن تعطيني المشاكل though.I لا يمكن نسخ كل شيء إلى الذاكرة بسبب عدم وجود مساحة كافية هناك.

وسؤالي هو: ما هي أفضل طريقة للذهاب نحو القيام بهذا البحث؟ يجب أن مجرد إنشاء FILE * والقيام البحث مباشرة في الملف، ينبغي لي نسخ كتل (ويقول 4K) إلى الذاكرة وبحث تلك، أو أي شيء آخر تماما؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم منصة تدعم ذلك، يمكنك استخدام mmap (). ترقيم الصفحات من الملف أيضا احتمال، ولكن تذكر للحفاظ على المخزن المؤقت كبيرة بقدر الإمكان للحد من النفقات العامة IO، وأن نكون حذرين بين حدود صفحتين (لنفترض سلسلة من مطابقة، ولكن انقسم التي كتبها حد الصفحة)

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

نصائح أخرى

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

لبحث أوصي باستخدام بوير عن خوارزمية البحث .

وسوف تبحث مباشرة في الملف يكون بطيئا جدا، وذلك باستخدام التخزين المؤقت سوف تعطي أداء أفضل من ذلك بكثير. لكن لاحظ أن المخزن الخاص بك يجب أن يكون أكبر من ما كنت ابحث (SearchLength)، وبطبيعة الحال، وكان لديك لتحديث المخزن المؤقت عندما يكون بايت SearchLength قبل نهايته.

وأفضل أسلوب هو العمل على قراءته في كتل وبحث ذلك. يجب عليك ان تجعل حجم كتلة معلمة، لذلك يمكنك تجربة مع ما يعطي أفضل أداء.

ومع ذلك، فإنه عادة ما يكون أكثر كفاءة في محاولة لمؤشر الملف في بعض الطريق بحيث لم يكن لديك لخطيا البحث من خلال الملف بأكمله. على سبيل المثال، تتمتع الشركة بميزة هي سلسلة البحث خوارزمية - هل تبحث فقط عن occuences من كلمة؟ ثم يمكنك فقط إنشاء جدول تجزئة (على القرص) من الكلمات ومواقعها في ملف ولها بحث فعالة جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top