আমি মনে করি কেন অন্যটি সিএনটি> 0 ব্যাখ্যা করার ক্ষেত্রে একটি ভাল কাজ করেছে তবে কেন সিএনটি = 4 সম্পর্কিত কেন এবং সিএনটি বিভিন্ন সেটিংসের মধ্যে কেন এত ব্যাপকভাবে পরিবর্তিত হয় সে সম্পর্কে পর্যাপ্ত বিবরণ নেই। আমি এখানে শূন্যতা পূরণ করার চেষ্টা করব।
দিন
- এক্স মোট স্ট্যাক আকার হতে হবে
- যখন আমরা প্রথমবার প্রথম প্রবেশ করি তখন এম স্ট্যাক স্পেস হয়
- প্রতিবার যখন আমরা মূল প্রবেশ করি তখন স্ট্যাক স্পেস বৃদ্ধি করুন
- পি চালানোর জন্য প্রয়োজনীয় স্ট্যাক স্পেস হতে হবে
System.out.println
যখন আমরা প্রথম প্রধান হয়ে যাই, তখন বাকি স্থানটি এক্সএম। প্রতিটি পুনরাবৃত্তি কল আর মেমরি গ্রহণ করে। সুতরাং 1 পুনরাবৃত্তির কলের জন্য (মূলের চেয়ে 1 টি বেশি) মেমরির ব্যবহার এম + আর ose মনে করুন যে স্ট্যাকওভারফ্লো এরির সি সফল পুনরাবৃত্তির কলগুলির পরে নিক্ষেপ করা হয়, যা, এম + সি * আর <= এক্স এবং এম + সি * (আর + 1)> এক্স। প্রথম স্ট্যাকওভারফ্লো এররের সময়, এক্স - এম - সি * আর মেমরিটি বাকি আছে।
দৌড়াতে সক্ষম হতে System.out.prinln
, আমাদের স্ট্যাকের পি পরিমাণ পরিমাণ অবশিষ্ট থাকতে হবে। যদি এটি ঘটে থাকে যে এক্স - এম - সি * আর> = পি হয়, তবে 0 মুদ্রিত হবে। যদি পি-তে আরও স্থানের প্রয়োজন হয়, তবে আমরা স্ট্যাক থেকে ফ্রেমগুলি সরিয়ে, সিএনটি ++ ব্যয়ে আর মেমরি অর্জন করি।
println
শেষ পর্যন্ত কখন চালাতে সক্ষম হবে, এক্স - এম - (সি - সিএনটি) * আর> = পি। সুতরাং যদি কোনও নির্দিষ্ট সিস্টেমের জন্য পি বড় হয়, তবে সিএনটি বড় হবে।
এর কয়েকটি উদাহরণ দিয়ে এটিকে দেখুন।
উদাহরণ 1: ধরুন
- এক্স = 100
- এম = 1
- আর = 2
- পি = 1
তারপরে সি = ফ্লোর ((এক্সএম) / আর) = 49 এবং সিএনটি = সিলিং ((পি - (এক্স - এম - সি * আর)) / আর) = 0
উদাহরণ 2: ধরুন
- এক্স = 100
- এম = 1
- আর = 5
- পি = 12
তারপরে সি = 19 এবং সিএনটি = 2।
উদাহরণ 3: ধরুন
- এক্স = 101
- এম = 1
- আর = 5
- পি = 12
তারপরে সি = 20, এবং সিএনটি = 3।
উদাহরণ 4: ধরুন
- এক্স = 101
- এম = 2
- আর = 5
- পি = 12
তারপরে সি = 19 এবং সিএনটি = 2।
সুতরাং, আমরা দেখতে পাই যে সিস্টেম (এম, আর, এবং পি) এবং স্ট্যাকের আকার (এক্স) উভয়ই সিএনটি প্রভাবিত করে।
পার্শ্ব নোট হিসাবে, কত জায়গা catch
শুরু করতে হবে তা বিবেচ্য নয় । যতক্ষণ না পর্যাপ্ত জায়গা না থাকে catch
, ততক্ষণে সিএনটি বৃদ্ধি পাবে না, সুতরাং কোনও বাহ্যিক প্রভাব নেই।
সম্পাদনা
আমি যা বলেছিলাম তা ফিরিয়ে নিই catch
। এটি একটি ভূমিকা পালন করে। মনে করুন এটি শুরু করতে টি পরিমাণ জায়গার প্রয়োজন। বামন স্থান টি-টির চেয়ে বেশি হলে সিএনটি বৃদ্ধি পেতে শুরু করে এবং বাম স্থানটি println
টি + পি এর চেয়ে বেশি হলে চলে runs
সম্পাদনা
আমি আমার তত্ত্বটি ব্যাক আপ করার জন্য অবশেষে কিছু পরীক্ষা চালানোর জন্য সময় পেয়েছি। দুর্ভাগ্যক্রমে, তত্ত্বটি পরীক্ষাগুলির সাথে মেলে বলে মনে হচ্ছে না। আসলে যা ঘটে তা খুব আলাদা।
পরীক্ষার সেটআপ: উবুন্টু 12.04 সার্ভার ডিফল্ট জাভা এবং ডিফল্ট-জেডিকে সহ। Xss 70,000 থেকে 1 বাইট ইনক্রিমেন্ট থেকে 460,000 এ শুরু হয়।
ফলাফলগুলি এখানে উপলভ্য: https://www.google.com/fusiontables/DataSource?docid=1xkJhd4s8biLghe6gZbcfUs3vT5MpS_OnscjWDbM
আমি অন্য সংস্করণ তৈরি করেছি যেখানে প্রতিটি পুনর্বার ডেটা পয়েন্ট সরানো হয়। অন্য কথায়, কেবলমাত্র পূর্বের থেকে পৃথক পয়েন্টগুলি দেখানো হয়েছে। এটি অস্বাভাবিকতা দেখতে সহজ করে তোলে। https://www.google.com/fusiontables/DataSource?docid=1XG_SRzrrNasepwZoNHqEAKuZlHiAm9vbEdwfsUA