আমাকে এই সাক্ষাত্কারের প্রশ্ন দেওয়া হয়েছে:
চার বিলিয়ন পূর্ণসংখ্যার সাথে একটি ইনপুট ফাইল দেওয়া, একটি পূর্ণসংখ্যা উত্পন্ন করতে একটি অ্যালগরিদম সরবরাহ করুন যা ফাইলটিতে নেই। ধরুন আপনার কাছে 1 জিবি মেমরি রয়েছে। আপনার যদি মাত্র 10 এমবি মেমরি থাকে তবে আপনি কী করবেন তা অনুসরণ করুন।
আমার বিশ্লেষণ:
ফাইলটির আকার 4 × 10 9 × 4 বাইট = 16 জিবি।
আমরা বাহ্যিক বাছাই করতে পারি, এভাবে আমাদের পূর্ণসংখ্যার ব্যাপ্তিটি জানতে দেয়।
আমার প্রশ্নটি হল বাছাই করা বড় পূর্ণসংখ্যার সেটগুলিতে অনুপস্থিত পূর্ণসংখ্যা সনাক্ত করার সর্বোত্তম উপায় কোনটি?
আমার বোঝাপড়া (সমস্ত উত্তর পড়ার পরে):
ধরা যাক আমরা 32-বিট পূর্ণসংখ্যার কথা বলছি, 2 32 = 4 * 10 9 স্বতন্ত্র পূর্ণসংখ্যা রয়েছে।
কেস 1: আমাদের 1 জিবি = 1 * 10 9 * 8 বিট = 8 বিলিয়ন বিট মেমরি রয়েছে।
সমাধান:
আমরা যদি একটি স্বতন্ত্র পূর্ণসংখ্যার প্রতিনিধিত্ব করে একটি বিট ব্যবহার করি তবে এটি যথেষ্ট। আমাদের বাছাইয়ের দরকার নেই।
বাস্তবায়ন:
int radix = 8;
byte[] bitfield = new byte[0xffffffff/radix];
void F() throws FileNotFoundException{
Scanner in = new Scanner(new FileReader("a.txt"));
while(in.hasNextInt()){
int n = in.nextInt();
bitfield[n/radix] |= (1 << (n%radix));
}
for(int i = 0; i< bitfield.lenght; i++){
for(int j =0; j<radix; j++){
if( (bitfield[i] & (1<<j)) == 0) System.out.print(i*radix+j);
}
}
}
কেস 2: 10 এমবি মেমরি = 10 * 10 6 * 8 বিট = 80 মিলিয়ন বিট
সমাধান:
সমস্ত সম্ভাব্য 16-বিট উপসর্গের জন্য, 2 16 সংখ্যার পূর্ণসংখ্যা = 65536 রয়েছে, আমাদের 2 16 * 4 * 8 = 2 মিলিয়ন বিট প্রয়োজন। আমাদের 65536 বালতি তৈরি করতে হবে। প্রতিটি বালতিতে আমাদের 4 টি বাইটের সমস্ত সম্ভাবনা রয়েছে কারণ সবচেয়ে খারাপ পরিস্থিতি হ'ল 4 বিলিয়ন পূর্ণসংখ্যা একই বালতিতে।
- ফাইলের মাধ্যমে প্রথম পাসের মাধ্যমে প্রতিটি বালতির কাউন্টার তৈরি করুন।
- বালতিগুলি স্ক্যান করুন, প্রথমটি খুঁজে নিন যার 65536 কম হিট রয়েছে।
- নতুন বালতি তৈরি করুন যার উচ্চ 16 বিট উপসর্গগুলি আমরা ফাইলের দ্বিতীয় পাসের মাধ্যমে ধাপ 2 এ পেয়েছি
- স্টিপি 3 এ নির্মিত বালতিগুলি স্ক্যান করুন, প্রথম বালতিটি আবিষ্কার করুন যা হিট করতে পারে না।
কোডটি একের উপরে একটির মতোই।
উপসংহার: আমরা ফাইল পাসের মাধ্যমে স্মৃতিশক্তি হ্রাস করি decrease
দেরিতে আগতদের জন্য একটি স্পষ্টতা: প্রশ্ন হিসাবে, জিজ্ঞাসা করা প্রশ্নটি বলছে না যে ফাইলটিতে ঠিক একটি পূর্ণসংখ্যার অন্তর্ভুক্ত নেই — কমপক্ষে এটি বেশিরভাগ লোক এটি ব্যাখ্যা করে না। মন্তব্য থ্রেড অনেক মন্তব্য আছে , যদিও কাজের যে প্রকরণ সম্পর্কে। দুর্ভাগ্যক্রমে যে মন্তব্যটি এটিকে মন্তব্য থ্রেডের সাথে পরিচয় করিয়েছিল তা পরবর্তীকালে তার লেখক মুছে ফেলা হয়েছে, সুতরাং এখন দেখে মনে হচ্ছে যে এতিম জবাবগুলি কেবল সবকিছুই ভুল বুঝে গেছে। এটা খুব বিভ্রান্তিকর, দুঃখিত।