سؤال

لديّ مهمتي الثانية لفئة C ++ والتي تتضمن سلاسل ماركوف. المهمة بسيطة ، لكنني غير قادر على معرفة أفضل تطبيق عند قراءة chars من الملفات.

لدي ملف حوالي 300 ألف. واحدة من قواعد المهمة هي استخدام فئات الخريطة وناقل. في الخريطة (المفتاح هو سلسلة فقط) وستكون القيم المتجهات. عندما أقرأ من الملف ، أحتاج إلى البدء في جمع أزواج المفاتيح.

مثال:

File1.txt
1234567890
1234567890

إذا حدد Markov K = 3 ، فيجب أن يكون في خريطتي:

key     vector
123  -> 4
456  -> 7
789  -> 0
0/n1 -> 2
234  -> 5
567  -> 8
890  -> /n
/n   -> NULL

اقتراح الأستاذ هو قراءة Char بواسطة Char ، لذا فإن الخوارزمية الخاصة بي هي ما يلي

while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {   
       get nextchar if =!EOF
       insert nextchar value in vector
       insert tempstring to Map and assign vector         
       unget char
}

}

أنا أغفل بعض التفاصيل الأخرى. سؤالي الرئيسي هو أنه إذا كان لدي 318000 حرفًا ، فسأقوم بعمل مشروط في كل مرة يبطئ جهاز الكمبيوتر الخاص بي كثيرًا (Mac Pro الجديد). يقوم برنامج عينة من الأستاذ بتنفيذ هذا الملف في حوالي 5 ثوان.

لا أستطيع معرفة ما هي أفضل طريقة لقراءة الكلمات الثابتة من ملف نصي في C ++.

شكرًا!

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

المحلول

هل قمت بالفعل بتوقيت البرنامج؟ يجب أن تكون 318،000 شرطية قطعة من الكعكة لماك برو الجديد الخاص بك. يجب أن يستغرق فقط microseconds.

التحسين السابق لأوانه هو جذر كل الشر. اجعل البرنامج يعمل أولاً ، ويأتي التحسين في المرتبة الثانية.

نصائح أخرى

قراءة الملف المتكررة سوف تبطئ البرنامج.

اقرأ الملف في كتل ، من Say Size 1024 ، وضعت في المخزن المؤقت. ثم معالجة هذا المخزن المؤقت كما تحتاج للواجب. كرر الكتلة التالية حتى تنتهي من الملف.

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